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

Project1

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

[通用发布] 【纯理论】让你的脚本更人性化一点

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1323
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
跳转到指定楼层
1
发表于 2011-7-24 00:29:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
首先在第一排需要谦虚一下,我只是发表一下我的见解,并非表示此为新发明神马的。

理论

理论
理论

当你很艰难的写完一个脚本之后,便等不急的拿去发布了。其实我也一直如此,为了得到广大人民群众的认可,那种成就感。不过其实也许你写的这脚本还能更好,我这里的更好,是指可以更人性化。

1。界面人性化
如果你写系统与玩家交互的界面,人性化什么的我想无人不知,于是    我不发言。

2。交互方式人性化
这里的交互,是指系统与作者之间的交互,其实很多时候一个脚本的质量多于此,使用越方便,脚本就越好(个人见解,当然不排除效率,冲突等因素。)
我这里讲几个特性。
1易设性:怎么说呢,就是之在使用你的脚本设置数据,有些需要在脚本内哈希表的。这样的脚本虽然冲突很小,但是可能会出现每次都需要关掉脚本编辑器,然后打开数据库,就为了看一个武器的ID。如果你换一种方式可以直接用RM本身带有的可以选择武器的控件,那效率必将大增。

2易读性:使用你的脚本时间长了,也许忘了。再次回来看也许看不懂了,比方说装备附加技能,你在某位置填写了技能的ID。此时,作者看到这个ID,想不起来这是什么技能,他需要翻看一下数据库,如果是大量,这将是一个体力活。

3易改性:使用你的脚本,最好不要对数据带来太大的牵扯。什么意思呢,假设在制作后期需要更改前期设定的某些东西,此时发现需要改动量非常的大。比方说物品分类脚本,假如制作后期突然不想要这个功能了。他会发现所有的说明后面都有点小问题(虽然解决起来不是很难,不过这是一个例子。)

其实以上问题可解决空间不大,以下,我要提出的是脚本的智能化。

脚本的智能化,就是代替作者完成一些本来需要复杂设定的地方。作者只需要做一些简单的设定。

我以前写过一个自动提示脚本,就是按照一般作者制作事件的规律来判定每一个事件都是什么功能,作者除了插入脚本,不需要做额外的任何事情。如果不为作者考虑,我们完全可以让作者在事件内写备注,显然这工作量很大。

现有的很多对话框加强很不错,也越来越人性化。以前非要用事件脚本来更改对话者,然后才能正确显示名称。然后还要指定事件才能在正确位置显示。现在的可以直接判断冒号前面的就是名字,然后直接和地图上的事件名字对比找到合适的位置。这就是智能化。

规律,规律规律,懂么。这需要做游戏过程中才能发现的。有些看似没有规律的东西,实际上有规律。为了说明我这里讲一个例子。



如图我们可以看出这是一个阶梯,是不能直接从下面走到上面,而可以从上面走到下面。然而各位脚本作者们,写一个脚本适合全部相似状况。



也许这个用事件,或者在地图上做手脚什么的实现起来很容易。但是能否让作者不做任何事情,只需要有了你的脚本,地图就自动实现这种效果呢?

大家一起想一想。怎么才能实现,我会在10L公布答案。


其实以上只是最近的一些想法,总是看论坛上很多东西都可以很智能,但是缺没有那么做。
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
乌有君
2
乌有君  发表于 2011-7-24 00:33:08
本帖最后由 匿名 于 2011-7-24 01:21 编辑
  1. def gtr_beta_16_random_room
  2.     #覆盖基本所有区域
  3.     $game_map.map.width = 30
  4.     $game_map.map.height = 25
  5.     for x in 0...$game_map.width
  6.       for y in 0...$game_map.height
  7.         sys_set_mapdata(x,y,0,384)
  8.         sys_map_autotilereset(x,y,1,49)
  9.       end
  10.     end
  11.     Graphics.update
  12.     sx = 10 + rand($game_map.width - 20)
  13.     @enter_x = sx
  14.     @enter_y = $game_map.height - 1
  15.     sy = $game_map.height / 2 #+ rand(10) - 19
  16.     w = 6 + rand(14)
  17.     h =  8 + rand(12)
  18.     dig_up_room(sx,sy,1,w,h)
  19.     Graphics.update
  20.     for yy in sy..@enter_y
  21.       sys_map_autotilereset(@enter_x,yy,1,0)   
  22.     end
  23.     make_wall(1,48+28,401,409)
  24.     Graphics.update
  25.     make_things_nearwall_16mix
  26.     make_big_things_inspace_16mix(12)
  27.     Graphics.update
  28.     $game_player.moveto(@enter_x,@enter_y)
  29.     $scene.spriteset.dispose
  30.     $scene.spriteset = Spriteset_Map.new
  31.     $scene.map_window.dispose
  32.     $scene.map_window = Window_Map.new
  33.   end
  34. ###########################################################################
  35.   def dig_up_room(x,y,z,width,height) #挖出一个长方型空间,高度必须3以上
  36.     for xx in (x - width / 2)..(x + width / 2)
  37.       for yy in (y - height / 2)..(y + height / 2)
  38.         if xx <= 2 or xx >= ($game_map.width -3) or yy <= 2 or yy >= ($game_map.height - 3)
  39.              next         
  40.          end
  41.          sys_map_autotilereset(xx,yy,z,0)   
  42.       end
  43.     end
  44.   end
  45. ###########################################################################
  46.   def make_wall(z,fst,snd,trd)
  47.     for x in 0...$game_map.width
  48.       for y in 0...$game_map.height
  49.         if sys_map_gt(x,y-1,z) == fst
  50.           sys_map_autotilereset(x,y,z,snd)   
  51.         end
  52.         if sys_map_gt(x,y-1,z) == snd
  53.           sys_map_autotilereset(x,y,z,trd)   
  54.         end
  55.       end
  56.     end
  57.   end
  58. ###########################################################################
  59.   def make_things_nearwall_16mix
  60.     for x in 0...$game_map.width
  61.       for y in 0...$game_map.height
  62.         if sys_map_gt(x,y-1,1) == 409 and sys_map_gt(x,y,1) == 0 and sys_map_gt(x,y,2) == 0
  63.           g = rand(4)
  64.           case g
  65.           when 0
  66.             next
  67.           when 1
  68.             if sys_map_gt(x+1,y,1) == 0 and sys_map_gt(x+1,y-1,1) == 409 and sys_map_gt(x+1,y,2) == 0
  69.               kkk = rand(4)
  70.               if kkk == 0
  71.                 sys_map_autotilereset(x,y-2,2,472)
  72.                 sys_map_autotilereset(x+1,y-2,2,473)
  73.                 sys_map_autotilereset(x,y-1,2,480)
  74.                 sys_map_autotilereset(x+1,y-1,2,481)
  75.                 sys_map_autotilereset(x,y,2,488)
  76.                 sys_map_autotilereset(x+1,y,2,489)
  77.               elsif kkk == 1
  78.                  sys_map_autotilereset(x,y-1,2,482)
  79.                 sys_map_autotilereset(x+1,y-1,2,483)
  80.                 sys_map_autotilereset(x,y,2,490)
  81.                 sys_map_autotilereset(x+1,y,2,491)
  82.               elsif kkk == 2
  83.                 sys_map_autotilereset(x,y-1,2,507)
  84.                 sys_map_autotilereset(x+1,y-1,2,508)
  85.                 sys_map_autotilereset(x,y,2,515)
  86.                 sys_map_autotilereset(x+1,y,2,516)
  87.               end
  88.             else
  89.               next
  90.             end
  91.           when 2
  92.              if @livenumber > 0
  93.                next
  94.              end
  95.              if sys_map_gt(x,y+1,1) == 0 and sys_map_gt(x,y+1,2) == 0
  96.                  sys_map_autotilereset(x,y-1,2,479)
  97.                 sys_map_autotilereset(x,y,2,487)
  98.                 sys_map_autotilereset(x,y + 1,2,495)
  99.                 @livenumber += 1
  100.               end
  101.            when 3
  102.              if sys_map_gt(x,y+1,1) == 0 and sys_map_gt(x,y+1,2) == 0
  103.                kkk = rand(5)
  104.                if kkk == 0
  105.                  sys_map_autotilereset(x,y-1,2,496 + 72 + 3)
  106.                 sys_map_autotilereset(x,y,2,496 + 72 + 3 + 8)
  107.                elsif kkk == 1
  108.                  sys_map_autotilereset(x,y-1,2,496 + 72 + 3 + 1)
  109.                 sys_map_autotilereset(x,y,2,496 + 72 + 3 + 8 + 1)
  110.                 end
  111.               end
  112.           ####################   
  113.           end
  114.           ########end of case  
  115.         end
  116.       end
  117.     end
  118.   end
  119. ############################################################################
  120.   def make_big_things_inspace_16mix(times)
  121.      space = []
  122.      tried = 0
  123.      #############################
  124.      for x in 0...$game_map.width
  125.       for y in 0...$game_map.height
  126.         if sys_map_gt(x,y,1) == 0 and sys_map_gt(x,y,2) == 0
  127.           space.push([x,y])
  128.         end
  129.       end
  130.      end
  131.     for i in 0...times
  132.       Graphics.update
  133.      ##################################
  134.      k = space[rand(space.size)]
  135.      type = rand(10)
  136.      if type <= 3
  137.        #####################################
  138.        d = true
  139.        for x in (k[0] - 2)..(k[0] + 2)
  140.          for y in (k[1] - 1)..(k[1] + 1)
  141.           unless space.include?([x,y])
  142.            d = false
  143.            break
  144.           end
  145.          end
  146.         end
  147.         if d == true
  148.           sys_map_autotilereset(k[0]-1,k[1]-1,2,424)
  149.          sys_map_autotilereset(k[0],k[1]-1,2,425)
  150.          sys_map_autotilereset(k[0]+1,k[1]-1,2,426)
  151.          sys_map_autotilereset(k[0]-1,k[1],2,432)
  152.          sys_map_autotilereset(k[0],k[1],2,433)
  153.          sys_map_autotilereset(k[0]+1,k[1],2,434)
  154.          sys_map_autotilereset(k[0]-1,k[1]+1,2,440)
  155.          sys_map_autotilereset(k[0],k[1]+1,2,441)
  156.          sys_map_autotilereset(k[0]+1,k[1]+1,2,442)
  157.          for x in (k[0] - 1)..(k[0] + 1)
  158.          for y in (k[1] - 1)..(k[1] + 1)
  159.           space.delete([x,y])
  160.          end
  161.          end
  162.        end
  163.        #######################################
  164.      elsif type <= 10
  165.        ########################################
  166.        d = true
  167.        for x in (k[0] - 1)..(k[0] + 1)
  168.          for y in (k[1] - 1)..(k[1] + 1)
  169.           unless space.include?([x,y])
  170.            d = false
  171.            break
  172.           end
  173.          end
  174.         end
  175.         if d == true
  176.          sys_map_autotilereset(k[0],k[1],1,496 + rand(3))
  177.          space.delete(k)
  178.        end
  179.        ########################################
  180.      end
  181.      ###END OF BIG IF#####################
  182.    end
  183.    ####END OF BIG FOR#####################
  184.   end
复制代码
石器的快感之一在于不断看到有人重新发现偶们已经发现的东西。
我们制定规则,让程序拥有创造力。(甚至这段脚本本身也有一部分通过另外一个脚本自动生成。当然,不要奢望自动生成的这坨东西会自己写注释 囧 故而,挑了个最简单的一个- -)
我们可以更偷懒一点,直接告诉程序:给我一间房间。
然后OK。
然后告诉程序:给我往房间里塞点乱七八糟的东西
然后OK。
然后告诉程序:随便来点神马生物。
然后也OK。
不用那么远看10楼了,这段脚本汝等能看到什么?(当然,在别的地方TILEMAP被整个轰杀成了渣渣然后重组)


此外捏:

左面和右面完全是一样的东西
程序先自动搞定左边,再自动搞定右边。
同理,自动搞定阶梯神马的差不多一样。
(实际上这坨东西根本没打算让大多数人看懂- - 不过看懂的人基本上知道这东东到底能干神马)
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

3
发表于 2011-7-24 00:44:31 | 只看该作者
那个阶梯……咳咳,你得用shift,不然就是连在一起变成视觉错觉了 - -
话说这个放在文字区而不是讨论区没关系么囧。
话说判断的这个的主要依据是这个元件下面的墙壁有多少块吧……

点评

猛地一看,的确是看墙壁的高度。  发表于 2011-7-24 00:49
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
48
在线时间
678 小时
注册时间
2010-8-11
帖子
1533
4
发表于 2011-7-24 03:04:37 | 只看该作者
楼梯……楼梯?楼梯!
懂了不……
小艾工作室开张= =
回复 支持 反对

使用道具 举报

Lv4.逐梦者

醉啸 长风万里

梦石
0
星屑
6167
在线时间
6593 小时
注册时间
2007-12-16
帖子
4501

贵宾

5
发表于 2011-7-24 09:24:14 | 只看该作者
阶梯的话外站有这样的脚本,还蛮好用的

还在龟速填坑中
回复 支持 反对

使用道具 举报

Lv1.梦旅人

尽头

梦石
0
星屑
119
在线时间
278 小时
注册时间
2010-6-20
帖子
1280
6
发表于 2011-7-24 09:31:04 | 只看该作者
各种的不懂= =.
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42397
在线时间
7602 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

7
发表于 2011-7-24 11:10:56 | 只看该作者
囧,原来那个帖子跑哪去了.
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
459 小时
注册时间
2008-10-9
帖子
114
8
发表于 2011-7-24 11:15:07 | 只看该作者
好,加把劲,盖十楼
好好学习,天天向上!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
890
在线时间
119 小时
注册时间
2011-6-12
帖子
377
9
发表于 2011-7-24 12:06:23 | 只看该作者
哈哈哈哈~我很浮云地把十楼占了~楼主,在楼下公布答案吧~


回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1323
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
10
 楼主| 发表于 2011-7-24 12:43:25 | 只看该作者
答案很简单,二楼的小柯已经说出来了。

其实这并不是重点,重点是这些东西其实很容易想到。
虽然不知道一个作者会在地图上画上什么,但是需要画什么不是乱画的。
房子的话必定有房顶,瀑布的话必定有水坑,

奶妈型怪物必定有回复技能。
特殊NPC必然各种条件分歧,并且不止一个事件页。
……

点评

2楼的貌似是蛇君..............  发表于 2011-7-24 13:33
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 17:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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