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

Project1

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

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

  [复制链接]

Lv3.寻梦者

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

开拓者

1
发表于 2012-9-30 21:43:40 | 显示全部楼层
需要人手帮忙么。。。

点评

需要的说0 0打打求帮助ZE~  发表于 2012-10-1 13:08
回复 支持 反对

使用道具 举报

Lv3.寻梦者

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

开拓者

2
发表于 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
星屑
1314
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

3
发表于 2012-10-13 19:23:15 | 显示全部楼层
本帖最后由 铅笔描绘的思念 于 2012-10-13 19:25 编辑

循环不怎么会。。。特别是迭代啊。。。。。。

由于ls说了把P弄回来的方法。。但是在控制台中。。。所以我提到可以推到Kernel来做到变成VX那样的。。。而这个Kernel是什么呢。。。我们看到在脚本里我们可以直接用msgbox来弹出提示。。。那我们的这个msgbox是什么呢。。。其实也是一种方法。。是是在系统预定义的一个类Kernel中定义的。。。所以我们这节来讲讲Kernel和Class, Module, Object之类的关系。。。
一、Kernel和Class, Module, Object的关系
关于这几个东西的关系我们来看几段代码。。。
RUBY 代码复制
  1. p Class.ancestors#Class, Module, Object, Kernel
  2. p Module.ancestors#Module, Object, Kernel
  3. p Object.ancestors#Object, Kernel
  4. p Kernel.ancestors#Kernel

RUBY 代码复制
  1. p Class.class#Class
  2. p Module.class#Class
  3. p Object.class#Class
  4. p Kernel.class#Module[/p]
由于懒我就使用p来代替msgbox了。。。。大家只需要像LS一样设置一样就好了。。。上面的代码。。英语好的不难理解ancestors和class的意思。。。我们知道Module是Class的父类.。。通过上面的代码可以看出Class, Module, Object 都是class,而Kernel是Module

因为Ruby里一切都是对象所以Object是RGSS中所有类的父类,Object混入了Kernel这个模块,所以Kernel中内建的核心函数就可以被RGSS中所有的类和对象访问。。。
2. Kernel
我们可以把Kernel理解为系统预定义的一些方法,我们可以在所有的对象上使用,使用时不需要使用类型作为前缀。。当然我们也可以加上Kernel。 比如
RUBY 代码复制
  1. Kernel.msgbox("Hello World!")
是一样的。。。。


各种球搞定循环什么的。。。。

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

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

开拓者

4
发表于 2012-10-15 21:26:45 | 显示全部楼层

RE: 【活动】【VA】RGSS 3 入门教程大家写(更新12/10/14)

本帖最后由 铅笔描绘的思念 于 2012-10-15 21:29 编辑

吾辈最近无聊至极。。。。有机会碰电脑就来写教程好了。。。预定一下类和模块的教程。。。


函数  这里说的函数不是我们初二学的数学函数f(x)之类的东西。。。那货是数学定义。。咱这是计算机语言的。。数字的计算和字符串的显示等等。。。能够进行某种处理的被命名的功能称为函数。。。我们在RM里也可以称之为方法。。。

函数的使用  我们一直在使用的 msgbox 还有msgbox_p之类的。。。其实也是函数的一种。。。而我们也知道该怎么来使用它。。比如

msgbox “Hello world!”

之类的。。。当然也可以msgbox(“。。。。。”)之类的。。。效果一样。。处理msgbox以外还有许多VA已定义的方法(函数:以下就称方法好了。。。习惯了。。。 )比如rand它是生成随机数的一个方法。。
msgbox rand(100)

这个实例是显示出(0~99)中的任意一个随机数字的程序。。rand方法是从 0 到指定整数这个范围中随机选取一个数字并返回这个数的方法。。。。。这个指定整数也称之为参数。。。参数通常在方法名称后面的括号 () 内指定。。。
像msgbox和rand那样的方法已被系统预定义,所以称为系统函数(固有名词什么的。。。系统方法其实也可以。。)。

函数的定义函数的定义是从 def 开始到 end 结束。。。。具体的语法如下所示。。。。
def 函数的名称  
   函数的内容
end

函数名称的命名方法,基本上和变量有相同的限制。也能在开头使用大写字母。。但不推荐。。
比如下面的一个方法
def dice   
   return rand(6) + 1
end
msgbox dice              # 等同于 msgbox rand(6) + 1

这样一个方法是在一个新脚本中定义的。。所以不是一个类方法(关于类的教程下节。。。)

参数
  含有参数的方法,如下面示例那样定义。
RUBY 代码复制
  1. def abs(x)
  2. if x < 0          # 如果 x 小于 0 的话,
  3.      return -x       #   结束函数,返回值 -x。
  4. else              # 除此之外,
  5.     return x        #   结束函数,返回值 x。
  6.   end               # 分歧结束。
  7. end
  8. msgbox abs(-3)           # => 3

这个是返回指定参数数值绝对值的函数。这里指定的数值暂时定义为 x。这个 x 称为临时参数。。。也称形式参数简称形参。。又称虚拟变量。。就是不占用空间的(泥垢。。)。。  在函数内部使用有条件分歧,x 小于 0 时(为负数)返回值 -x,除此之外(为 0 以上的整数)返回值 x。最后一行是指定参数为 -3 的实际情况下使用函数,其结果用 msgbox 函数输出。与 x 为临时参数相比,这儿的 -3 称为实参数也称实际参数简称实参。。。。其实就是变量一只。。。

  含有多个参数的函数也能定义。。。多个参数要用逗号分开来指定。。。
默认参数

定义方法时就已指定且使用时可以省略的参数称为默认参数。默认参数是在临时参数后面加上符号 = 来指定的


比如上面的rand(6)+1的方法
def dice(n=6)
   return rand(n) + 1
end
msgbox dice              # 等同于 msgbox rand(6) + 1

上述示例中未指定参数,使用方法时会返回一个 1~6 的随机数字,然而指定参数的话,就能更改随机数字的最大值。比如,使用 dice(8) 就会返回一个 1~8 的随机数字。
函数的重定义下面的示例中,hello 名称的函数被重复定义了 2 回。
RUBY 代码复制
  1. def hello
  2. return "您好"
  3. end
  4. def hello
  5. return "晚安"
  6. end
  7. msgbox hello         # => "晚安"

在 Ruby 中,函数名称重复的话不会出现错误。这种情况下系统会认定后面定义的函数有效,而先前的定义就无效了。
纯引自重额。。。其实改了一点。。。来源VX  F1


其实还有过程式方法   对象方法之类的。。。= = ||  果然方法什么的不是想萝莉(洛洛?)那样身轻体弱易推倒的。。。。。。不过剩下的都不是重点了。。。我|(·_·) |·_·) |_·) |·) | )闪先。。。

评分

参与人数 3星屑 +90 梦石 +2 收起 理由
satgo1546 + 2 补节操XD
harinlen + 90 节操在此
Mic_洛洛 -2 + 2 咳咳~更新奖励+吐槽版主扣节操!.

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

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

开拓者

5
发表于 2012-10-16 21:59:56 | 显示全部楼层

说好的上的话就更。。。。话说洛洛的经验-1真的难以吐槽。。。。喵的。。。咱以后得想H酱扯到54一样扯到你么。。。。



  PS:话说一个字的标题就是看着不爽啊。。。。
  一、类的定义、类的实例方法
  1. class Person
  2.   def say
  3.     msgbox “Hello!”
  4.   end
  5. end
  6. luoluo = Person.new
  7. luoluo.say
复制代码

我们看到va默认脚本中(除了Vocab之类的)都有class XXXX之类的。。。而这个class就是声明类的关键字def就是创建了一个方法。。。下面的
  1. luoluo = Person.new
复制代码
就是把Person类给实例化了。。则luoluo(洛洛)就是实例化的对象了。。。。 = = ||(为了1经验还是要报仇的。。)然后是
  1. luoluo.say
复制代码

就是调用了luoluo这个实例对象的实例方法。。。(话说这段真的是有多讨打啊。。。)
定义一个类的语法
class ClassName
  def method_name(variables)
    #some code
  end
  end

二、特定对象的方法
VA里,我们可以为一个对象单独定义方法。。。比如
  1. class Person
  2.   def say
  3.     msgbox “Hello!”
  4.   end
  5. end
  6. luoluo = Person.new
  7. def luoluo.bye
  8. msgbox "bye"
  9. end
  10. luoluo.say #Hello!
  11. luoluo.bye #bye
复制代码
三、重定义方法    方法的重定义一模一样。。后面的定义会覆盖前面的定义。。不讲了。。。
   众:你太懒了!!
四、重新打开类
  Ruby里我们可以再打开一个类,向这类添加方法。。。我们一般不要拆开类的定义,因为那样不好理解,拆开类的一个原因是将它们分散到多个文件里。。
比如
  1. class Person
  2.   def say
  3.     msgbox “Hello!”
  4.   end
  5. end
  6. class Person
  7.   def bye
  8.     msgbox “bye”
  9.   end
  10. end
  11. luoluo = Person.new
  12. luoluo.say #Hello!
  13. luoluo.bye #bye
复制代码
。。稍微有点多。。。。。五、实例变量
好了。。下面都是是重点了。。。。。
实例变量主要是用来记录单个对象的状态。RM实例变量有以下特点
  • 以@开头
  • 只对单个对象可见
  • 不管在类的任何地方定义,在别的地方使用都是同一个
   
  1. class Person
  2. def name
  3.   @name = “54酱”
  4. end
  5. def say
  6.   msgbox “#{@name}无节操”
  7. end
  8. end
  9. person = Person.new
  10. person.name
  11. person.say#54酱无节操
复制代码


六、初始化对象状态
每当实例化一个新对象是,就会寻找initialize方法,然后执行该方法。。。。我们可以用initialize方法将预设值加入所有实例变数。。就不需要在其他地方定义再使用了。。
  1. class Person
  2.   def initialize(name, age)
  3.     @name = name
  4.     @age = age
  5.   end
  6.   def age
  7.    @age
  8.   end
  9.   def name
  10.     @name
  11. end
  12. end
  13. luoluo = Person.new("洛洛", 20)
  14. msgbox luoluo.age #20
  15. msgbox luoluo.name #洛洛
复制代码

当然我们可以不需要给initialize方法参数直接执行一些语句也是可以的。。。
。。。喵的。。。给跪了。。。好多啊。。。。3000+了。。。。。读写属性之类的好多啊还有。。。。。。。。。。。。。明天补完好了。。。趴了。。

点评

这段完全木看懂。。囧。。  发表于 2013-4-13 21:06
@zhangchi5 attr_reader不就是我说的读写属性么。。。还有我说没写完嘛。。@神秘来客3 这是中文输入法没切成半角罢了。。不用这么钻牛角尖吧。。  发表于 2013-2-19 22:13
……请不要把""写成“”,OK?  发表于 2013-2-13 21:36
父类与子类的定义呢!!!很重要啊。。。还有public变量的定义 attr_reader  发表于 2013-2-13 18:01

评分

参与人数 3星屑 +22 梦石 +2 收起 理由
574656549 + 20 end未对应诺|、.、|
Mic_洛洛 + 2 更新奖励!
satgo1546 + 2 1经验我不是补回来了= =

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-3 15:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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