幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 14977|回复: 50

[原创]跟我一起学ruby——第一天

[复制链接]

28

主题

239

帖子

3451

积分

⑥精研

流氓甲

积分
3451
发表于 2005-1-22 20:26:27 | 显示全部楼层 |阅读模式
跟我一起学ruby——第一天

* 注:本教程在http://www.diyrpg.com/上发表,授权给幻想森林论坛使用。版权属于作者Tiger。其他人转载需要注明出处。

自序
    从今天起我就要开始学Ruby了。怎么样,没见吧?一个新人写教程。就凭我坚强的毅力,科学的自学方法,以及我的钻研精神,我有信心学通Ruby,而同样是新手的你也可以!由于本教程是菜鸟教莱鸟若有什么不对的地方还请前辈指教!如果没人看,就当我自愚自乐了。

卷首语
--------------------------------------------------------------------------
准备知识
一、为什么要学Ruby?
不用说一定是帮助发挥RM的潜力啦。而Ruby有多好多坏都与我无关,因为我学它只为了一个原因--RM!

二、什么是Ruby?
它是一种纯粹的面向对象编程的脚本语言。这就像C语言啦,就是一种电脑听得懂的语言,就好比你对电脑大叫一声“我要上网”它是不会让你上网的,必须通过一种语言来告诉它,Ruby就是其中之一,当然Ruby也要用打的,不是用说的...

三、学Ruby要准备啥?当然是RM了,我还准备了三个东西:
1.笔记本--别看不起它,这可是重中之重,你的一些疑问与炅感、研究得出的结论都可记在上面.
2.一个新工程,我暂时把它命名为Test,它将用研究与实践.
3.另一个新工程,我暂时把它命名为标准,它的作用是万一你把自带的Ruby改得面目全非,有它可以做参照。当然RM的脚本数据是保存在 Data 文件夹内的 Scripts.rxdata 文件中的,你也可以对此文件进行备份。
--------------------------------------------------------------------------
实践基础
一、关于脚本脚本编辑器:
1.RM中,进入脚本脚本编辑器的方法是按F11或在主菜单「工具」菜单中选择「脚本编辑器」。。
2.脚本编辑器中一些快捷键(感谢carol3,这不是我发现的):
tab:可以跳格、能够自动进行缩进
ctrl + 鼠标滚轮 : 调整文字的大小
ctrl + F:查找本页脚本
ctrl + shift + F:查找所有脚本
ctrl + H:替换
ctrl + A:全选
ctrl + C,ctrl + V:拷贝粘贴
ctrl + Z,ctrl + Y:撤销与重做
F3:和ctrl + F配套使用,"查找下一个"
F4,F5:选择上一个/下一个脚本
F6:把现在选的这一行命名为本脚本名
ctrl + enter:保存并关闭本窗口

二、创建程序的步骤:
1.确定程序的目标-比如你的目标是做一个求三角形面积的程序。
2.确定要使用什么样的方法-我知道S=1/2ah=1/2abSinC,求角度太烦,且后者不是单独的乘除运算,故吾选前者。
3.创建程序。

三、编程中应养成的好习惯:
1.写注释。很多人认为写注释是在浪费时间——但别忘了——当你在写代码时,也许你的思路清楚;然而当程序逐渐变大,或当你面对几个月前写的代码时,注释的作用就显而易见了。
在 Ruby 中,# 符号后面的一整行文字会认定为注释。当你要写大块的注释时, 也可以用 =begin 和 =end 的中间的一切为注释。
注释是绿色的,不会执行,不会影响到程序的运作,只作为编写者标记的备忘记录来使用。

2未完成...

四、编译错误的看法
当你拼写、语法有错误了,程序就会停止运行,并告诉你相关的信息,此时再按F11进入脚本编辑器,就会看到光标放在了出错的那一行。
如图:

12行:未初始化的常量“Persond”
具体的方法我还没有总结。未完成...
--------------------------------------------------------------------------
Type&Run
(本来下文是不准备发的,但有人说本教程写的有些脱离RM,所以发了下文——不准备发的原因是我不知道carol3的“RGSS区置顶脚本整理中,目前收集脚本:30,望大家添加”一帖中竟然有教程!而且有一部分与我的几乎一样,算了,为了保证教程的完整性,我就把我写的发上来了...绝非抄袭!)
让我们来入手Ruby:
实践:标题画面的部分自定义
实践目的:
1.学会Ruby的研究方法。
2.学会根据注释来做一些实验。
3.熟练脚本编辑器中一些快捷键的使用。
打开脚本脚本编辑器
1.在脚本脚本编辑器的左边找到scene_title
2.可以在右边的筐架中看到第一行:
#==============================================================================
# Scene_Title
#------------------------------------------------------------------------------
# 处理标题画面的类
#==============================================================================
我们知道这是注释,它的意思就是说scene_title这代码是用于处理标题画面的。同理,我们可以随便看看其它的组(组就是类似scene_title的在脚本脚本编辑器的左边的一窜一窜的代码),怎么样,它们的用途一目了然吧!
3.既然知道它是用于处理标题画面的,我们就拿它开刀吧!
游览一下:读取数据库;生成系统对象;...这些都太深奥了在往下看——   
s1 = " 新游戏"
s2 = " 继续"
s3 = " 退出"
终于看到了熟悉的中国字了,呵!这不是RM中标题画面的选项吗!
看看它上面的注释——生成命令窗口。果然是标题画面的选项。
我们改了它试试:
s1 = "新的轮回"
s2 = "旧的回忆"
s3 = "随风而逝"
按ctrl + enter:保存并关闭本窗口。
再按F12运行游戏。果然成功了!


4.人的野心总是无限的,我还想添加一个关于本游戏!好再试试:
s1 = "新的轮回"
s2 = "旧的回忆"
s3 = "随风而逝"
s4 = "关于本游戏"
5.贪得无厌总有一些心虚,再看看它下面的内容再运行游戏吧!
    @command_window = Window_Command.new(192, [s1, s2, s3])
    @command_window.back_opacity = 160
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 288
有x、y大盖是在说选项的框框吧!糟了,多了一个选项,框框就一定要变长,如果不去修该框框的属性选项会出现选项无法显示出来的情况。管它呢!就算是真的我也无能为力...
第一行有个(192, [s1, s2, s3])s1,s1,s3好象与s1 = "新的轮回"等中的s1,s1,s3说的是同一个东西吧?既然我加了s4,就得把s4也加进去:
    @command_window = Window_Command.new(192, [s1, s2, s3,s4])
s4;s3之间学它样也用 , 连接。
6.再运行游戏。果然出现了关于本游戏选项而且框框也能自动调整把四个选项纳入其中。可见我们刚才的猜测是错的,有x、y大盖是在说框框
的位置?




由图可知:红色框中的星星与框框上端的相对位置在修改前后没有变过,而蓝框中框框下端与RPG字符的相对位置的相对位置发生了变化,也就是说,框框上端的位置是不变的,当有新的选项时,自动延伸框框的下端。而有x、y大盖是在说选项的框框的上端的位置?
7.再试试:
s1 = "新的轮回"
s2 = "旧的回忆"
s3 = "随风而逝"
s4 = "关于本游戏"
s5 = "asd"
s6 = "sdasd"
s7 = "weqw"
@command_window = Window_Command.new(192, [s1, s2, s3,s4,s5,s6,s7])


果然,有标题显示不出了。
8.再看看:
s1 = "新的轮回"
s2 = "旧的回忆"
s3 = "随风而逝"
s4 = "关于本游戏"
@command_window = Window_Command.new(192, [s1, s2, s3,s4,s5])
这会出错。
s1 = "新的轮回"
s2 = "旧的回忆"
s3 = "随风而逝"
s4 = "关于本游戏"
@command_window = Window_Command.new(192, [s1, s2, s3])
关于本游戏将不会被显示。
9.现在的关于本游戏还无用处。我们可以参照"新的轮回""旧的回忆""随风而逝"来给它功能。凡是它们有的我都给关于本游戏加上。往下看,注意到有:
  def update
    @command_window.update
    # 按下 C 键时
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0  # 新游戏
        command_new_game
      when 1  # 继续
        command_continue
      when 2  # 退出
        command_shutdown
      end
    end
  end
when-当...时,这好象类似条件分歧的条件部分,注释告诉我这是选择新游戏;继续;退出不同命令的分歧。
那么command_new_game;command_continue;command_shutdown就是动作了。他们会不会是Ruby中已经定义过的东西?如果是那么你为关于本游戏写其它的东西是没用的。那就让关于本游戏和退出共用一个东西吧:
  def update
    @command_window.update
    # 按下 C 键时
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0  # 新游戏
        command_new_game
      when 1  # 继续
        command_continue
      when 2  # 退出
        command_shutdown
      when 3  
        command_shutdown
      end
    end
  end
运行之,果然是这样!按了关于本游戏就退出了。可见command_shutdown是用来调用退出命令的。那它会不会是Ruby中已经定义过的东西?我们再往下看:
10.
  #--------------------------------------------------------------------------
  # 命令:新游戏
  #--------------------------------------------------------------------------
.
.
.
.
.
.
.
  #--------------------------------------------------------------------------
  # 命令:继续
  #--------------------------------------------------------------------------
.
.
.
.
.
.
.
  #--------------------------------------------------------------------------
  # 命令:退出
  #--------------------------------------------------------------------------
这好象是在分类讨论。它们都以 def xxxxxxx开头,而xxxxxxx的内容就是前面分歧中各选项所对的内容了。可见那它不是Ruby中已经定义过的东西。那就为我们自定义留下了余地:
  def update
    @command_window.update
    # 按下 C 键时
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0  # 新游戏
        command_new_game
      when 1  # 继续
        command_continue
      when 2  # 退出
        command_shutdown
      when 3  
        abc
      end
    end
  end
复制一下 命令:退出中的内容,并粘贴在退出后,把粘贴的内容中的  def command_shutdown改为def abc。运行之效果和前面一样。

好了就我现在的实力,也只能进行到此了,如果懂一些语法,可以把def asd下面的内容改一改。
--------------------------------------------------------------------------
总结
未完成...
--------------------------------------------------------------------------
作业
1.程序开发的步骤?
2.试着使用脚本编辑器中一些快捷键。
提高题:
试着总结脚本编辑器使用中出现的一些错误类型及其看法。
未完成...
-------------------------------------------------------------------------------------------------------------------------
答案




[此贴子已经被作者于2005-8-17 17:22:37编辑过]

本帖子中包含更多资源

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

x
R界最大的知识词典: http://www.diyrpg.com/wiki
回复

使用道具 举报

carol3 该用户已被删除
发表于 2005-1-22 20:39:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

28

主题

239

帖子

3451

积分

⑥精研

流氓甲

积分
3451
 楼主| 发表于 2005-1-22 20:43:32 | 显示全部楼层
\"等着你写到战斗脚本那部分\"我是看着你写的教程做的...所以,这要看你的速度了...
提高题怎么做啊?
R界最大的知识词典: http://www.diyrpg.com/wiki
回复 支持 反对

使用道具 举报

28

主题

239

帖子

3451

积分

⑥精研

流氓甲

积分
3451
 楼主| 发表于 2005-1-24 09:36:20 | 显示全部楼层
都没人看...

都去看现成的系统了...

复制到自己的游戏的Ruby不等于就是你的了...
R界最大的知识词典: http://www.diyrpg.com/wiki
回复 支持 反对

使用道具 举报

2

主题

25

帖子

1563

积分

⑥精研

积分
1563
发表于 2005-1-26 00:11:08 | 显示全部楼层
我有看……不要灰心啊~
不過第一天沒具體學到啥東西~
(不過個人反對因RPGXP而學RUBY的行為,學一種語言是嚴肅滴U_Ua)
最口胡的事情就是,自己的帳號只打一半…… 偶素維琪雅,後面那個_jia是Jiang……|||bbb QQ隱身中:29848696
回复 支持 反对

使用道具 举报

carol3 该用户已被删除
发表于 2005-1-26 04:14:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

2

主题

25

帖子

1563

积分

⑥精研

积分
1563
发表于 2005-1-26 04:18:44 | 显示全部楼层
好吧~(兩手一攤)我修正成:
『對於我腦容量沒有超過20公克的傢伙,為了RMXP而學RUBY,是一件投資報酬率很低的事。』
最口胡的事情就是,自己的帳號只打一半…… 偶素維琪雅,後面那個_jia是Jiang……|||bbb QQ隱身中:29848696
回复 支持 反对

使用道具 举报

10

主题

98

帖子

1131

积分

⑥精研

影猫焰焰

积分
1131
QQ
发表于 2005-1-27 22:24:59 | 显示全部楼层
第一天学到了不少快捷键,至少我原来是不知道的...
所以不要失去信心,这样是无法为人师表的.
7楼的大人,偶觉得资本报酬率还是很高的说...
似乎有很多东西要画的样子…… 笨笨森林日志……纯粹推荐……
回复 支持 反对

使用道具 举报

28

主题

239

帖子

3451

积分

⑥精研

流氓甲

积分
3451
 楼主| 发表于 2005-1-28 17:38:36 | 显示全部楼层
听了群众的意见后,更新过了,但还是有点乱.
R界最大的知识词典: http://www.diyrpg.com/wiki
回复 支持 反对

使用道具 举报

1

主题

9

帖子

313

积分

④见习

积分
313
发表于 2005-1-28 22:26:14 | 显示全部楼层
我非常需要呢,谢谢了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-20 03:04 , Processed in 0.027496 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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