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

Project1

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

[已发主站] 【脚本】通过别人的脚本教程,我学习的过程简化新手脚本

[复制链接]

Lv2.观梦者

梦石
0
星屑
295
在线时间
11 小时
注册时间
2008-4-17
帖子
2
跳转到指定楼层
1
发表于 2012-5-23 08:17:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 mgyth001 于 2012-5-23 08:36 编辑

我是一个脚本菜鸟,连窗体都不会制作,像菜单主界面都制作不了。不过,我之前学习过其他的东西,像魔兽争霸的JASS语言,以至于扩展的VJASS,甚至是ZINC都有设计。而在学校学习过网页编辑的脚本等等,所以理解RS的脚本内容和基础还是可以。因为我是一个菜鸟吧,所以跟大多数菜鸟一样,看着这些代码如何写如何写,即使有注释但也不太能快速理解。
因此,我在这里写下身为菜鸟,以其他半编程的基础,来如何理解并且制作脚本。
这里我先写下一些命令符和其他的东西。
  1. #基础的一些命令吧
  2. exit #结束程序
  3. p #文字提示,可以显示变量内容,可用"字符"方法,可以显示任何对象。
  4. print #文字提示,使用p的话会将""也显示出来,而使用这个就只显示内容。
  5. "" #字符串,p和print可以输出字符串内容,字符串可以相加,例如:"我的" + "RMXP!",则得到字符串"我的RMXP!"结果。
  6. #{变量} #变量嵌入,比如想要在字符串中添加变量内容,就必须使用#{}的方式来输入。例如:"我有#{金钱数量}人民币。"其中金钱数量是变量名,指向该变量的具体数值。例如该变量等于50,则得到结果"我有50人民币。"
  7. #注释
  8. % #求余数 例如:8 % 5 = 3 ; 8 % 6 = 2 ; 8 % 4 = 0
  9. ** #乘方 例如:2 ** 4 = 16 = 2 * 2 * 2 * 2
  10. $ #全局变量申明附加 需要申明全局变量需在变量名前增加 $ 符号,调用同样如此。
  11. == #相等符号
  12. != #不等符号
  13. < #小于符号
  14. > #大于符号
  15. <= #小于或等于符号
  16. >= #大于或等于符号
  17. true #值为真
  18. false #值为假
  19. and #逻辑运算符,「a == b and b == c」运行结果为a、b、c全部相同时判断为true,否则为 false 。
  20. && #and的第二种书写方式,「a == b && b == c」等于「a == b and b == c」。
  21. or #逻辑运算符,「a == b or b== c」运行结果为a、b相同或者b、c相同时判断为true,否则为false 。
  22. ||  #or的第二种书写方式,「a == b || b == c」等于 「a == b or b == c」。
  23. not #逻辑运算符,「not a == b」运行结果为a、b不同时则判断为true,否则为false
  24. !  #not 的第二种书写方式,「! a == b」等于「not a == b」。
  25. (? :) #条件分歧运算符,「a >= 10 ? b : c」,当a大于或等于10,得到b,否则得到c。
  26. p 变量 条件语法 #例如:「p "右边条件运行成立则输出结果!" if 1 + 1 == 2」,也可以使用unless语法。
  27. ... #范围概括,例如1...5,则等于从1——5之间的全部整数。
  28. break #中断循环的函数命令,在循环语句中添加break则可以立即中断运行到此的循环。
  29. next #跳过当前循环进入下个循环的命令,循环中添加next可以结束当前循环进入下次循环。
复制代码
以上的这些不用牢记,只需要理解意思就行了,这些是基础。


‘‘──mgyth001于2012-5-23 08:30补充以下内容

if ~ elsif ~ else ~ end 条件分歧语法,例如if等于「如果条件」,elsif等于「if不成立则又立新if」,else等于「if不成立」,end等于「结束语法」。
以下为if的书写方式:

  1. if   a >= 10  #当a值大于或等于10,运行以下内容
  2.  p "我很大!"
  3. elsif  a <= 5 #当a值小于或等于5,运行以下内容
  4.  p "我很小!"
  5. else   #以上条件都不成立,则运行以下内容
  6.  p "两者都不是!"
  7. end   # if语法结束。
复制代码
unless ~ end 否定语法,与if相反,当unless的判断结果为false时,才执行内容。
以下为unless的书写方式:

  1. unless  a == 10   #当a == 10的判断结果为false则运行以下内容,等同于not  a == 10得到的判断 。
  2.  p "注意哦,a值并不等于10!"
  3. end   # unless语法结束。
复制代码
case ~ when ~ end 特定分歧语法,另类的if条件判断,因为某些条件分歧使用if比较繁琐,而使用case则比较简单。case等于获得指定对象并且开始运算,when等于指定对象的判断,end则为结束该语法。
以下为case的书写方式:

  1. case a  # case分歧开始。
  2.  when 0 #当a等于0时则运行以下内容。
  3.   p "a值等于0哦!"
  4.  when 1 #当a值等于1时则运行以下内容。
  5.   p "a值等于1哦!"
  6.  when 2 #当a值等于2时则运行以下内容。
  7.   p "a值等于2哦!"
  8.  when 3 #当a值等于3时则运行以下内容。
  9.   p "a值等于3哦!"
  10. end  # case语法结束。
复制代码
while ~ end 条件循环语法,在满足特定条件的情况内,重复执行内容。
以下为while的书写方式:

  1. a = 0 #设置变量a的值为0 。
  2. while a <= 5 #如果a值小于或等于5时则运行以下内容。
  3.  a += 1 #为变量a的值递增1,也可以使用a += b,当然b的具体值需要自行设定。
  4. end  #while语法结束。
复制代码
以上语法相信有点逻辑思考就能明白,a的初始值为0,而下面的while循环则判断a的值是否小于或等于5,一旦成立则执行while内部的a += 1这条变量赋值递增,也就是每次次运行a 变量的值都增加整数1,根据该while循环语句的判断,这条循环需要运行6次才能结束。
注意:while语句的书写必须符合逻辑,如果条件判断和内容无法达到指定范围内而超出范围造成无限循环,最大可能引起程序卡死或者直接结束。
———————————————————————————————————
for ~ in ~ end 条件循环语法,跟while循环语法相同,通常比较最求细节的循环判断可能要使用while语法,而繁琐快速简单的循环判断,使用for循环也许更好.
以下为for的书写方式:

  1. a = 0 #设置变量a的值为0 。
  2. for  a  in  1...5 #变量a值按从1到5的范围变化。
  3.  p a  #输出变量a的值。
  4. end  #for语法结
复制代码
这条语法是另类是循环方式,通过范围变化来进行判断,只执行5次,当然也可以书写像while循环语句那样。
———————————————————————————————————
oop do ~ end 可以不指定条件进行无限循环的语法,基本等同于while循环和for循环,不同的是可以不指定条件,如果想要制作每次游戏进行时间等等功能,也许使用这个语法比较合适。
以下为loop的书写方式:

  1. a = 0 #设置变量a的值为0 。
  2. loop do #循环开始
  3.  a += 1  #为变量a的值递增1。
  4.  p a  #输出变量a的值。
  5. end  #loop语法结束
复制代码
注意,以上代码的涵义自行使用便能明白。这种无限循环最好加入等待帧的函数命令。
=begin ~ =end 另类的注释方法,某些作者喜欢吐槽或者觉得使用#的话每句话前都要写,比较打断思路,那么使用该语法就可以避免重复书写#符号的问题。
以下为区域注释方法:

  1. =begin
  2. 大家好,在这范围内输入的所有内容都不会在程序中执行,不信的话你可以试试输出p命令来显示呀?
  3. p "俺还真不信!'
  4. 可以尝试哦!
  5. =end
复制代码
下面是重点了!!!!
def ~ end 函数的定义,想要制作各种独特的效果,那么def函数定义就绝对不能错过。当然,也不可能错过。如果只是玩玩原脚本的修改,也许各位不会自己定义新函数,也就是说只是修改原脚本固定函数内部的内容而已。
def函数的定义方法:


  1. def 函数名
  2.  函数内容
  3. end
复制代码
注意,以上只是定义方式,想要自己创造效果,就要结合以上学习的其他知识。相信大家通过直接在脚本里创造并且输入的方式,得到的结果是程序执行的瞬间就被运行了吧。而函数的定义,就可以避免程序运行时被执行,而只能通过调用才可以执行的方式。
我们来做一个比较简单的函数:

  1. def A
  2.  p "A"
  3. end
复制代码
以上函数,是执行p命令将"A"输出。但是这样写的话运行程序你会发现并没有显示出来。那么,我们需要调用该函数,也就是如下:

  1. def A
  2.  p "A"
  3. end
  4. A
复制代码
其中,最末行的A就是执行函数相同函数名的命令,此时再运行游戏试试?
好了,得到想要的结果,那么我们来制作更加复杂的函数。比如,我要制作一个相加的函数,但是不等于那种写了固定的1+1的函数,而是想要我们随意输出。
那么,方法如下:

  1. def AddInt(Number_One,Number_Two)
  2.  return Number_One + Number_Two
  3. end
复制代码
首先,注意函数名处的括号,这里是设定参数。参数相当于我要输入什么内容到这个函数里,而其中的One和Two就是代表我们输入的内容所代表的参数。值得注意的是,参数在函数内部相当于变量的应用,只不过不能修改参数只能读取。
注意第二个,return这个函数命令,这个命令的涵义是将得到的值返回到外部。比如,我在某处设定了该方法,但是只执行函数我们怎么得到结果呢?那么return就是将结果返回过来的命令,我们只需要使用变量来获得即可。
以下为方法:

  1. def AddInt(Number_One,Number_Two)
  2.  return Number_One + Number_Two
  3. end
  4. a = AddInt(1,2)
复制代码
其中,a当然是变量,而变量右边的AddInt则是调用同名函数,括号内的1,2则是我们要输入的值,这个值中间有个逗号,这是分别将两个值区分开来。其中,1值赋予参数Number_One,2值赋予参数Number_Two,而函数内部的运行结果则为,return 1 + 2,那么返回的值则等于3。那么,变量a = AddInt(1,2)就是a = 1 + 2得到的结果。
当然,以上只是简单的函数应用,也许各位同学以为,1+2直接写不就行了嘛。当然,这种简单的运算这样比较快速。不过,某些复杂的计算呢?
例如:

  1. a = 0
  2. b = 1
  3. c = 2
  4. d = 3
  5. while a <= 10
  6.  if  a == 0
  7.   a += b
  8.  elsif a > 0 and a <= 5
  9.   a += c
  10.  else
  11.   a += d
  12.  end
  13. end
  14. p a
复制代码
以上,这样写的话是不是很麻烦,而如果遇见相同计算方法呢?是不是要复制重写一遍?那么,函数的意义就在这里,将复杂的工作简单话,将繁琐的计算归简至调用即可得到答案。
例如以下:

  1. def Can(a,b,c)
  2.  i = 0
  3.  while i <= 10
  4.   if i == 0
  5.    i += a
  6.   elsif i > 0 and i <= 5
  7.    i += b
  8.   else
  9.    i += c
  10.   end
  11.  end
  12.  return i
  13. end
  14. a = Can(1,2,3)
  15. p a
复制代码
通过调用函数Can,代入参数1、2、3,得到的答案是不是跟之前写的那个计算结果一样?仔细看的话可以发现,其实函数内部就是将那种计算方式。而只不过的是,之前的那种方法只能当次计算,其他地方不能调用,必须重新书写一遍。而使用函数的方法,可以看见只需要通过调用Can就可以得到同样的计算方法,任何地方都可以使用。
……
目前俺也就学到这里,不过这只不过是花了一会时间边看别人的教程边记录自己的理解,将没用的废话和理念删掉,直接写出过程和涵义。至于其他的内容,目前正在学习,等学习完一个篇章,则来继续更新哈!
’’

点评

+10086  发表于 2012-5-23 12:12

评分

参与人数 1+6 收起 理由
Shy07 + 6 主站收录

查看全部评分

Lv1.梦旅人

梦石
0
星屑
65
在线时间
22 小时
注册时间
2006-8-25
帖子
3
2
发表于 2012-5-23 10:46:56 | 只看该作者
学习一下
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2013-2-1
帖子
108
3
发表于 2013-2-13 14:43:58 | 只看该作者
感谢楼主!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2013-2-1
帖子
108
4
发表于 2013-2-13 15:02:44 | 只看该作者
终于从不会脚本。。。。变成会一丁点了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
64
在线时间
294 小时
注册时间
2011-7-31
帖子
687
5
发表于 2013-2-13 15:13:22 | 只看该作者
好吧……仍然完全不会= =
如果繁华被摧毁,让我好好地睡.....
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2013-2-1
帖子
108
6
发表于 2013-2-13 15:24:45 | 只看该作者
def~end真的在原脚本用得灰常灰常频繁捏
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-15 23:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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