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

Project1

 找回密码
 注册会员
搜索
查看: 5893|回复: 49
打印 上一主题 下一主题

[通用发布] 【SRPG地图移动范围生成】 SMRC Ver5.1 | 附 XP VX控制台输出方法

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
跳转到指定楼层
1
发表于 2015-7-24 00:23:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 寒冷魔王 于 2015-8-21 13:30 编辑

经过一个多月的书写、测试,SMRC V5终于可以发布。
SMRC是处理SRPG地图移动范围生成的代码,是SRPG地图的核心代码。使用纯Ruby构建。
V5版本是V4的进化版本。经过重构,性能、功能和质量全面提升。
高性能、精简
经过V4的性能提升后,V4相对V3提升了100倍,而V5又在此基础上提升3-4倍。同时,V5遵循着最小代码的准则,其核心代码只有几十行。
功能升级、使用方便
V5的Map类传入一个一维数组,而不是以往的只能通过直接构造;
Route类传入移动力消耗地图,因此V5的具有很大的灵活性,使用者可以方便的修改以达到使用目的。
V5原生支持阻碍(移动力-1)和ZOC(只能放置不能通过),如下的测试代码中显示了这一点。
稳定、能够满足基本需要
自第一版于2014年10月构建以来,SMRC经历了许多次变革,性能和质量不断提升。无数次的测试,SMRC质量有着可靠的保证。
SMRC在V4版本就已经能够满足基本需要。500*500的地图,空地图(最坏情况),移动力100时,在RMVA下的运行结果V4需要0.25s,而V5仅需0.08s。
而同时附加的两种新形态,使得SMRC能够普遍地满足大多数人的需要。SMRC的时代即将来临。
兼容RGSS1-3
由于是Ruby书写的代码,故其具有很强的兼容性。
目前已在XP、VX、VA下测试通过。测试如图【RGSS1-3三版速度比较(移动力100)】。
由于Ruby1.8与1.9的区别,所以部分Ruby方法无法调用,但本代码本身是兼容的。
定制自由
本代码不仅仅适用于默认的4方向,还可以通过定制轻松实现6方向、8方向。
可以自由变更所想要的形状,只需变更79-82行judgeSet即可。默认形状见3L,变更形状见9L。

P.S.关于具体的原理如果大家有兴趣日后本人会写出来。
下面贴代码:

SMRC主体 (基本代码)
功能代码
测试代码
运行结果:

【2015.08.03补充】
RGSS1-3三版速度比较(移动力100)



历史版本:
V4:  https://rpg.blue/thread-378114-1-1.html
V3:  https://rpg.blue/thread-375993-1-1.html
V2:  https://rpg.blue/thread-374090-1-1.html

{:2_255:} 顺便庆祝GCC 5.1的发布





【2015.7.30补充】
关于在XP和VX的控制台问题,刚刚在VX测试的时候将它顺便解决了,如下:
RUBY 代码复制
  1. Win32API.new('kernel32', 'AllocConsole', 'v', 'v').call
  2. $stdout = open('CONOUT$', 'w')
  3. $stdin  = open('CONIN$')
  4.  
  5. def print(*args)
  6.   $stdout.print(*args)
  7.   $stdout.flush
  8.   return
  9. end
  10. def puts(*args)
  11.   $stdout.puts(*args)
  12.   $stdout.flush
  13.   return
  14. end
  15. def p(*args)
  16.   puts args.map{|x| x.inspect}
  17.   return args
  18. end
  19. def gets(*args)
  20.   $stdin.gets(*args)
  21. end
  22. def printf(*args)
  23.   $stdout.printf(*args)
  24.   $stdout.flush
  25.   return
  26. end

SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
路路 该用户已被删除
2
发表于 2015-7-24 09:57:57 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
3
 楼主| 发表于 2015-7-24 11:35:08 手机端发表。 | 只看该作者
本帖最后由 寒冷魔王 于 2015-7-24 15:33 编辑
路路 发表于 2015-7-24 09:57
没有看代码,范围的形状是什么?


十字形,以点为中心,上下左右四周扩散。

如图,上面是传入的移动力消耗地图,下面是生成的结果地图。

代码:
RUBY 代码复制
  1. map = Map.new(10,10,1)
  2.   route = Route.new(map,*[5,5])
  3.   route.search(3)
  4.   prints(map);puts
  5.   prints(route.movmap)


移动力消耗地图表示在当前点移动时消耗的移动力(增加的移动步数)。
对于空地图来说,每一个点的移动力消耗均为1。
我们可以通过设定将某一个点变为其他值,用以表示阻碍。
表示0为不能到达此处的点,正数为可以到达此处但是移动后会消耗一定移动力;ZOC由于消耗移动力过大(为最大允许移动力Route::MaxMoves+1),所以导致能到达此处不能继续通行。(关于负数的情况由于比较复杂将在后续版本研究)
我们假定起始消耗移动力为0,他的移动力为3,那么他最多消耗3点移动力。
因此会出现如图情况。

移动力消耗地图我们是可以手动更改的。
比如我们获取了某地图的地图分布情况。
data = [
  [0,0,0,0,0],
  [0,0,3,0,0],
  [0,0,0,0,0],
  [0,0,0,0,0],
  [0,0,1,0,0],
].faltten

其中3表示敌人,我们需要在3的上下左右点设置为ZOC。由于Map传递的是引用,想要更改data,这种时候只需方便的调用Map书写:
RUBY 代码复制
  1. data = [
  2.     [0,0,0,0,0],
  3.     [0,0,3,0,0],
  4.     [0,0,0,0,0],
  5.     [0,0,0,0,0],
  6.     [0,0,1,0,0],
  7.   ].flatten
  8.   map = Map.new(5,5,data)
  9.   map[2,0] = 6  // 在外面建议使用比较安全的[x,y]方法,而不是get(x,y)
  10.   map[1,1] = 6
  11.   map[3,1] = 6
  12.   map[2,2] = 6
  13.   p data

我们可以看到data被完美地更改了。

关于支持的形状,SMRC允许地图分割。
RUBY 代码复制
  1. data = [
  2.     [0,0,0,0,0],
  3.     [0,0,3,0,0],
  4.     [0,0,0,0,0],
  5.     [0,0,0,0,0],
  6.     [0,0,1,0,0],
  7.   ].flatten

如图地图,我们的1左面和右面希望是不同的,两个有着不同的移动力
只需分来,设置为不可移动即可。
RUBY 代码复制
  1. data1 = [
  2.     [0,0,0,4,4],
  3.     [0,0,3,4,4],
  4.     [0,0,0,4,4],
  5.     [0,0,0,4,4],
  6.     [0,0,1,4,4],
  7.   ].flatten
  8. data2 = [
  9.     [4,4,4,0,0],
  10.     [4,4,4,0,0],
  11.     [4,4,4,0,0],
  12.     [4,4,4,0,0],
  13.     [4,4,1,0,0],
  14.   ].flatten

分别传给Route,然后将两个运算结果合并就行了。

由于传入参数为数组,我们可以方便地修改Ruby中便利的Array以达到修改数据的目的。
同时,由于传入为引用,我们可以方便地利用Map修改这一数据。

点评

已更新  发表于 2015-7-24 15:28
也就是说是正方形 - -?  发表于 2015-7-24 13:13
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
48
在线时间
784 小时
注册时间
2013-1-4
帖子
1102
4
发表于 2015-7-24 13:20:45 | 只看该作者
有没有障碍判断?支不支持其他形状?以及二次配布是否允许?
RM-GUI延期。。。最近被黑心老板压迫T_T
二次元少女的shitake,长着长脸,身高165,蓝色卷双马尾,FCUP,瞳色黑色,病气和御宅属性,是天才少女。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
5
 楼主| 发表于 2015-7-24 15:28:08 | 只看该作者
本帖最后由 寒冷魔王 于 2015-7-24 15:39 编辑
墨凌羽 发表于 2015-7-24 13:20
有没有障碍判断?支不支持其他形状?以及二次配布是否允许?


关于障碍,只要将移动力消耗地图设置为0即可。(或者测试代码的待转化地图设为4)
地图形状是可以更改的。至于移动形状的话,利用分割差不多也可以?(表示实在不懂其他形状是何意思)

二次配布的话,本人希望能够保留作者信息及更新网址,因为如您所见,本版本只是一个BETA版。
如果出现BUG及版本变更的情况,本人希望使用者能够及时修改及更新。
SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止访问)

梦石
0
星屑
88
在线时间
631 小时
注册时间
2014-8-4
帖子
3600
6
发表于 2015-7-24 22:03:51 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1759
在线时间
2524 小时
注册时间
2010-10-12
帖子
1454

开拓者

7
发表于 2015-7-25 22:18:52 | 只看该作者
XP 可以用吗
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
8
 楼主| 发表于 2015-7-25 22:22:22 | 只看该作者
刺夜之枪 发表于 2015-7-25 22:18
XP 可以用吗

虽然SMRC是用纯Ruby写的,理论上RGSS三版均可以,但是目前只在VA上测试过。
XP和VX对Ruby的支持度不是很好。修改一下或许可以。

点评

脚本已更新,在VX测试下通过,所以XP也可以使用  发表于 2015-7-30 15:26
好的  发表于 2015-7-25 22:27
SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
9
 楼主| 发表于 2015-7-31 12:02:27 | 只看该作者
路路 发表于 2015-7-24 09:57
没有看代码,范围的形状是什么?

SMRC不仅可以默认支持4方位,还可以支持其他多种方位(刚刚才发现)
通过变更79-82行实现:

6方位


正方形


基本上只要是有规律的形状,都可以实现
SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
129
在线时间
124 小时
注册时间
2011-9-12
帖子
76
10
发表于 2016-12-21 14:01:13 | 只看该作者
算法是没问题的,但是500x500的空地图其实并不是最坏情况,你可以试试这个:
RUBY 代码复制
  1. #---------------------------------
  2.   # Test 6
  3.   # Test Network.
  4.   #---------------------------------
  5.   puts("\nTest 6:")
  6.   x = 500
  7.   y = 500
  8.   steps = 350
  9.   map = Map.new(x, y, 0)
  10.   (0...x).each{ |i|
  11.     (0...y).each { |j|
  12.       map[i, j] = (i % 4 == 3) ? 7 : 1 if j % 4 == 2
  13.       map[i, j] = (i % 4 == 1) ? 7 : 1 if j % 4 == 0
  14.       map[i, j] = (i % 2 == 1) ? 0 : 1 if j % 2 == 1
  15.     }
  16.   }
  17.   route = Route.new(map,0,0)
  18.   puts Chill.test { route.search(steps) }
  19.   puts route.getPoints.size

SPFA算法经过每个点不止一次,因此复杂度不可估计。

点评

_(:зゝ∠)_然而并不是我做的。。  发表于 2016-12-21 21:35
顺便,你的Gemini好爽啊……  发表于 2016-12-21 21:33
_(:зゝ∠)_合作挺好的呀,我都没人合作的说  发表于 2016-12-21 21:29
并没有一堆项目,有一个是实验室合作的,有一个是课程大作业和别人合作的,都是Organizations下的…… 只有刚上传的一个算是我自己的Orz……  发表于 2016-12-21 21:19
咦,刚刚看到你还有一堆项目。。现在只剩下一个了么。。  发表于 2016-12-21 21:15
本帳號已經作廢。新ID是「湖中神劍」。
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-4 01:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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