Project1

标题: MV除了自带的地牢生成器外是否有自动生成地图的方案 [打印本页]

作者: 唐门草楹    时间: 2020-1-19 11:37
标题: MV除了自带的地牢生成器外是否有自动生成地图的方案
MV除了自带的地牢生成器外是否有其他自动生成洞穴、自动生成城镇地图之类的方案?过程式建模的那种。因为MV自带的地牢生成器生成的迷宫很怪异,方方正正的过于像人工打造的房间与走廊,真正的洞穴应该更加蜿蜒曲折、更加自然、更加有机一些。想知道是否有基于MV自动生成地图或城镇地图的工具或在线网站。
作者: 347780682    时间: 2020-1-19 14:38
梦里会有
作者: candlesor    时间: 2020-1-19 14:41
其实我更想要一键生成游戏的功能
作者: 白嫩白嫩的    时间: 2020-1-19 15:40
本帖最后由 白嫩白嫩的 于 2020-1-19 15:43 编辑

08年就注册的老人了,竟然还带着近些年刚注册的新人的妄想

未来会有的,字都不用打,机器会识别脑波的想法,通过扫描到的碎片化的诉求瞬间生成剧本,剧本通过后自动匹配角色性格然后生成角色设定、cg、live2d和3d建模供您选择。

→ok,选择2d回合制游戏,根据剧本自动匹配各个角色技能。

→难易度选择好。

去睡一觉,游戏打包好了,而且还是难以破解的套娃打包法。



最后还是抛砖引玉一下吧,链接里的插件早就下好了还没用过,不知道是生成好之后自己调整还是真的是随机地图。

RandomMapGenerator-随机地图生成

一些特別插件






作者: 唐门草楹    时间: 2020-1-19 16:43
我只是打听一下related work,如果没有的话,我就可以自己写一个了。
作者: 唐门草楹    时间: 2020-1-19 20:49
初步写了一个自动生成地牢迷宫的程序。C++编译运行,用输出结果替代地图json文件里的data数据即可。地图需采用MV默认的地图块集Dungeon。
生成的地图如下所示:
https://rpg.blue/forum.php?mod=attachment&aid=MzYzOTY5fGM5MDczNWIwYTU0OWVhYWY4NjJiNDExNGUxMTQzYTgxfDE3MzI4MTgzOTY%3D&request=yes&_f=.png
https://rpg.blue/forum.php?mod=attachment&aid=MzYzOTcwfDg2ZTNmMWJhYzgyMGRmMTk2NDRiYjExMDkwYjhlZjkwfDE3MzI4MTgzOTY%3D&request=yes&_f=.png
源码如下所示
  1. //
  2. //  main.cpp
  3. //  随机生成地牢的C++程序。
  4. //  使用方法:
  5. //  游戏中新建一个游戏地图,地图图块选择MV自带的Dungeon
  6. //  程序中的Width与Height必须与所建地图的宽度与高度一致
  7. //  srand函数传入的随机数种子将产生伪随机数,相同的种子产生的随机数相同,
  8. //  要生成不同的地图请传入不同的种子。
  9. //  用记事本打开游戏目录下data文件夹里相应的地图文件,文件名为地图名,扩展名为json。
  10. //  复制程序的运行输出的结果覆盖住地图文件里的data数据,重新加载项目,就能看到该地图里随机生成的地牢地图。
  11. //
  12. //  Created by huanggaole on 2019/12/6.
  13. //  Copyright © 2019 huanggaole. All rights reserved.
  14. //

  15. #include <stdlib.h>
  16. #include <iostream>
  17. // 以下两行修改地图的宽与高
  18. #define Width 50
  19. #define Height 50
  20. // 以下四行修改地图的通道、障碍、墙壁底部与墙壁顶部的图块索引值
  21. #define Road 1553
  22. #define Barr 5964
  23. #define Wall1 6330
  24. #define Wall2 6322
  25. using namespace std;
  26. int main(int argc, const char * argv[]) {
  27.     int ** mapdata = new int* [Height]();
  28.     int ** lastdata = new int* [Height]();
  29.     // srand生成随机种子,同样的种子得到的地图是一样的。
  30.     srand(2);
  31.     for(int i=0;i<Height;i++){
  32.         mapdata[i] = new int[Width]();
  33.         lastdata[i] = new int[Width]();
  34.         
  35.         for(int j=0;j<Width;j++){
  36.             if(i <= 1 || j == 0 || i == Height-1 || j == Width - 1){
  37.                 lastdata[i][j] = mapdata[i][j] = Barr;
  38.             }else{
  39.                 lastdata[i][j] = mapdata[i][j] = rand()%2 == 0?Barr:Road;
  40.             }
  41.         }
  42.     }
  43.     int itertime = 10000;
  44.     while(itertime>0){
  45.         itertime--;
  46.         
  47.         for(int i=1;i<Height -1;i++){
  48.             for(int j=1;j<Width-1;j++){
  49.                 int roadCount = 0;
  50.                 for(int k = i - 1; k<= i + 1; k++){
  51.                     for(int l = j - 1; l <= j + 1;l++){
  52.                         if(k != i || l != j){
  53.                             if(lastdata[k][l] == Road){
  54.                                 roadCount++;
  55.                             }
  56.                         }
  57.                     }
  58.                 }
  59.                
  60.                 if(roadCount >4){
  61.                     mapdata[i][j] = Road;
  62.                 }else if(roadCount < 4){
  63.                     mapdata[i][j] = Barr;
  64.                 }
  65.                
  66.             }
  67.         }
  68.         
  69.         for(int i=0;i<Height;i++){
  70.             for(int j=0;j<Width;j++){
  71.                 lastdata[i][j] = mapdata[i][j];
  72.             }
  73.         }
  74.     }
  75.    
  76.     for(int i = Height - 2; i>2;i--){
  77.         for(int j = Width - 2;j>2;j--){
  78.             if(mapdata[i][j] == Road && mapdata[i - 2][j] == Road){
  79.                 mapdata[i-1][j] = Road;
  80.             }
  81.         }
  82.     }
  83.    
  84.     for(int i=Height - 2; i>=2;i--){
  85.         for(int j= Width - 1;j>0;j--){
  86.             if(mapdata[i][j] == Road && mapdata[i - 1][j] == Barr && mapdata[i - 2][j] == Barr){
  87.                 mapdata[i-1][j] = Wall1;
  88.                 if(i-3 >= 0 && mapdata[i-3][j] == Barr){
  89.                     mapdata[i-2][j] = Wall2;
  90.                 }else{
  91.                     mapdata[i-2][j] = Barr;
  92.                 }
  93.             }
  94.         }
  95.     }
  96.    
  97.     for(int k = 0; k<6; k++){
  98.         for(int i=0;i<Height;i++){
  99.             for(int j=0;j<Width;j++){
  100.                 if(k == 0){
  101.                     cout << mapdata[i][j]<<",";
  102.                 }else if(k == 4){
  103.                     if(j > 0 && mapdata[i][j] == Road && mapdata[i][j - 1] != Road){
  104.                         cout << "5,";
  105.                     }else{
  106.                         cout << "0,";
  107.                     }
  108.                 }else{
  109.                     cout << "0,";
  110.                 }
  111.             }
  112.         }
  113.     }
  114.     return 0;
  115. }

复制代码

randmap1.png (496.48 KB, 下载次数: 63)

randmap1.png

randmap2.png (194.16 KB, 下载次数: 49)

randmap2.png

作者: yang1zhi    时间: 2020-1-19 21:08
自动生成迷宫的插件有。
但是这种东西,都是按规律该的。
就好比你写的那个。
是达不到你1楼写的要求的。
一般都是生成迷宫,城镇似乎没有。
作者: 死伤殆尽    时间: 2020-1-19 22:06
讲道理,一个正常的洞穴也不可能是全部一块大平地的……只有可行走区域的边缘曲线化,并不能让自动生成的迷宫变得更真实
反而是方方正正由房间和过道组成的人工呆萌式随机地下城更有古早roguelike游戏的醍醐味(这句是开玩笑)
作者: 白嫩白嫩的    时间: 2020-1-20 09:49
唐门草楹 发表于 2020-1-19 20:49
初步写了一个自动生成地牢迷宫的程序。C++编译运行,用输出结果替代地图json文件里的data数据即可。地图需 ...

哥我错了,哥您抽烟
作者: 寂静的夜里    时间: 2020-1-20 11:31
城镇有的 好像是自己按照规格画出模板地图 然后新建的地图由插件拼接模板地图生成 但是问题和你写的差不多 那就是容易出现死路。
作者: EVA-H    时间: 2020-1-21 16:33
自动生成地牢诶,牛P啊,加油,不过这样自动生成如果对岔路、回路、空间大小之类有需求的话,参数上是怎么体现的啊?
作者: fux2    时间: 2020-1-21 20:05
RM默认的肯定是最配套的,有更深层次的需求只能自己实现
作者: 雪泉    时间: 2020-2-24 17:40
太强了...............................
作者: 雪泉    时间: 2020-2-24 17:41
太强了...............................
作者: 野生的咕哒子    时间: 2020-3-25 16:30
唐门草楹 发表于 2020-1-19 20:49
初步写了一个自动生成地牢迷宫的程序。C++编译运行,用输出结果替代地图json文件里的data数据即可。地图需 ...

大佬,好想请教一下怎么使用该插件呀,不知道该怎么运行这个程序
作者: 缞訫    时间: 2020-3-25 17:24
白嫩白嫩的 发表于 2020-1-20 09:49
哥我错了,哥您抽烟

HHHHH2333333333333
作者: MCCF    时间: 2020-3-25 17:40
C系大佬!用DevCpp的蒟蒻瑟瑟发抖……
作者: 2542367783    时间: 2020-3-27 11:05
我做那种曲线地宫都是先在空白区域一顿蛇舞乱画,然后补上墙壁,铺上地板,最后做点装饰之类,最后的成果也有那么点味道。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1