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

Project1

 找回密码
 注册会员
搜索
楼主: harinlen
打印 上一主题 下一主题

[版务] 【活动】【VA】RGSS 3 入门教程大家写(更新13/02/15)

  [复制链接]

Lv3.寻梦者

梦石
0
星屑
1248
在线时间
409 小时
注册时间
2012-8-7
帖子
1536
31
 楼主| 发表于 2012-10-1 13:22:40 | 只看该作者

运算

本帖最后由 harinlen 于 2012-10-14 13:09 编辑

那么,接下来就是,节操的加减了。(变量好吧!)上次说到了将a和b赋值为1,那么如何计算两个数字之和?
求和的运算是个54都知道,就是用符号+,例如我们让变量c是a和b的和这句话就可以写成:
  1. c=a+b
复制代码
这句话的意思是:将a和b的和赋值给c。这时我们输出c就可以得到2了。
上述的运算就是求和运算,同理,我们还存在着下面这些运算:
四则运算
加 c=a+b
减 c=a-b
乘 c=a*b
除 c=a/b

需要说明的是,对于除法,如果执行5/2的话,计算出来的结果会是2。RGSS3会自动省略后面的小数。那么,当我们需要小数的时候怎么写呢?这时候只要随便写一个小数即可。例如:
  1. c=5/2 #计算结果是2
  2. c=5.0/2 #计算结果是2.5
  3. c=5/2.0 #计算结果是2.5
  4. c=1/8 #计算结果是0
  5. c=1.0/8 #计算结果是0.125
  6. c=1/8.00 #计算结果是0.125
复制代码
自运算(就是将等号后面的数直接作用在变量上)

以自加为例,下面这段代码:
  1. b=2
  2. c=1
  3. c+=b
  4. msgbox c
复制代码
执行结果是3。将b的数值与c的数值求和再赋值给c。
自加 c+=a
自减 c-=a
自乘 c*=a
自除 c/=a

求余数

求余数的话,一般人想到的方法应该是求出整数然后再去减,RGSS3内就有了直接的求余数运算符%:
求余数 c=a%b
自求余 c%=a

乘方
乘方这个东西在RGSS3里可不是用什么上标下标表示的,而是用**这个符号,例如:
  1. c=3**2
  2. msgbox c
复制代码
答案将输出9。(⑨?!)

字符串的运算

请移步这里

点评

3**2=3的二次方=3*3=9???  发表于 2013-2-13 16:39
3^3这个不是表示3的3次么,就是等于3乘3在乘3 。2次是这样滴:3^2  发表于 2012-12-25 03:48
类似与自加/自减的++/--是不是没了?!之前在VX的脚本里试过,好像不行..  发表于 2012-10-2 15:47
什么?=9?3^3=27才对吧(我用irb测试过了的确是27  发表于 2012-10-1 13:59

评分

参与人数 2星屑 +12 梦石 +2 收起 理由
swbxhlh + 12 总的来说,多谢解惑了。乘方的问题困扰我好.
Mic_洛洛 + 2 更新奖励!

查看全部评分



回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
32
发表于 2012-10-1 14:06:28 | 只看该作者
harinlen 发表于 2012-10-1 13:22
那么,接下来就是,节操的加减了。(变量好吧!)上次说到了将a和b赋值为1,那么如何计算两个数字之和?
求 ...
补充
例如23
  1. msgbox 2 ** 3
复制代码
2的0.5次方。
  1. msgbox 4 ** 0.5      # 这是什么东西?
复制代码
0.5次方就是平方根!
那么……
  1. msgbox 27 ** (1.0 / 3.0)      # 这又是什么东西?
复制代码
3次方根。但是好像结果会不准确——
  1. irb(main):001:0> 27 ** (1.0 / 3.0)
  2. => 3.0
复制代码
好吧这是准确的……
下面这个例子继续准确着——
  1. irb(main):002:0> 88 ** (1.0 / 3.0)
  2. => 4.44796018113863
  3. irb(main):003:0> a = 4.44796018113863
  4. => 4.44796018113863
  5. irb(main):004:0> a ** 3
  6. => 87.9999999999999
复制代码

点评

我说一句,由于计算机内的数据都是用2进制是表示的,因此没有准确的0.1等数……所以才有那么多小数…………NOIP基本知识  发表于 2013-2-13 18:12
小学生,平方只是略懂(只懂整数平方),略过。。。  发表于 2013-2-13 16:49
↓ruby的即使解释器……  发表于 2012-10-2 15:51
亲,弱弱地问下,irb是什么...  发表于 2012-10-2 15:49
抱歉,私激动了……本来想写3^2=9结果打成了3^3……  发表于 2012-10-1 14:37
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
33
发表于 2012-10-1 14:23:39 | 只看该作者
本帖最后由 satgo1546 于 2012-10-4 14:03 编辑

接下来应该讲注释了吧,我顺便讲掉吧(?

注释
注释就是防止自己写的脚本时间长了忘记脚本这一段是什么原理/方便给别人看用的。
在RGSS3中,注释的开始符号是“#”。即输入“#”之后这一行“#”后面的内容都是注释,前半部分依然是ruby代码。
【例子】
  1. msgbox "Hello,world!" # 输出"Hello,world!"这个字符串
复制代码
注释中的内容不会被显示出来或者被作为ruby代码执行。
如果某语句需要临时停止使用也可使用注释。
【例子】
  1. a = 1
  2. #a += 1
  3. msgbox "a的值是#{a}"
复制代码
其中“#a += 1”这行因为最开始有一个“#”注释符,所以这整行都不会执行。
因此会输出“a的值是1”而不是“a的值是2”。

不过这里的注释语句不需要亲自动手,VA已经帮你调好——
【例子】

↑从一开始到按下Ctrl+Q之后
VA的脚本编辑器有这个好玩的功能——简单地用特殊的一句“#~ ”注释掉语句。
这个功能叫做批量注释
既然叫批量注释,那么就可以批量地操作。
【例子】
  1. a = 1
  2. a /= 17.5
  3. a = (a * 100).floor
  4. msgbox a
复制代码
Ctrl+A全选,然后Ctrl+Q注释之后:
  1. #~ a = 1
  2. #~ a /= 17.5
  3. #~ a = (a * 100).floor
  4. #~ msgbox a
复制代码
这就是一个VA提供给我们的非常方便的功能。(我在说什么?
内嵌文档 [2012.10.04更新内容]
=begin=end包含的内容,RGSS3解释器会把它作为内嵌文档处理,即和普通注释一样忽略。
【例子】

  1. =begin
  2. 这里的代码不会被执行。
  3. 内嵌文档可以是多行内容。
  4. =end
复制代码
可以看到,内嵌文档时可以多行的。
一般我们使用内嵌文档做脚本的使用说明之类的会很方便。


这节到此结束。

点评

又学到了一招  发表于 2019-2-23 13:49
感谢大大啊~  发表于 2012-10-1 14:36

评分

参与人数 2星屑 +7 梦石 +2 收起 理由
664299301 + 7 懂了
Mic_洛洛 + 2 更新奖励!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
34
发表于 2012-10-2 17:09:39 | 只看该作者
继续凑热闹= =

奇妙的字符串运算
相信大家已经非常期待奇妙的字符串了吧~
我们在讲【msgbox函数与字符串】的时候,已经讲到了字符串这个概念了。
现在就是讲字符串的运算的时间了~变量不只是能代入数值,像字符串这些乱七八糟的东西都能代入的。
【例子】
  1. a = "Hello,world!" # 将“Hello,world!”这个字符串代入a变量中
  2. b = "a\nb\nc\nd"   # 将“a
  3.                    #     b
  4.                    #     c
  5.                    #     d”这个多行字符串代入b变量中
  6. c = "\x41\x42\x43" # 将“ABC”这个字符串代入c变量中
  7.                    # 提示:字符串中\x??这个转义字符是指:
  8.                    #       把??作为16进制数字,转换为ASCII码=??的字符
  9. d = '\n\n\n'       # 将“\n\n\n”这个字符串代入d变量中
复制代码
msgbox之后的字符串都可以作为值进入变量中。
字符串的加法
接下来就是奇妙的运算——a+b!
  1. a = "AB"
  2. b = "CD"
  3. c = a + b # 加号出现了!
  4. msgbox c
复制代码
就在第三行,c=a+b这里:a+b!
a+b就是"AB"+"CD",相当于把AB这个字符串和CD这个字符串合并成一个ABCD这个字符串,所以VA会显示:

字符串的乘法
有了加法自然有乘法,在数学里a*7=a+a+a+a+a+a+a,那么RGSS3中也是这样——
【例子】
  1. a = "Test"
  2. b = a * 7 # 乘号出现了!
  3. msgbox b
复制代码
我们可以看到RGSS3把a * 7解释成了a + a + a + a + a + a + a,就是——

字符串嵌入
这个在【变量和常量】中的最后介绍过,我就不啰嗦了。
结束语:字符串就是这么奇妙。(这叫结束语么?

本节到此结束。

点评

↓多嘎里阿……= =  发表于 2012-10-2 17:13
额……私还真的把这个给忘记了啊……阿里嘎多的说!!  发表于 2012-10-2 17:12
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
69
在线时间
37 小时
注册时间
2010-10-24
帖子
25
35
发表于 2012-10-2 17:13:32 | 只看该作者
多谢楼主,受教了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1379
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

36
发表于 2012-10-5 22:23:09 | 只看该作者

控制结构

本帖最后由 铅笔描绘的思念 于 2012-10-7 11:51 编辑

咱也来凑个热闹把。。。。。话说把简单的东西都瓜分完了么。。。。。还有控制结构留下。。。

   一、比较语句      
比较语句就是大于 小于 大于等于 小于等于 等于之类的啦。。。记得还有不等于6 个运算符就是长这样的了:
==相等于
!=不相等于
<小于
>大于
<=小于等于
>=大于等于
这里一定要注意,判断相等的不是 = 而是 ==。在变量和常量这一节中H酱说过。。。。
在RGSS3中,赋值这个操作由等号来完成。等号的作用是将右侧的值给左边的变量。

所以等号(=)是赋值的语句啦。。。。一定要记住两个的差别。。。。
实例:
RUBY 代码复制
  1. x=10
  2. y=20
  3.  
  4. msgbox x>y #false
  5. msgbox x<y #true
  6. msgbox x==y #false
  7. msgbox x<=y #true
  8. msgbox x>=y #false
  9. msgbox x<=>y #-1   这里这种运算符是RGSS里没有提到的。。但RGSS3的ruby版本支持  这条实例的意思是如果x>y,return 1 ,x==y,return 0 , x<y return -1   不过这种没节操的运算符一般不会被用到。。。
  10. msgbox x!=y #true
我们看到。。除了那个没有节操的东西以外其他的p出的都是真假值。。这说明比较运算符主要用来判断,返回的是真假值。。。

  二、逻辑运算符   
逻辑运算符。。就是。。。eh。。eh。。。
在形式逻辑中,逻辑运算符或逻辑联结词把语句连接成更复杂的复杂语句。例如,假设有两个逻辑命题,分别是“正在下雨”和“我在屋里”,我们可以将它们组成复杂命题“正在下雨,并且我在屋里”或“没有正在下雨”或“如果正在下雨,那么我在屋里”。一个将两个语句组成的新的语句或命题叫做复合语句或复合命题。

看不懂没有什么大碍。。。。咱也看不懂。。。wiki上复制的。。。
rgss3上的逻辑运算符有一下6个。。。其实算是3个。。。英文运算符和符号运算符。。无论用哪个都是一样的。。但是英文运算符的优先级高于符号运算符(貌似?)
and
&&
「~,与,~」的意思
or
||
「~,或,~」的意思
not
!
「非~」的意思
VX帮助上的实例:
RUBY 代码复制
  1. p (100 > 77 and 1 + 1 == 2)         # => true
  2. p (100 > 77 && 1 + 1 == 2)          # => true
请无视p。。。。我们看到第一行和第二行表示的都是一个内容:100 大于 77 同时 1 + 1 等于 2  
而使用的方法却不一样  第一句使用的是英文运算符 第二句就是符号运算符。。这两个差别不大。。。
逻辑运算符的部分较简单就这样吧

三、条件控制语句
   条件控制就是事件中条件的条件分支。。。分为下面几个语句
   if  unless  case         if :如果    实例一只

  
RUBY 代码复制
  1. if age >= 12 then
  2. msgbox "adult fee\n"
  3. else
  4. msgbox "child fee\n"
  5. end
条件分支语法是这样的。。。
  if 表达式 [then]
    表达式 ...]
  elsif 表达式 [then]  
   表达式 ... ]...
  [else  
   表达式... ]
  end

若if的条件表达式为true时 执行then以下的表达式。。。若if的条件表达式为false时,将计算elsif的条件部分。。。elsif部分可以同时存在多个。。如果if部分所有的elsif部分都是false时  如果有else部分,则执行它的表达式题外:Ruby中只有false和nil代表伪值,其他都代表真。。0也是。。甚至空字符也是。。。

if 修饰句
例:msgbox "debug\n" if $DEBUG  
语法:表达式 if 表达式
当右边的条件表达式成立时,计算左边的表达式,并返回其结果。若条件不成立则返回nil。

话说好多。。。。。控制结构果然是最麻烦的了呢。。。。。。。好吧。。。未完待续。。。。@harinlen@satgo1546帮忙写完吧。。。@光的圆周率其实可以一起来哦。。。



点评

@神秘来客3 age没赋值的原因吧,在第一排补一个就OK了  发表于 2013-12-10 17:02
看完class后,我想到一个问题:怎么算绝对值与开方?因为我定义一个类叫(map)后想算距离,结果带根号就算了如果不用勾股直接把直角边加上呢(...  发表于 2013-4-8 17:42
想问的是"then"这几个字母是一定………… 如 if x==1 then *** end...另外我收归刚才的某句话。。。Sorry  发表于 2013-2-13 17:48
if age >= 12 then msgbox "adult fee\n" else msgbox "child fee\n" end 同一行用了then就不要end了!!! 都没我初一的小朋友神奇  发表于 2013-2-13 17:45
x<=>y 这个明显会用到。 举例:ex=10 ey=10 x=0 y=0 x=x+x<=>ex y=y+y<=>y 这样x,y就可以一步一步将x,y引导到ex,ey  发表于 2013-2-13 17:44

评分

参与人数 2星屑 +60 梦石 +2 收起 理由
Mic_洛洛 + 2 更新奖励!
harinlen + 60 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1248
在线时间
409 小时
注册时间
2012-8-7
帖子
1536
37
 楼主| 发表于 2012-10-5 22:35:29 | 只看该作者
本帖最后由 harinlen 于 2012-10-6 22:01 编辑

逻辑混合运算

于是乎@铅笔描绘的思念SAMA已经讲过了逻辑判断符,那么,这些运算符的结果和具体的运算方式如何呢?
每一个真或假之间的运算都必须用和、或来连接,非的话放在句首,且只对一个值进行操作。例如:
  1. msgbox !true && true #结果:false
复制代码
运算过程:!true的结果是false,false&&true的结果是false。
具体运算过程我们可以这么考虑:和(&&、and)运算是个超级严格的老师,要求所有参与运算的东西必须是真,才能通过它的魔爪。即结果是真。
或(||、or)运算就是个⑨了,只要有一个参与运算的东西是真,那么,它算出的结果就是真。
非(!、not)运算就是个无赖,本来是真的能直接变成假的,本来是假的能直接变成真的。(紫妈?!)
于是就有了如下的运算:
  1. msgbox (true && true) || false #结果:true。真
  2. msgbox (true || true) && false #结果:false。假
复制代码
if语句的其他形式

有时候除了这种常见的if,我们还会遇到这种样式的写法:
  1. a=3 if jiecao == true
复制代码
这句话的意思是:如果变量节操是真的的话,那么就把3赋值给a。
而且,在if语句中,“==true”是可以省略的,也就是说,上面这句话可以写成:
  1. a=3 if jiecao
复制代码
这样就能解释非存在的意义了:如果我们想当一个值为负的时候,执行某一句话,相比于:
  1. a=3 if meiyoujiecao == false
复制代码
来说,我们可以更加简单的写成
  1. a=3 if !meiyoujiecao
复制代码
这个是很类似的C、C++式写法(因为是?嘛。。私激动了,没有看明白括号里的?嘛。。那就算了。。)。更加简单明了。

点评

C++ 也是 if(…………)dosth  发表于 2013-2-13 17:49
没了花括号不习惯啊..  发表于 2012-10-7 13:16
于是下一节讲什么???标准类型???哪个很蛋疼啊。。。。  发表于 2012-10-7 11:26
其实看到三元运算符我也小小激动了一下!我喜欢这个三元运算符的说~因为很简洁!喵~>w<~  发表于 2012-10-6 22:06
抗议!C跟C++哪里是这样写的!QAQ执行语句哪里是在if前的啊!!!(虽然我看懂了...虽然我还挺喜欢RGSS这种的..XD)  发表于 2012-10-6 21:35

评分

参与人数 1梦石 +2 收起 理由
Mic_洛洛 + 2 更新奖励!

查看全部评分



回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
38
发表于 2012-10-6 19:43:08 | 只看该作者
这次有抄袭部分……

unless ~ end
前面的都是用if来做条件分歧的。当要做如下判断时,用unless判断更方便。
【例子】
  1. if !tiaojian
  2.   do_something
  3. end
复制代码
如果用unless这个语句来做的话,就是:
  1. unless tiaojian
  2.   do_something
  3. end
复制代码
简单地说,if就是“在...条件下执行...语句”,这也是为什么无需在if中的条件==true的原因。
而unless就是“当...条件不成立时执行...语句”。这里条件中==false必须不写,要不然就会反掉,变成if了。
要注意的是,unless中不可以有else!例如下面这个例子是会出错的:
  1. tiaojian = true
  2. unless tiaojian
  3.   msgbox "false"
  4. else # 不允许这样做
  5.   msgbox "true"
  6. end
复制代码
unless 修饰子
话说unless也可以像if一样作为修饰子使用的,比如:
  1. msgbox "修饰子测试" unless tiaojian
复制代码
这就不多说了,和这是一样的:
  1. msgbox "修饰子测试" if !tiaojian
复制代码

本节到此结束。
新的一节开始了!
话说现在才发现没有抄袭= =
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
39
发表于 2012-10-6 20:06:28 | 只看该作者
本帖最后由 satgo1546 于 2012-10-7 12:39 编辑

话说这次标题好长……

三联条件运算符
if的又一种变体(分身?),不过这次执行内容不是语句而是数字……
  1. a = (tiaojian ? 1 : 2)
复制代码
解释一下。
a =平常的赋值运算。
(左括号。
tiaojian这是条件。
?条件运算符,必须与“:”一起。
1真时值。
:条件运算符,必须与“?”一起。
2假时值。
)右括号。
这里的三联条件运算符就是a ? b : c中的?:
(a ? b : c)中,这个运算符是这样解释的:
当a是真时,返回b,否则返回c。

这样应该明白了吧。
[2012.10.07更新内容] 补充一点:a ? b : c中,?和:的两边必须有空格。
  1. a ? b : c # 三联条件运算符
  2. a?b:c # NoMethodError!
复制代码
截图如下:


运算符的优先级
运算符的优先级如下表(从高到低)*
[]、[]=数组下标、数组元素赋值
**次方运算
!、~、+、-取反、位取反、正、负
*、/、%乘、除、取余数
+、-加、减
>>、<<右移、左移
&位与
^、|位异或、位或
<=、<、>、>=小于等于、小于、大于、大于等于
<=>、==、===、
=~、!=、!~
无节操运算、相等、case语句中的判断、
正则表达式匹配、不等于、
&&逻辑与
||逻辑或
..、...Range对象(区间)表示用
a ? b : c三联条件运算符
=、%=、~=、/=、
*=、-=、+=、|=、
&=、>>=、<<=、
&&=、||=、**=
赋值、求余自运算、位取反自运算、加减乘除自运算、
位或自运算、位与自运算、左移右移自运算、
逻辑与自运算、逻辑或自运算、次方自运算
defined?是否定义
not取反
or、and逻辑或、逻辑与
if、unless、while、until如果真、如果假、当循环、直到循环修饰子
begin、endBlock表达式
——以上抄自《Ruby完全自学手册》

* 如果看不懂也没关系,其中的运算符要么就是以后会讲,要么……我也不懂

点评

所以,这里的a也可以是表达式吧..............  发表于 2013-2-14 21:18
c++用多了。。。不习惯空格吧。。。  发表于 2013-2-13 17:51
三楼讲一节……而且三人配合啊……~  发表于 2012-10-6 20:39

评分

参与人数 1梦石 +2 收起 理由
Mic_洛洛 + 2 更新奖励!

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

暗·迷路的寻梦

梦石
0
星屑
35
在线时间
613 小时
注册时间
2012-5-16
帖子
507
40
发表于 2012-10-6 21:47:40 | 只看该作者
本帖最后由 smile-zt 于 2012-10-6 22:34 编辑

终于更了!(好吧..我许久没来了...PIA~)
运算符貌似比之前学到的多了好多!还是之前没好好听课啊我!@Mic_洛洛 觉得呢!至少那些"~","&","..","|","=~"什么的..没看懂怎么用..
下面会讲到的吧!
另外,辛苦HAR君,satgo君和铅笔啦~人民感谢你们!
---------------------------------------------------------------
稍微补充一下疑惑...
@铅笔描绘的思念
你那么多个"]"是怎么回事!!
但还是想问下,那个[then]是一定要加的么!还是说可加可不加,还是说单个执行语句的情况下可以不加,多语句就要加?
多语句的情况下,不知道是怎么进行划分的..总觉得很容易混乱...
萌即是正义!哟嘿!
----------------------------------------------------------------------------------------

小喵的萌友团:              
----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-14 13:08

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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