设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 8255|回复: 21

[有事请教] MV除了自带的地牢生成器外是否有自动生成地图的方案

[复制链接]

Lv3.寻梦者

梦石
2
星屑
1156
在线时间
340 小时
注册时间
2008-2-2
帖子
275

R考场第七期银奖

发表于 2020-1-19 11:37:20 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

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

x
MV除了自带的地牢生成器外是否有其他自动生成洞穴、自动生成城镇地图之类的方案?过程式建模的那种。因为MV自带的地牢生成器生成的迷宫很怪异,方方正正的过于像人工打造的房间与走廊,真正的洞穴应该更加蜿蜒曲折、更加自然、更加有机一些。想知道是否有基于MV自动生成地图或城镇地图的工具或在线网站。
我亲自录制的橙光教学视频
如何用橙光做一款养成游戏:https://www.bilibili.com/video/BV1Js41197pr
蛇梯游戏/大富翁的制作:https://www.bilibili.com/video/BV1yW411a7sv
股票系统:https://www.bilibili.com/video/BV1DW41187BW
龙雏子女系统 的实现方法:https://www.bilibili.com/video/BV1gE411J7Ns
换装捏脸系统:https://www.bilibili.com/video/BV1Yc411h7ds
背包-合成系统:https://www.bilibili.com/video/BV1qg4y187C2

Lv4.逐梦者

梦石
0
星屑
5462
在线时间
1556 小时
注册时间
2011-6-14
帖子
520
发表于 2020-1-19 14:38:46 | 显示全部楼层
梦里会有

点评

666666  发表于 2020-1-19 21:48

评分

参与人数 2+2 收起 理由
白嫩白嫩的 + 1 我很赞同
candlesor + 1 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
16
星屑
9389
在线时间
1356 小时
注册时间
2010-12-21
帖子
302

极短23获奖极短22参与

发表于 2020-1-19 14:41:51 | 显示全部楼层
其实我更想要一键生成游戏的功能

评分

参与人数 3+3 收起 理由
whitedewxiao + 1 我很赞同
zcl31608354 + 1 我很赞同
白嫩白嫩的 + 1 我很赞同

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3411
在线时间
1154 小时
注册时间
2016-8-9
帖子
2383

开拓者

发表于 2020-1-19 15:40:15 | 显示全部楼层
本帖最后由 白嫩白嫩的 于 2020-1-19 15:43 编辑

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

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

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

→难易度选择好。

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



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

RandomMapGenerator-随机地图生成

一些特別插件





酸酸甜甜就④哇噢
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
2
星屑
1156
在线时间
340 小时
注册时间
2008-2-2
帖子
275

R考场第七期银奖

 楼主| 发表于 2020-1-19 16:43:56 | 显示全部楼层
我只是打听一下related work,如果没有的话,我就可以自己写一个了。
我亲自录制的橙光教学视频
如何用橙光做一款养成游戏:https://www.bilibili.com/video/BV1Js41197pr
蛇梯游戏/大富翁的制作:https://www.bilibili.com/video/BV1yW411a7sv
股票系统:https://www.bilibili.com/video/BV1DW41187BW
龙雏子女系统 的实现方法:https://www.bilibili.com/video/BV1gE411J7Ns
换装捏脸系统:https://www.bilibili.com/video/BV1Yc411h7ds
背包-合成系统:https://www.bilibili.com/video/BV1qg4y187C2
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
2
星屑
1156
在线时间
340 小时
注册时间
2008-2-2
帖子
275

R考场第七期银奖

 楼主| 发表于 2020-1-19 20:49:35 | 显示全部楼层
初步写了一个自动生成地牢迷宫的程序。C++编译运行,用输出结果替代地图json文件里的data数据即可。地图需采用MV默认的地图块集Dungeon。
生成的地图如下所示:
https://rpg.blue/forum.php?mod=attachment&aid=MzYzOTY5fDliNTQ5MzRkNDQyZjE1Mjc2Nzk4YTFlMDNmYzJhNDAwfDE3MTE3MjYwNzI%3D&request=yes&_f=.png
https://rpg.blue/forum.php?mod=attachment&aid=MzYzOTcwfDJkMTM0MjY5YmJiYTc1ZWM2MzhkMGM0Y2FmOGRkMDQyfDE3MTE3MjYwNzI%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
randmap2.png

评分

参与人数 2+2 收起 理由
whitedewxiao + 1 塞糖
野生的咕哒子 + 1 塞糖

查看全部评分

我亲自录制的橙光教学视频
如何用橙光做一款养成游戏:https://www.bilibili.com/video/BV1Js41197pr
蛇梯游戏/大富翁的制作:https://www.bilibili.com/video/BV1yW411a7sv
股票系统:https://www.bilibili.com/video/BV1DW41187BW
龙雏子女系统 的实现方法:https://www.bilibili.com/video/BV1gE411J7Ns
换装捏脸系统:https://www.bilibili.com/video/BV1Yc411h7ds
背包-合成系统:https://www.bilibili.com/video/BV1qg4y187C2
回复 支持 1 反对 0

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

发表于 2020-1-19 21:08:10 | 显示全部楼层
自动生成迷宫的插件有。
但是这种东西,都是按规律该的。
就好比你写的那个。
是达不到你1楼写的要求的。
一般都是生成迷宫,城镇似乎没有。
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
11832
在线时间
2751 小时
注册时间
2008-11-23
帖子
2577

开拓者贵宾

发表于 2020-1-19 22:06:00 | 显示全部楼层
讲道理,一个正常的洞穴也不可能是全部一块大平地的……只有可行走区域的边缘曲线化,并不能让自动生成的迷宫变得更真实
反而是方方正正由房间和过道组成的人工呆萌式随机地下城更有古早roguelike游戏的醍醐味(这句是开玩笑)
I'm the bone of my Second Grade.
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3411
在线时间
1154 小时
注册时间
2016-8-9
帖子
2383

开拓者

发表于 2020-1-20 09:49:01 | 显示全部楼层
唐门草楹 发表于 2020-1-19 20:49
初步写了一个自动生成地牢迷宫的程序。C++编译运行,用输出结果替代地图json文件里的data数据即可。地图需 ...

哥我错了,哥您抽烟
酸酸甜甜就④哇噢
回复 支持 1 反对 0

使用道具 举报

Lv4.逐梦者 (版主)

职业の水客

梦石
0
星屑
12827
在线时间
6966 小时
注册时间
2010-6-16
帖子
3473

开拓者

发表于 2020-1-20 11:31:27 | 显示全部楼层
城镇有的 好像是自己按照规格画出模板地图 然后新建的地图由插件拼接模板地图生成 但是问题和你写的差不多 那就是容易出现死路。
一个看图的地方
群爆炸重建后状态:论坛老人最多(只剩下了活跃的老人),技术力很强(依旧不变)的编程灌水群:901540785
专门讨论RM相关的Q群:56875149
PS:第一个群不是专门讨论RM的,第二个才是哦。
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-3-29 23:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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