找回密码
 注册

STEAM登陆

绑定游戏账号后可使用

QQ登录

只需一步,快速开始

查看: 2088|回复: 38
收起左侧

基于dfs算法在csgo中用vscript制作一个14*14的必定有解的迷宫

  [复制链接]

签到天数: 45 天

[LV.5]常住居民I

4

主题

136

回帖

935

积分

混乱中立

UID
68343
僵尸币
26123
贡献度
0
注册时间
2020-4-23
在线时间
75 小时
最后登录
2024-4-24
QQ
发表于 2022-6-28 11:24:44 | 显示全部楼层 |阅读模式
游戏昵称:7ychu5 | 拥有金币:2201 | SteamID: STEAM_0:0:92422507 | 玩家信息

不注册个乐园论坛账号能玩??

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 破碎的盾 于 2022-6-28 15:32 编辑

左上角为入口,右下角是出口。
视频里的是10*10,由于vscript的自带脚本防死循环保护,过大的迷宫可能会因为保护运行到一半被报错。
首先,先明晰什么是DFS?
深度优先遍历(Depth First Search, 简称 DFS),深度优先遍历主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…,不断递归重复此过程,直到所有的顶点都遍历完成,它的特点是不撞南墙不回头,先走完一条路,再换一条路继续走。
其代码大概思路,我借鉴https://blog.csdn.net/qq_45724216/article/details/115305585中的叙述,应该是这样的。

那么就很简单了,我们主要的目标分为了两大类,第一步是随机生成14*14的迷宫数组,第二步是利用DFS对其进行检验,如果不通过检验,则不批准迷宫生成;如果检验通过,迷宫成功生成。

  1. maze_chunk <- [];
  2. maze_check <- [];
  3. spawner <- Entities.FindByName(null,"chunk_maker");
  4. spawner_origin <- spawner.GetOrigin();
  5. j <- 0; i <- 0;
  6. for(j=0;j<15;j++){
  7.     maze_check.push([]);
  8.     for(i=0;i<15;i++){
  9.         maze_check[j].push(0);
  10.     }
  11. }
  12. for(j=0;j<15;j++){
  13.     maze_chunk.push([]);
  14.     for(i=0;i<15;i++){
  15.         maze_chunk[j].push(RandomInt(0,3));
  16.     }
  17. }


  18. function generate_maze()
  19. {
  20.     if(Entities.FindByNameNearest("chunk1_brush", spawner_origin, 1024)!=null) return;
  21.     else{
  22.     j <- 0; i <- 0;
  23.     for(j=0;j<15;j++){
  24.         for(i=0;i<15;i++){
  25.             maze_chunk[j][i]=RandomInt(0,3);
  26.         }
  27.     }
  28.     maze_chunk[0][0]=0;
  29.     maze_chunk[14][14]=0;
  30.     check_maze_start();
  31.     if(maze_check[14][14]!=1) generate_maze();
  32.     }
  33. }

  34. function check_maze_start()
  35. {
  36.     j <- 0; i <- 0;
  37.     for(j=0;j<15;j++){
  38.         for(i=0;i<15;i++){
  39.             maze_check[j][i]=0;
  40.         }
  41.     }
  42.     check_maze(0,0);
  43. }
  44. function check_maze(x,y)
  45. {
  46.     maze_check[x][y]=1;
  47.     if(x==14&&y==14){
  48.         print_maze();
  49.         return;
  50.     }
  51.     else if(x==0){
  52.         if(y==0){
  53.             check_maze_right(x,y);
  54.             check_maze_down(x,y);
  55.         }
  56.         else if(y==14){
  57.             check_maze_up(x,y);
  58.             check_maze_right(x,y);
  59.         }
  60.         else{
  61.             check_maze_up(x,y);
  62.             check_maze_right(x,y);
  63.             check_maze_down(x,y);
  64.         }
  65.     }
  66.     else if(x==14){
  67.         if(y==0){
  68.             check_maze_left(x,y);
  69.             check_maze_down(x,y);
  70.         }
  71.         else{
  72.             check_maze_down(x,y);
  73.             check_maze_up(x,y);
  74.             check_maze_left(x,y);
  75.         }
  76.     }
  77.     else if(y==0){
  78.         if(x==0){
  79.             check_maze_right(x,y);
  80.             check_maze_down(x,y);
  81.         }
  82.         else if(x==14){
  83.             check_maze_down(x,y);
  84.             check_maze_left(x,y);
  85.         }
  86.         else{
  87.             check_maze_right(x,y);
  88.             check_maze_left(x,y);
  89.             check_maze_down(x,y);
  90.         }
  91.     }
  92.     else if(y==14){
  93.         if(x==0){
  94.             check_maze_up(x,y);
  95.             check_maze_right(x,y);
  96.         }
  97.         else{
  98.             check_maze_left(x,y);
  99.             check_maze_up(x,y);
  100.             check_maze_right(x,y);
  101.         }
  102.     }
  103.     else{
  104.         check_maze_up(x,y);
  105.         check_maze_left(x,y);
  106.         check_maze_down(x,y);
  107.         check_maze_right(x,y);
  108.     }
  109. }
  110. function check_maze_left(x,y)
  111. {
  112.     if(maze_chunk[x-1][y]!=1 && maze_chunk[x-1][y]!=2 && maze_check[x-1][y]==0) check_maze(x-1,y);
  113. }
  114. function check_maze_right(x,y)
  115. {
  116.     if(maze_chunk[x+1][y]!=1 && maze_chunk[x+1][y]!=2 && maze_check[x+1][y]==0) check_maze(x+1,y);
  117. }
  118. function check_maze_up(x,y)
  119. {
  120.     if(maze_chunk[x][y-1]!=1 && maze_chunk[x][y-1]!=2 && maze_check[x][y-1]==0) check_maze(x,y-1);
  121. }
  122. function check_maze_down(x,y)
  123. {
  124.     if(maze_chunk[x][y+1]!=1 && maze_chunk[x][y+1]!=2 && maze_check[x][y+1]==0) check_maze(x,y+1);
  125. }
  126. function print_maze()
  127. {
  128.     local spawner = Entities.CreateByClassname("env_entity_maker");
  129.     local j=0;local i=0;
  130.     for(j=0;j<15;j++){
  131.         for(i=0;i<15;i++){
  132.             if(maze_chunk[j][i]==0){
  133.                 spawner.__KeyValueFromString("EntityTemplate", "chunk0");
  134.                 spawner.SpawnEntityAtLocation(spawner_origin, Vector(0, 0, 0));
  135.             }
  136.             if(maze_chunk[j][i]==1){
  137.                 spawner.__KeyValueFromString("EntityTemplate", "chunk1");
  138.                 spawner.SpawnEntityAtLocation(spawner_origin, Vector(0, 0, 0));
  139.             }
  140.             if(maze_chunk[j][i]==2){
  141.                 spawner.__KeyValueFromString("EntityTemplate", "chunk1");
  142.                 spawner.SpawnEntityAtLocation(spawner_origin, Vector(0, 0, 0));
  143.             }
  144.             if(maze_chunk[j][i]==3){
  145.                 spawner.__KeyValueFromString("EntityTemplate", "chunk0");
  146.                 spawner.SpawnEntityAtLocation(spawner_origin, Vector(0, 0, 0));
  147.             }
  148.             spawner_origin.x-=128;
  149.         }
  150.         spawner_origin.x+=1920;
  151.         spawner_origin.y-=128;
  152.     }
  153.     spawner_origin.y+=1920;
  154. }
复制代码
地图上要先做好命名为chunk0和chunk1的两种template,分别是空气和障碍物就行,还要放一个info_target命名为chunk_maker,用于指引迷宫生成的左上角基准点。然后放个按钮每次拍下就执行generate_maze()就行了。

有什么问题留言细说。不要水贴,移步别处,我担心看不见需要帮助的回复。


评分

参与人数 3僵尸币 +190 收起 理由
Kashimura + 50 好贴!
Sakura丶C + 90 就我学了和没学一样
南巷的猫 + 50 cheered!!!

查看全部评分

横眉冷对千夫指,问心无愧行世间。
你知道我是谁,够胆就来找我吧。

回复

使用道具 举报

签到天数: 944 天

[LV.10]以坛为家III

5

主题

2706

回帖

1万

积分

UID
62039
僵尸币
93033
贡献度
0
注册时间
2019-9-12
在线时间
1208 小时
最后登录
2024-4-26

捐助贡献奖章蒂法泉此方泉此方2夏娜

发表于 2022-6-28 11:38:42 | 显示全部楼层
游戏昵称:Lucky✰ | 拥有金币:189053 | SteamID: STEAM_0:0:178481050 | 玩家信息
回复

使用道具 举报

签到天数: 339 天

[LV.8]以坛为家I

6

主题

1747

回帖

1万

积分

【乐】

UID
77821
僵尸币
137620
贡献度
0
注册时间
2021-7-26
在线时间
170 小时
最后登录
2023-7-28

雷米莉亚幽幽子

发表于 2022-6-28 11:40:19 | 显示全部楼层
游戏昵称:★LTX | 拥有金币:17282 | SteamID: STEAM_0:0:507859594 | 玩家信息
回复

使用道具 举报

签到天数: 534 天

[LV.9]以坛为家II

17

主题

2171

回帖

1万

积分

可能是狒狒痴

UID
76541
僵尸币
231104
贡献度
0
注册时间
2021-5-27
在线时间
1661 小时
最后登录
2024-4-1

捐助贡献奖章

发表于 2022-6-28 11:44:18 | 显示全部楼层
游戏昵称:hapemxg | 拥有金币:7234 | SteamID: STEAM_0:0:459787476 | 玩家信息
你好牛
玩ZE不玩FF,就好像逛贴吧不逛抗压吧,就像看虚拟主播不看嘉然,追星不追肖战、网红不粉丁真、B站不看lex,追漫不看钢炼、饮料不喝维他、出门不坐滴滴、端游不玩原神、手游不玩王者、炉石不玩奥秘法、LOL不玩亚索、DNF不切斩钢,说明这个人品味不高和自我修养不足,他理解不了这种内在阳春白雪的高端神图,他只能看到光鲜亮丽的冰龙塔狮子王,参不透mako和cosmo其中深奥的精神内核,他整个人的层次就卡在这里了,只能度过一个相对失败的人生
回复

使用道具 举报

签到天数: 385 天

[LV.9]以坛为家II

25

主题

1253

回帖

9423

积分

UID
64592
僵尸币
3659
贡献度
0
注册时间
2020-1-19
在线时间
1691 小时
最后登录
2024-2-29

捐助贡献奖章

发表于 2022-6-28 11:55:28 | 显示全部楼层
游戏昵称:植原妙子 | 拥有金币:10207 | SteamID: STEAM_0:0:99820048 | 玩家信息
捡币2.0来了
  
回复

使用道具 举报

签到天数: 1233 天

[LV.10]以坛为家III

22

主题

4317

回帖

3万

积分

UID
51236
僵尸币
615011
贡献度
0
注册时间
2017-3-5
在线时间
3979 小时
最后登录
2024-3-13

捐助贡献奖章

发表于 2022-6-28 11:56:46 | 显示全部楼层
游戏昵称:国服第一刻晴 | 拥有金币:26684 | SteamID: STEAM_0:0:201725970 | 玩家信息
好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持
回复

使用道具 举报

签到天数: 380 天

[LV.9]以坛为家II

0

主题

731

回帖

4481

积分

UID
41978
僵尸币
97864
贡献度
0
注册时间
2015-3-7
在线时间
95 小时
最后登录
2024-3-4
发表于 2022-6-28 11:57:15 | 显示全部楼层
游戏昵称:M-Reimu | 拥有金币:3783 | SteamID: STEAM_0:0:203324538 | 玩家信息
回复

使用道具 举报

签到天数: 153 天

[LV.7]常住居民III

12

主题

393

回帖

2743

积分

UID
57018
僵尸币
8820
贡献度
0
注册时间
2019-2-4
在线时间
253 小时
最后登录
2024-2-15

捐助贡献奖章艾尔薇·拉娜·希尔菲丝

发表于 2022-6-28 12:04:41 | 显示全部楼层
游戏昵称:zxin | 拥有金币:71 | SteamID: STEAM_0:0:200555646 | 玩家信息
回复

使用道具 举报

签到天数: 1832 天

[LV.Master]伴坛终老

18

主题

1万

回帖

8万

积分

UID
57279
僵尸币
420009
贡献度
0
注册时间
2019-2-28
在线时间
4344 小时
最后登录
2024-4-26

捐助贡献奖章C.CC.C 2C.C 3初音初音2水银灯2幽幽子水银灯鲁鲁修雷米莉亚拉克丝·克莱茵小叽壹原侑子长门有希红月卡莲泉此方凌波丽久远寺森罗凉宫春日凉宫春日2泉此方2夏娜伊芙

发表于 2022-6-28 12:07:16 | 显示全部楼层
游戏昵称:Caliburian | 拥有金币:3924 | SteamID: STEAM_0:1:190974512 | 玩家信息
回复

使用道具 举报

签到天数: 45 天

[LV.5]常住居民I

4

主题

136

回帖

935

积分

混乱中立

UID
68343
僵尸币
26123
贡献度
0
注册时间
2020-4-23
在线时间
75 小时
最后登录
2024-4-24
QQ
 楼主| 发表于 2022-6-28 12:22:42 | 显示全部楼层
游戏昵称:7ychu5 | 拥有金币:2201 | SteamID: STEAM_0:0:92422507 | 玩家信息

不太行,捡币是在原有的地图上继续接口生成新的地形,说实话我也没搞懂怎么做到的,原理应该和luff即将推出的ze_collective类似,我这个应该是backroom那些图差不多,都是矩阵生成法,然后找解,有解再推出,玩家再去解答。等半年后空下来了看看捡币是什么原理,也许能优化代码。

点评

tql  发表于 2022-6-28 12:28
横眉冷对千夫指,问心无愧行世间。
你知道我是谁,够胆就来找我吧。

回复

使用道具 举报

签到天数: 56 天

[LV.5]常住居民I

3

主题

125

回帖

870

积分

UID
79574
僵尸币
16716
贡献度
0
注册时间
2021-10-29
在线时间
87 小时
最后登录
2024-4-24

捐助贡献奖章

发表于 2022-6-28 12:25:10 | 显示全部楼层
游戏昵称:meaquaforever | 拥有金币:4720 | SteamID: STEAM_0:1:168532280 | 玩家信息
本帖最后由 lulvyun 于 2022-6-28 12:27 编辑

我xen星呢
回复

使用道具 举报

签到天数: 653 天

[LV.9]以坛为家II

6

主题

1322

回帖

9195

积分

萌新

UID
66412
僵尸币
365735
贡献度
0
注册时间
2020-3-2
在线时间
1185 小时
最后登录
2024-4-21

捐助贡献奖章

发表于 2022-6-28 12:38:19 | 显示全部楼层
游戏昵称:(=゚Д゚=) | 拥有金币:12714 | SteamID: STEAM_0:0:221422296 | 玩家信息
tql
回复

使用道具 举报

签到天数: 154 天

[LV.7]常住居民III

3

主题

337

回帖

2287

积分

UID
81452
僵尸币
81130
贡献度
0
注册时间
2022-3-18
在线时间
232 小时
最后登录
2024-4-5

捐助贡献奖章

QQ
发表于 2022-6-28 13:01:36 | 显示全部楼层
游戏昵称:Togo Mimori | 拥有金币:10423 | SteamID: STEAM_0:0:554237428 | 玩家信息
回复

使用道具 举报

签到天数: 681 天

[LV.9]以坛为家II

13

主题

2619

回帖

1万

积分

UID
65994
僵尸币
86187
贡献度
0
注册时间
2020-2-22
在线时间
1074 小时
最后登录
2024-1-3

捐助贡献奖章水银灯幽幽子雷米莉亚 布兰奈玖·加尔提尼亚斯夏娜艾尔薇·拉娜·希尔菲丝C.C萨菲罗斯

发表于 2022-6-28 13:29:56 | 显示全部楼层
游戏昵称:Hishi Miracle | 拥有金币:17560 | SteamID: STEAM_0:1:177352679 | 玩家信息
呐呐呐呐呐呐呐
回复

使用道具 举报

签到天数: 170 天

[LV.7]常住居民III

41

主题

1031

回帖

8396

积分

UID
75304
僵尸币
91571
贡献度
0
注册时间
2021-3-23
在线时间
1796 小时
最后登录
2024-4-21

捐助贡献奖章

QQ
发表于 2022-6-28 14:15:49 | 显示全部楼层
游戏昵称:阳光开朗大男孩 | 拥有金币:10739 | SteamID: STEAM_0:0:490459800 | 玩家信息
这让我想起那张t2解密图的随机迷宫,太折磨了
累了
回复

使用道具 举报

签到天数: 410 天

[LV.9]以坛为家II

8

主题

1346

回帖

9365

积分

UID
62184
僵尸币
272056
贡献度
0
注册时间
2019-9-17
在线时间
1232 小时
最后登录
2024-4-26
发表于 2022-6-28 14:27:44 | 显示全部楼层
游戏昵称:❀Suwako | 拥有金币:25 | SteamID: STEAM_0:1:82618193 | 玩家信息
字太多 看不懂
回复

使用道具 举报

签到天数: 66 天

[LV.6]常住居民II

2

主题

126

回帖

843

积分

UID
64166
僵尸币
26892
贡献度
0
注册时间
2020-1-4
在线时间
65 小时
最后登录
2024-4-24
发表于 2022-6-28 14:34:02 | 显示全部楼层
游戏昵称:不再战斗 | 拥有金币:78 | SteamID: STEAM_0:1:234126354 | 玩家信息
回复

使用道具 举报

签到天数: 833 天

[LV.10]以坛为家III

111

主题

3966

回帖

2万

积分

九尾妖狐

UID
59162
僵尸币
230600
贡献度
0
注册时间
2019-6-25
在线时间
1241 小时
最后登录
2024-4-25

捐助贡献奖章

发表于 2022-6-28 15:22:37 | 显示全部楼层
游戏昵称:雪狐狸 | 拥有金币:32 | SteamID: STEAM_0:0:505224295 | 玩家信息
啊对对对
回复

使用道具 举报

签到天数: 481 天

[LV.9]以坛为家II

70

主题

2659

回帖

1万

积分

杂~鱼~

UID
81763
僵尸币
64641
贡献度
50
注册时间
2022-3-30
在线时间
1948 小时
最后登录
2023-10-14

C.C 2C.C捐助贡献奖章C.C 3

发表于 2022-6-28 15:30:13 | 显示全部楼层
游戏昵称:吾栖 | 拥有金币:28288 | SteamID: STEAM_0:0:183672647 | 玩家信息
太牛辣。
回复

使用道具 举报

签到天数: 19 天

[LV.4]偶尔看看III

46

主题

768

回帖

7842

积分

UID
40968
僵尸币
5042
贡献度
50
注册时间
2015-1-13
在线时间
2598 小时
最后登录
2024-3-27

捐助贡献奖章特殊贡献獎章

发表于 2022-6-28 16:15:21 | 显示全部楼层
游戏昵称:返聘⑥干员相羽十一 | 拥有金币:58 | SteamID: STEAM_0:0:102638720 | 玩家信息
看到这个视频外链来源就知道不简单
有自己博客的都是带佬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

回到顶部
快速回复 返回顶部 返回列表