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

Project1

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

[通用发布] 小旅的脚本入门教程(8.14基础篇完结!)~

  [复制链接]

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1530
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

跳转到指定楼层
1
发表于 2011-7-29 23:37:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 「旅」 于 2011-8-14 11:23 编辑

近况:昨天更新了4篇教程,今天完成了细节处理和图片提示的上传~~




写作初衷:
也许只是我个人理解有问题,但确实有种感觉,最开始接触的无论是脚本入门还是站上的各种教程时,总是不习惯一大堆的理论内容,而又经常找不到半句相关的代码,于是最终总因不知所云而放弃。除此之外,自己比较想知道的例如生成图片保持读取的问题也根本看不到踪迹,弄得自己更加头大。所以正是因此,自己一直希望写出一个能适合和我有同样遭遇的同学的教程。趁着暑假的到来,希望完成这个想法,请大家支持我^-^





注意事项:
1.这个教程是更多的是面向那些为了制作出更精美游戏的制作者而写的,如果你单纯是为了学习编程的话,我个人不推荐这个教程。
2.脚本是比较抽象的事物,学习起来会比较辛苦,所以一定要先确保自己真的有一份制作游戏的热情,能不能学好都看你的觉悟。
3.教程最开始的基础篇(03-08和13-15)会复制脚本入门的内容,但很多地方都有修改,会尽力更加适合新人观看的。





麻烦大家啦:
可能有些错别字或讲解错的内容之类,希望察觉的同学可以帮忙回帖提示下。有什么好建议或疑惑也可以回帖~~
感谢大家的支持~~

点评

您好请问什么时候还能再次更新很期待教程  发表于 2015-10-10 20:33

评分

参与人数 9星屑 +2570 梦石 +4 +8 收起 理由
ZAndiH + 60 支持~太感谢旅了
御灵 + 400 辛苦辛苦
熊猫 + 240 学了不少,嘿嘿!
耶和华 + 60 小旅什么的最萌了~
夕阳武士 + 1000 抱抱师姐><
个快快 + 10 旅姐加油啊
liqunsz + 800 旅姐姐大触><
fux2 + 4 + 4 ><旅酱辛苦了
禾西 + 4 捏小旅

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
84 小时
注册时间
2010-10-10
帖子
62
2
发表于 2011-7-30 09:51:42 | 只看该作者
本帖最后由 「旅」 于 2011-8-14 11:23 编辑

01.  写在前面(主楼)

(基础篇)10-12是重点课程
02.  脚本的介绍(板凳)
03.  开始(4楼)
04.  数字的计算(5楼)
05.  变量(6楼)
06.  条件分歧(7楼)
07.  字符串(8楼)
08.  循环(9楼)
09.  方法和函数(13楼)
10.  类和实例(14楼)
11.  类的属性(15楼)
12.  深入认识类(16楼)
13.  显示图片(17楼)
14.  数组(18楼)
15.  哈希表(19楼)

(解读篇1)
16.  数据库
17.  场景类
18.  游戏对象
19.  精灵
20.  窗口
21.  讲解Bitmap
22.  Main

(解读篇2)
23.  Selectable
24.  对话框
25.  保存与读取
26.  编译器

(解读篇3)
27.   Rect Viewport
28.   Table
29.   Color Font Tone
30.   RPG::Weather Tilemap
31.   冷门类的讲解
32.   错误Error

(扩展篇)
33.   Plane
34.   常量
35.   模块
36.   alias的用法
37.   另一种注释(10楼)
38.   类变量(11楼)
39.   分歧注意事项(12楼)
40.   Proc
41.   脚本运行的效率
42.   split的用法
43.   begin

44.   几何图形的描绘
45.   描绘艺术字

(选修篇)
46.   *的用法

点评

这是马甲?  发表于 2011-8-17 22:40
因为另一个我,所以,要抛弃过去了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1530
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

3
 楼主| 发表于 2011-7-30 09:55:42 | 只看该作者
本帖最后由 「旅」 于 2011-8-13 11:08 编辑


02.脚本的介绍


什么是脚本:

脚本语言是一种独特的简单语言,RPGXP 采用的是 Ruby 脚本语言。Ruby 的官方网页是 点击进入
Ruby 是松本行弘先生开发的免费软件,描述大规模的游戏也能保持良好性能。是善长文本处理的语言,照原样会加大游戏开发的难度。因此,对游戏开发用途的 Ruby 语言进行了特殊化,这就是 RGSS(Ruby Game Scripting System),中文意思就是 Ruby 游戏脚本系统。


总而言之,RGSS是Ruby的特殊化(稍微加了些东西),而脚本是以RGSS为基础来编写的事物就是了。你要把脚本说成RGSS或Ruby都可以。

ps.默认下脚本文件是 游戏目录/Data/Scripts.rxdata 在里面存放的就是代码的数据了。

脚本有什么用:
只要你有技术,它可以帮助你做出一切你想要的游戏。技术稍浅的同学,整合、修改站上的各种脚本都够你用的了。如果技术足够,又富含想象力,那么一个惊天地泣鬼神的银河系统(大雾)也将自然不在话下,只要你努力~!

学脚本需要什么条件:
1.热情
2.信心
3.耐心

无论你现在只是上小学或是初中,无论你英语数学考得多么糟糕,不要觉得脚本就和自己没有任何关系了。

1.论坛上很多学会脚本的人都和你一样也在读小学和初中,而他们也并非所谓的天才只是普普通通的人,但不同的是他们坚信自己能够学好脚本,所以他们做到了!
2.学习脚本以及写脚本,其实真正需要你记住的英语单词少之又少。
3.第三,制作游戏需要的数学基础很少,所以也不要担心这点。

总而言之,只要有信心,每个人都可以学好脚本。

学习脚本的好习惯:
1.量力而为。做人要醒目,不要横冲直撞。每次看脚本不要过久,大概50分钟后可以休息一下,这样既可以事半功倍,还可以防止因为厌烦情绪导致的学习信心下降。
2.即时复习。虽然每次看完脚本都会有种云里雾里的感觉,这很正常。先休息一天,到了第二天复习时便会时不时有感觉到"昨天看起来很复杂的东西,今天却领悟到了什么"这样奇妙的滋味。
3.不要懒惰。每一段在教程里出现的代码都应该自己亲自改改、试试,这样才能学的牢固。
4.不耻下问。有问题别自己纠结太久,可以到论坛寻求帮助(但先搜索),在论坛学习的贴子总都会得到热心回答。


点评

我从来没有坚信自己可以学会脚本过……  发表于 2011-8-17 21:11
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1530
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

4
 楼主| 发表于 2011-7-30 10:08:30 | 只看该作者
本帖最后由 「旅」 于 2011-8-13 11:18 编辑


03.开始(难度系数:★☆☆☆☆ 超容易)


新建脚本:
首先打开脚本编辑器,可以用快捷键F11直接打开。打开之后,在左边那里右键选择插入,下面的名称可以随便取,他不会有任何的影响。恩这样就建立了我们第一个脚本页。






结束程序:
接下来我们来执行一下下面这段代码,
  1. exit
复制代码
注意,在 Ruby 中是区分字母大小写的,所以不能输入 EXIT 或 Exit。当然全角文字也不行。请全部以半角的小写字母输入。输入完毕后关闭脚本编辑器,运行(游戏测试 按F12)看看吧。
运行游戏测试,窗口应该显示一瞬间后立即关闭。因为exit是结束程序的代码,所以一进去就被退出来了。

显示数据:
在写脚本时经常会用到的一个代码就是p了,它的作用很大。很多数据都可以用p显示出来。例如:
  1. p 1
  2. p "66RPG"
  3. p true
复制代码



注释:
有时脚本写起来会比较多行,内容会比较复杂,所以为了避免忘记某段脚本是什么意思,所以可以利用#来说明。例如:
  1. p 123 # 我只是打酱油的
  2. exit # 我只是路过的
复制代码
你可以试试把#和后面的文字去掉,前后的效果都是一样的。
所以说,在#后面的内容是不会影响到脚本的运行

点评

我佩服得五体投地  发表于 2012-10-6 19:43
恩是的~~  发表于 2011-8-17 22:44
这个...都有了,就是那个“66RPG”是自己弄得吧  发表于 2011-8-17 22:42
任何对象都可以通过p显示……而不是很多……  发表于 2011-8-17 21:12
口胡那是字符串那节课的~~~  发表于 2011-7-30 10:14
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1530
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

5
 楼主| 发表于 2011-7-30 10:17:43 | 只看该作者
本帖最后由 「旅」 于 2011-8-2 10:21 编辑


04.数字的计算(难度系数:★☆☆☆☆ 超容易)


数字

Ruby 中能使用的数字,包括整数和浮点数两种。
p 3           # 整数
p 52          # 整数
p -99         # 整数
p 1.5         # 浮点数
p 3.0         # 浮点数
所谓浮点数,就是有小数点的数。数值相同的话写作 3 是整数,而写作 3.0 即是浮点数。整数计算速度快,如果不需要小数点以下的话尽量使用整数。

计算方法
在 脚本编辑器 输入这些计算内容吧。
  1. p 1 + 1             # 加法
  2. p 10 - 3            # 减法
  3. p 7 * 5             # 乘法
  4. p 24 / 4            # 除法
复制代码
这样,写上普通算式就会输出计算的结果。

优先顺序
和普通的数学算式一样,* 和 / 计算要优先于 + 和 - 计算。想改变这个顺序就要使用括号 ( ),括号中的算式将会优先计算。ps.注意不要用()而应该用()才对。
  1. p 2 * 2 + 3 * 4     # 16
  2. p 2 * (2 + 3) * 4   # 40
  3. p 2 * (2 + 3 * 4)   # 28
复制代码
按优先顺序,示例第一行其实是 4+12,第二行是 2*5*4,第三行是 2*14,所以会是不同的计算结果。
括号还可以多层重叠起来,例如:
  1. p (2 * (3 + 4)) – 5
复制代码

小数点以下的计算
整数除整数的情况下,会省略余数,答案将还是整数。想得到小数点以下的答案,就要使用到浮点数。除数或被除数至少要有一个是浮点数(明确标明了小数点以下),计算的答案就会是浮点数
  1. p 15 / 4            # 3
  2. p 15.0 / 4          # 3.75
  3. p 15 / 4.0          # 3.75
复制代码

余数的计算
求余数(除法的余数),是使用 % 符号
  1. p 14 % 4            # 2
  2. p 13 % 4            # 1
  3. p 12 % 4            # 0
复制代码
不知道什么是余数的同学可以去百度查一下,因为余数这样东西在以后写脚本时大有用途。

乘方的计算
乘方(同一个数指定次数的相乘)是使用 ** 符号
  1. p 2 ** 4            # => 16
复制代码
这个示例求 2 的 4 次方,计算 2*2*2*2,也就是2连续乘以4次的意思。

点评

0 0那些太复杂了,捏~~  发表于 2011-8-17 18:31
9E10这样的数也是浮点数的说= =浮点数并不一定等于小数,只是小数点的位置不固定而已……  发表于 2011-8-17 15:27
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1530
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

6
 楼主| 发表于 2011-7-30 10:33:52 | 只看该作者
本帖最后由 「旅」 于 2011-8-13 11:28 编辑


05.变量(难度系数:★☆☆☆☆ 超容易)


脚本里变量是一个很重要的东西,几乎每段代码都会涉及到变量。让我们一起来学习变量的基础知识。

变量的命名
我们可以为变量取比如 x 和 y 或者更长的像 level 或 gold 这样的名称。名称的长度没有限制。
变量有几个类型,首先我们来学习最基本的局部变量。局部变量的命名规则有以下几点。其中的第 1 条应该特别注意。
1.第一个字符必须以小写英文字母或 _(下划线)开头。
2.第二个字符开始可以使用英文字母、数字或 _(下划线) 。
3.不能使用保留字作变量的名称。

保留字是作为 Ruby 中具有特殊意义的词而被系统所「保留」,所以变量名称不能使用。以下就是系统的保留字。
alias    def      false    nil      return   unless
and      do       for      not      self     until
begin    else     if       or       super    when
break    elsif    in       redo     then     while
case     end      module   rescue   true     yield
class    ensure   next     retry    undef
(保留字不用特意去记住,只要清楚,输入后是蓝色字的是保留字就行)
除上面列出的保留字以外,其它的词都可以作变量的名称。

赋值和引用
在实际中使用变量看看吧。
  1. x = 3
  2. y = 4
  3. p x + y     # 7
复制代码
第一行和第二行是进行变量的赋值。其中 = 号是赋值运算符。和数学上使用等号表示「左边等于右边」的意思不同,这里表示「左边的变量代入右边的数值」。在上述示例中,第一行 x 变量和第二行 y 变量分别代入数值 3 和 4。
第三行是引用变量 x 和 y。所谓引用就是取得那个变量的数值。变量的计算和数字的计算方法完全一样。这里的 x + y 可以解释为 3 + 4,计算结果就为 7。

另外,引用从未进行赋值的局部变量,就会使程序出现错误
  1. p zzz       # 系统会提示错误
复制代码



请记住,变量一定要进行赋值后才能使用。
  1. zzz = 5
  2. p zzz       #  5
复制代码
这个示例中,第一行变量 zzz 为其赋值代入 5 后,第二行引用。

自运算
变量引用自己的数值,并再次代入计算结果称为自运算
  1. x = 1
  2. x += 7
  3. x -= 3
  4. x *= 2
  5. p x         # 10
复制代码
第二行的 x += 7 相当于 x = x + 7,总之就是向变量 x 里加上 7。同样 -=、*=、/=、%= 等也是如此使用。这些运算符就是自运算运算符。
这个示例中第一行是赋值直接代入 1,第二行加上 7,这时 x 的值其实是 8,第三行减去 3,第四行再乘以 2,最后的计算结果就是 10。

全局变量
局部变量是暂时使用的变量,只能在方法和类等定义(在后面讲述)内部使用,之外变量就无效。与之相对,在程序任何地方都能引用的就是全局变量。全局变量可以在程序中任何地方使用,名称相同,就必然是同一个变量。
如下面的示例,以 $ 号开头的变量就作为全局变量使用。赋值方法和局部变量完全相同。
  1. $global
复制代码
虽然在任何地方都能引用,但使用全局变量不一定比局部变量好。全局变量十分强大,胡乱使用恐怕会使程序变得很难懂,而且因为它会一直存在,导致内存的浪费,部分新人就是因为过度使用它导致游戏卡机的。请在使用时注意


点评

http://bbs.66rpg.com/thread-202030-1-1.html  发表于 2011-8-17 21:15
这篇教程引用了很多F1呢,  发表于 2011-8-17 21:14
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1530
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

7
 楼主| 发表于 2011-7-30 10:34:51 | 只看该作者
本帖最后由 「旅」 于 2011-8-13 11:42 编辑


06.条件分歧(难度系数:★★☆☆ 容易)


满足特定的条件与否,之后的动作会根据其不同而改变就叫作条件分歧。

比较运算符
在具体地学习处理条件分歧的方法之前,要先记住条件构成中使用的运算符。
下面 6 个运算符称为比较运算符。使用这些运算符,和给予条件(数字和字符串)相比较,然后返回结果。
== 相等
!= 不相等
< 小于
> 大于
<= 小于或相等
>= 大于或相等
这里一定要注意的是,判断相等的运算符不是 = 而是 ==。像已学习过的那样,所谓 = 符号表示的不是比较而是代入。请注意不要弄混淆了。

真伪值
比较运算的运算结果就称为真伪值。有真(正确)、伪(错误)两种情况。
比较后是正确的话为 true 值,是错误的话就为 false 值。请试试看吧。
  1. p ("早安" == "早安")                # true
  2. p ("早安" == "晚安")                # false
  3. p (3 + 1 == 3 + 5)                  # false
  4. p (3 + 1 == 2 + 2)                  # true
  5. p 2 = 2                                  # 出错!
复制代码


逻辑运算符
下面 6 个运算符称为逻辑运算符
and
&& 「~,与,~」的意思
or
|| 「~,或,~」的意思
not
! 「非~」的意思
英文单词运算符和符号运算符,无论用哪个都是一样的。在预置脚本中运用的主要是英文单词。使用这些逻辑运算符就能指定更加复杂的条件。
  1. p (100 > 77 and 1 + 1 == 2)         # true
  2. p (100 > 77 && 1 + 1 == 2)          # true
复制代码
上述示例中,第一行和第二行表示的都是一个内容「100 大于 77 同时 1 + 1 等于 2」。不用说 100 是比 77 大的整数,1 + 1 答案也为 2,两个运算都成立。所以输出结果就为 true(真,正确)。

那么,看下一个算式吧。
  1. p (1 + 1 == 3 or 2 + 2 == 3)        # false
  2. p (1 + 1 == 3 || 2 + 2 == 3)        # false
复制代码
上述示例中,第一行和第二行表示的也都是一个内容「1 + 1 等于 3 或 2 + 2 等于 3」。很显然,1 + 1 不等于 3,2 + 2 也不等于 3,这样两个运算都不成立。比较运算符 or(||)是只要有一个运算成立就为 ture(真,正确),而这里两个运算全都不成立,所以输出结果就为 false(伪,错误)。

另外,not(!)和上面的例子稍微有些不同, not(!)表示的内容为后面的条件不成立。可以理解为颠倒 true 或 false 的运算符
  1. p (not true)                        # false
  2. p (! true)                          # false
复制代码
上述示例中的内容是「非 true」的意思,所以输出结果为 false。

if ~ elsif ~ else ~ end
if ~ end 语句是条件分歧的句法。这个和英文的 if(如果~就)意思相同,表示「如果 if 后面的条件成立的话,就运行下面的处理」的意思。下面示例中的 3~5行就是条件分歧。
  1. a = 20              # 为变量 a 赋值代入 20。

  2. if a >= 10          # 如果 a 为 10 以上的话,
  3.   p "big"       #   显示 big。
  4. end                 # 分歧结束。
复制代码
在条件不满足时也要进行处理的情况下就使用 else,条件不满足但指定另一个条件的情况下就使用 elsif。
  1. a = 7               # 为变量 a 赋值代入 7。

  2. if a >= 10          # 如果 a 为 10 以上的话,
  3.   p "big"       #   显示 big。
  4. elsif a >= 5        # 除此之外,如果 a 为 5 以上的话,
  5.   p "medium"    #   显示 medium。
  6. else                # 其他,
  7.   p "small"     #   显示 small。
  8. end                 # 分歧结束。
复制代码

unless ~ end

与 if 相反,在条件不满足时才进行某些处理的情况下使用 unless 语句
  1. a = 7               # 为变量 a 赋值代入 7。

  2. unless a >= 10      # 如果 a 不为 10 以上的话,
  3.   p "small"     #   显示 small。
  4. end                 # 分歧结束。
复制代码

case ~ end

在条件为特定的变量值进行分歧的情况下使用 case 语句会更方便。
  1. a = 0               # 为变量 a 赋值代入 0。

  2. case a              # 分歧开始。
  3. when 0              #  当 a 为 0 时,
  4.   p "零"        #   显示 零。
  5. when 1              #  当 a 为 1 时,
  6.   p "壹"        #   显示 壹。
  7. when 2              #  当 a 为 2 时,
  8.   p "贰"        #   显示 贰。
  9. end                 # 分歧结束。
复制代码
把第一行 a = 后面的 0 改为 1 和 2,然后再来看看分歧的结果吧。当 a 代入 1 时会显示“壹”,代入 2 时会显示“贰”。

条件运算符
使用符号 ? 和 : 也是运算符形式的条件分歧语句
  1. a = 3

  2. p (a >= 10 ? "big" : "small")   # => "small"
复制代码
这个示例的意思是,变量 a 的值在 10 以上的话就显示 "big", 9 以下的话就显示 "small"。条件运算符的语法是「条件 ? 真时的值 : 伪时的值」。上述的条件是 a >= 10,真时的值为 "big",伪时的值为 "small",会根据条件是否满足来决定使用 ? 或 : 的值。

当然使用 if 语句也能完成同样的事情。
  1. a = 3

  2. if a >= 10
  3.   p "big"
  4. else
  5.   p "small"
  6. end
复制代码
使用 if 语句的语法会像上面写的那样,但是使用条件运算符语句会更加简洁。该语句在当前的脚本中也使用得很多,所以最好事先记住。




附加内容:

最后讲一个脚本入门没讲但经常会看到的一个格式,
  1. p 2 if 1 + 1 == 2
复制代码
就是这个,它和下面是一样的:
  1. if 1 + 1 == 2
  2.   p 2
  3. end
复制代码
所以如果条件分歧里的内容只有一行,可以用前一种方法,会方便很多、简洁很多。同时unless也可以这样,
  1. p 2 unless 1 + 1 != 2
复制代码
好了这节课就到这里~

点评

其实差不多,只需要理解大概意思就行了~~  发表于 2011-8-17 22:17
true,false应该翻译成真伪而不是正确,错误。  发表于 2011-8-17 21:16
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1530
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

8
 楼主| 发表于 2011-7-30 10:34:57 | 只看该作者
本帖最后由 「旅」 于 2011-8-2 10:55 编辑


07.字符串(难度系数:★☆☆☆☆ 超容易)


一般来说,由文字连接起来的数据就称为字符串

print
双引号 " " 或单引号 '' 中间的部分,就作为字符串数据使用。
  1. p "RPG Maker XP"                    # "RPG Maker XP"
  2. p 'RPG Maker XP'                    # "RPG Maker XP"
复制代码

p 命令会导致双引号和字符串一起输出,所以可以使用 print 命令代替。
  1. print "RPG Maker XP"                # RPG Maker XP
复制代码

这次双引号就没有了。print 和 p 相似,但它只显示字符串本身

为变量赋值
和数字一样,字符串也能代入变量为该变量赋值
  1. a = "RPG Maker XP"
  2. print a                         # RPG Maker XP
复制代码
字符串也能作加法,字符串加上字符串,就会得到一个连接起来的字符串为答案。
  1. a = "我的 "
  2. b = "RPG Maker XP"
  3. print a + b                     # 我的 RPG Maker XP
复制代码
还可以作乘法,字符串乘以一个整数,就会得到该整数次重复的字符串为答案。
  1. a = "RPG Maker XP"
  2. print a * 2                     # RPG Maker XPRPG Maker XP
复制代码

控制码
这个东西在原来的脚本入门里有讲,但其实学了也没有太大的意义,所以这里就不讲了,没看过的同学可以去脚本入门稍微过目一下,不过不用太在意就是了。

内嵌表达式
在字符串里面,可以用 #{变量名} 的形式把变量的内容嵌入在字符串当中
  1. game = "RPG"
  2. print "#{game} Maker XP"         # RPG Maker XP
复制代码
上述示例里,第一行是为 game 变量赋值代入字符串"RPG"。第二行里面,其中 #{game} 是表示直接嵌入变量 game 的值字符串"RPG",和后面的" Maker XP"组合在一起,从而输出一个新的字符串。
这和以下的脚本一样,不过上面的用法就灵活多了。
  1. game = "RPG"
  2. print game + " Maker XP"  # RPG Maker XP
复制代码
唯一要注意的一点,内镶表达式不可以用在 单引号 ' '中,会无效的
  1. game = "RPG"
  2. print '#{game} Maker XP'         # #{game} Maker XP
复制代码

点评

太强大了 喜欢  发表于 2012-4-22 17:08
捏,常量后面才讲~~~  发表于 2011-8-17 22:16
#{变量名},其实常量也可以……  发表于 2011-8-17 21:17
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1530
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

9
 楼主| 发表于 2011-7-30 10:35:05 | 只看该作者
本帖最后由 「旅」 于 2011-8-13 11:52 编辑


08.循环(难度系数:★★★☆☆ 较难)


重复进行特定的处理就要使用循环。

while ~ end
在满足特定条件期间进行循环的情况下使用 while 语句
  1. a = 0               # 为变量 a 赋值代入 0。
  2. i = 1               # 为变量 i 赋值代入 1。

  3. while i <= 5        # 当变量 i 为 5 以下时循环开始(重复以下处理),
  4.   a += i            #   变量 a 加上 i 的值。
  5.   i += 1            #   变量 i 的值增加 1。
  6. end                 # 循环结束。

  7. p a                 # 显示计算结果。
复制代码
这个示例是求从 1 到 5 这五个数字总和的程序。在这里,变量 i 是用来产生从 1 到 5 这五个数字用的。
那么,这个程序最重要的是 i += 1 这行。如果没有这行 i 的值永远为 1,而 i <= 5 的条件也会一直满足,就会成为无限循环。因此,这里每次都向i加上1使得 i 的值依次变为 2、3、4、5、6 从而使得循环结束。

变量 a 和 i 的数值变化,如下表所示。
循环a 的值i 的值
初始状态 0 1
1 次后 1 2
2 次后 3 3
3 次后 6 4
4 次后 10 5
5 次后 15 6
循环5次后,在a的数值里面实际上进行了1+2+3+4+5的计算,i的值也超过5而执行end使得循环结束。
然后以 p 命令显示最终 a 的值,就会显示出答案 15。

变化范围
数值的范围,例如类似于「从 1 到 5」这样的概念就称为变化范围
  1. 1..5
复制代码
上述示例表示「从 1 到 5」的意思。使用 .. 运算符,就能作成一个变化范围。
而且,使用 ... 运算符也可以。
  1. 1...5
复制代码
但... 和 .. 不同的是「不含最后一个数」。所以,1...5这种情况实际上表示的是「从 1 到 4」的意思。

for ~ in ~ end
在变化范围表示的范围内循环的情况下使用 for 语句
  1. a = 0               # 为变量 a 赋值代入 0。

  2. for i in 1..5       # 变量 i 的值按从 1 到 5 的范围变化,
  3.   a += i            #   变量 a 加上 i 的值。
  4. end                 # 循环结束。
  5. p a                 # 显示计算结果。
复制代码
这个示例和使用 while 语句的示例完全相同,也是求从 1 到 5 这五个数字总和的程序,但比使用 while 的情况更加简洁。在 while 中变量 i 加上 1 表示的是从 1 到 5 的范围,然而在 for 中是用变量 i 按「从 1 到 5 的范围」的顺序代入来表示。表面看起来不同,但实际上进行的是意思完全相同的处理。

Ruby 中有许多语法,循环中也存在各种各样不同的方法。在不同语法使用中,请按照这个示例提示的「让编写更简便」的方式来思考。实际上,如果理解了条件分歧和循环的话,就能进行大部分逻辑运算了。

loop do ~ end
未指定循环次数和条件的情况下,也就是想进行无限循环时使用 loop 语句。这个与 while 和 for 语句的性质稍微有所不同,一般情况下没有必要注意。
  1. i = 0               # 为变量 i 赋值代入 0。

  2. loop do             # 循环开始。
  3.   i += 1            #   变量 i 的值增加 1。
  4.   p i               #   显示变量 i 的值。
  5. end                 # 循环结束。
复制代码
这个示例是「一边把 i 的值加上 1,一边显示 i 的值」的程序,没有结束条件。一旦运行的话就会连续显示 1、2、3……。如果这种对话框不断显示的话,就算要结束程序也是不可能的,只能按着 F12 键不放强行关闭对话框,并点击右上方的结束按钮关闭程序。

break
想中途中断循环就要使用 break 命令
  1. i = 0               # 为变量 i 赋值代入 0。

  2. loop do             # 循环开始。
  3.   i += 1            #   变量 i 的值增加 1。
  4.   if i == 5         #   如果变量 i 的值为 5 的话,
  5.     break           #     中断循环。
  6.   end               #   条件分歧结束。
  7.   p i               #   显示变量 i 的值。
  8. end                 # 循环结束。
复制代码
上述示例在程序中加上了「i 等于 5 的就中断循环」的条件。运行该程序,显示 1、2、3、4 就结束了。
break 即使在 while 和 for 等其它方法作成的循环中也能使用。

next
在不中断循环的情况下,跳过本次循环而进入下一次循环时使用 next 命令
  1. for i in 1..5       # 变量 i 的值按从 1 到 5 的范围变化,
  2.   if i == 3         #   如果变量 i 的值为 3 的话,
  3.     next            #     进入下一次循环。
  4.   end               #   条件分歧结束。
  5.   p i               #   显示变量 i 的值。
  6. end                 # 循环结束。
复制代码
运行这个示例,会显示 1、2、4、5。

回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1530
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

10
 楼主| 发表于 2011-7-30 10:35:14 | 只看该作者
本帖最后由 「旅」 于 2011-8-13 21:56 编辑


扩展篇37.另一种注释(难度系数:★☆☆☆☆ 超容易)


我们在最开始学习脚本时就学习过注释的方法,还有就是"注释后面的内容不会影响正常脚本的运行"。今天我们来继续学习另一种注释的方法。

如果有试过在脚本前写注释的同学应该都有感觉,就是用#那样做实在是太麻烦了。例如:
  1. # 大家好我叫做懒散王
  2. # 今天我写了一个脚本
  3. # 这个脚本有很强大的功能
  4. # 例如说他可以OXXOXX
  5. # 很厉害吧
  6. # 想要使用他的话你可以OXXOXX
  7. # 这样就可以了
复制代码
(不要吐槽范例>.<)例如这样的一个注释,又因为作者废话很多,这种写法就麻烦很多了。
所以可以用这种写法,超方便的嘎嘎。
  1. =begin
  2. 大家好我叫做懒散王
  3. 今天我写了一个脚本
  4. 这个脚本有很强大的功能
  5. 例如说他可以OXXOXX
  6. 很厉害吧
  7. 想要使用他的话你可以OXXOXX
  8. 这样就可以了
  9. =end
复制代码
是不是很方便。只需要把注释内容放入 =begin 到 = end 的中间就行了。不过需要注意一点,=begin和=end前面都不可以有空格,不然会发生错误!
  1.   =begin
  2.   =end
  3. # 出错啦!
复制代码
好了教程就到这了。

点评

这货应该是块注释 =。=  发表于 2011-10-1 14:43
据说这货叫块注释= =  发表于 2011-8-17 21:19
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-21 19:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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