找回密码
 注册

STEAM登陆

绑定游戏账号后可使用

QQ登录

只需一步,快速开始

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

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

  [复制链接]

签到天数: 49 天

[LV.5]常住居民I

5

主题

146

回帖

1013

积分

混乱中立

UID
68343
僵尸币
28576
贡献度
0
注册时间
2020-4-23
在线时间
82 小时
最后登录
2026-8-3
QQ
发表于 2022-6-28 11:24:44 | 显示全部楼层 |阅读模式
游戏昵称:7ychu5|CS2金币:51618|CS:GO金币:267|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!!!

查看全部评分

回复

使用道具 举报

签到天数: 1307 天

[LV.10]以坛为家III

6

主题

3206

回帖

2万

积分

UID
62039
僵尸币
887123
贡献度
0
注册时间
2019-9-12
在线时间
1438 小时
最后登录
2026-8-7

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

发表于 2022-6-28 11:38:42 | 显示全部楼层
游戏昵称:Lucky✰|CS2金币:2250681|CS:GO金币:11|SteamID: STEAM_0:0:178481050|🔍 查看游戏数据
回复

使用道具 举报

签到天数: 366 天

[LV.9]以坛为家II

6

主题

1839

回帖

1万

积分

【乐】

UID
77821
僵尸币
605685
贡献度
0
注册时间
2021-7-26
在线时间
1087 小时
最后登录
2026-8-7

雷米莉亚幽幽子夏娜捐助贡献奖章

发表于 2022-6-28 11:40:19 | 显示全部楼层
游戏昵称:★LTX|CS2金币:122139|CS:GO金币:12543|SteamID: STEAM_0:0:507859594|🔍 查看游戏数据
回复

使用道具 举报

签到天数: 549 天

[LV.9]以坛为家II

17

主题

2216

回帖

1万

积分

可能是狒狒痴

UID
76541
僵尸币
281989
贡献度
0
注册时间
2021-5-27
在线时间
1687 小时
最后登录
2026-7-10

捐助贡献奖章萨菲罗斯

发表于 2022-6-28 11:44:18 | 显示全部楼层
游戏昵称:hapemxg|CS2金币:93189|CS:GO金币:474|SteamID: STEAM_0:0:459787476|🔍 查看游戏数据
你好牛
回复

使用道具 举报

签到天数: 385 天

[LV.9]以坛为家II

25

主题

1254

回帖

9430

积分

UID
64592
僵尸币
4017
贡献度
0
注册时间
2020-1-19
在线时间
1692 小时
最后登录
2026-1-22

捐助贡献奖章

发表于 2022-6-28 11:55:28 | 显示全部楼层
游戏昵称:植原妙子|CS2金币:39183|CS:GO金币:0|SteamID: STEAM_0:0:99820048|🔍 查看游戏数据
捡币2.0来了
回复

使用道具 举报

签到天数: 1251 天

[LV.10]以坛为家III

22

主题

4344

回帖

3万

积分

UID
51236
僵尸币
1175445
贡献度
0
注册时间
2017-3-5
在线时间
4027 小时
最后登录
2026-2-27

捐助贡献奖章

发表于 2022-6-28 11:56:46 | 显示全部楼层
游戏昵称:国服第一芙宁娜|CS2金币:593336|CS:GO金币:2712|SteamID: STEAM_0:0:201725970|🔍 查看游戏数据
好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持好贴支持
回复

使用道具 举报

签到天数: 383 天

[LV.9]以坛为家II

0

主题

733

回帖

4500

积分

UID
41978
僵尸币
99051
贡献度
0
注册时间
2015-3-7
在线时间
96 小时
最后登录
2024-9-27
发表于 2022-6-28 11:57:15 | 显示全部楼层
游戏昵称:M-Reimu|CS2金币:25797|CS:GO金币:282|SteamID: STEAM_0:0:203324538|🔍 查看游戏数据
回复

使用道具 举报

签到天数: 167 天

[LV.7]常住居民III

13

主题

416

回帖

2901

积分

UID
57018
僵尸币
117409
贡献度
0
注册时间
2019-2-4
在线时间
259 小时
最后登录
2026-3-10

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

发表于 2022-6-28 12:04:41 | 显示全部楼层
游戏昵称:zxin|CS2金币:115798|CS:GO金币:2621|SteamID: STEAM_0:0:200555646|🔍 查看游戏数据
回复

使用道具 举报

签到天数: 2581 天

[LV.Master]伴坛终老

21

主题

1万

回帖

9万

积分

UID
57279
僵尸币
1786467
贡献度
0
注册时间
2019-2-28
在线时间
5698 小时
最后登录
2026-8-6

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

发表于 2022-6-28 12:07:16 | 显示全部楼层
游戏昵称:Caliburian|CS2金币:175275|CS:GO金币:89|SteamID: STEAM_0:1:190974512|🔍 查看游戏数据
回复

使用道具 举报

签到天数: 49 天

[LV.5]常住居民I

5

主题

146

回帖

1013

积分

混乱中立

UID
68343
僵尸币
28576
贡献度
0
注册时间
2020-4-23
在线时间
82 小时
最后登录
2026-8-3
QQ
 楼主| 发表于 2022-6-28 12:22:42 | 显示全部楼层
游戏昵称:7ychu5|CS2金币:51618|CS:GO金币:267|SteamID: STEAM_0:0:92422507|🔍 查看游戏数据

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

点评

tql  发表于 2022-6-28 12:28
回复

使用道具 举报

签到天数: 57 天

[LV.5]常住居民I

3

主题

126

回帖

879

积分

UID
79574
僵尸币
17948
贡献度
0
注册时间
2021-10-29
在线时间
90 小时
最后登录
2026-7-21

捐助贡献奖章

发表于 2022-6-28 12:25:10 | 显示全部楼层
游戏昵称:meaquaforever|CS2金币:35464|CS:GO金币:620|SteamID: STEAM_0:1:168532280|🔍 查看游戏数据
本帖最后由 lulvyun 于 2022-6-28 12:27 编辑

我xen星呢
回复

使用道具 举报

签到天数: 656 天

[LV.9]以坛为家II

7

主题

1322

回帖

9221

积分

萌新

UID
66412
僵尸币
367954
贡献度
0
注册时间
2020-3-2
在线时间
1191 小时
最后登录
2025-12-25

捐助贡献奖章

发表于 2022-6-28 12:38:19 | 显示全部楼层
游戏昵称:(=゚Д゚=)|CS2金币:7695|CS:GO金币:2714|SteamID: STEAM_0:0:221422296|🔍 查看游戏数据
tql
回复

使用道具 举报

签到天数: 156 天

[LV.7]常住居民III

3

主题

341

回帖

2364

积分

UID
81452
僵尸币
136368
贡献度
0
注册时间
2022-3-18
在线时间
285 小时
最后登录
2026-6-26

捐助贡献奖章

QQ
发表于 2022-6-28 13:01:36 | 显示全部楼层
游戏昵称:Togo Mimori|CS2金币:79113|CS:GO金币:2230|SteamID: STEAM_0:0:554237428|🔍 查看游戏数据
回复

使用道具 举报

签到天数: 700 天

[LV.9]以坛为家II

15

主题

2777

回帖

1万

积分

UID
65994
僵尸币
81513
贡献度
0
注册时间
2020-2-22
在线时间
1269 小时
最后登录
2026-8-7

捐助贡献奖章水银灯幽幽子雷米莉亚 布兰奈玖·加尔提尼亚斯夏娜艾尔薇·拉娜·希尔菲丝C.C萨菲罗斯蒂法扎克斯凉宫春日2吴羽冬华拉克丝·克莱茵

发表于 2022-6-28 13:29:56 | 显示全部楼层
游戏昵称:North Flight|CS2金币:22065|CS:GO金币:2|SteamID: STEAM_0:1:177352679|🔍 查看游戏数据
回复

使用道具 举报

签到天数: 171 天

[LV.7]常住居民III

41

主题

1036

回帖

8466

积分

UID
75304
僵尸币
205147
贡献度
0
注册时间
2021-3-23
在线时间
1827 小时
最后登录
2026-7-31

捐助贡献奖章

QQ
发表于 2022-6-28 14:15:49 | 显示全部楼层
游戏昵称:阳光开朗大男孩|CS2金币:3657|CS:GO金币:591|SteamID: STEAM_0:0:490459800|🔍 查看游戏数据
这让我想起那张t2解密图的随机迷宫,太折磨了
回复

使用道具 举报

签到天数: 418 天

[LV.9]以坛为家II

9

主题

1392

回帖

1万

积分

UID
62184
僵尸币
625321
贡献度
0
注册时间
2019-9-17
在线时间
1890 小时
最后登录
2026-8-6
发表于 2022-6-28 14:27:44 | 显示全部楼层
游戏昵称:❀Suwako|CS2金币:4247|CS:GO金币:165|SteamID: STEAM_0:1:82618193|🔍 查看游戏数据
字太多 看不懂
回复

使用道具 举报

签到天数: 66 天

[LV.6]常住居民II

2

主题

127

回帖

850

积分

UID
64166
僵尸币
21753
贡献度
0
注册时间
2020-1-4
在线时间
66 小时
最后登录
2025-9-30
发表于 2022-6-28 14:34:02 | 显示全部楼层
游戏昵称:不再战斗|CS2金币:13217|CS:GO金币:379|SteamID: STEAM_0:1:234126354|🔍 查看游戏数据
回复

使用道具 举报

签到天数: 852 天

[LV.10]以坛为家III

114

主题

3986

回帖

2万

积分

九尾妖狐

UID
59162
僵尸币
3329
贡献度
0
注册时间
2019-6-25
在线时间
1260 小时
最后登录
2025-1-20

捐助贡献奖章

发表于 2022-6-28 15:22:37 | 显示全部楼层
游戏昵称:雪狐狸|CS2金币:186472|CS:GO金币:0|SteamID: STEAM_0:0:505224295|🔍 查看游戏数据
啊对对对
回复

使用道具 举报

签到天数: 485 天

[LV.9]以坛为家II

70

主题

2662

回帖

1万

积分

杂~鱼~

UID
81763
僵尸币
65833
贡献度
50
注册时间
2022-3-30
在线时间
1951 小时
最后登录
2024-9-8

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

发表于 2022-6-28 15:30:13 | 显示全部楼层
游戏昵称:吾栖|CS2金币:150|CS:GO金币:28288|SteamID: STEAM_0:0:183672647|🔍 查看游戏数据
太牛辣。
回复

使用道具 举报

签到天数: 19 天

[LV.4]偶尔看看III

46

主题

770

回帖

7868

积分

UID
40968
僵尸币
9580
贡献度
50
注册时间
2015-1-13
在线时间
2606 小时
最后登录
2026-4-20

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

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

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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