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

Project1

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

[论坛活动] 【RGSS3 入门教程大家写 第二弹】活动开始!

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1050
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

1
发表于 2014-6-21 21:47:41 | 显示全部楼层
本帖最后由 DeathKing 于 2014-6-21 22:13 编辑

1. Ruby和RGSS3一定要分开!!!讲Ruby的时候一定专心讲Ruby,不要跟RGSS3搅在一起,把Ruby打扎实了再继续RGSS3。我之前写URG3的时候,就想找个靠谱的人先写一份Ruby教程。

2. 讲Ruby的时候,只需要讲部分子集(尽量越少越好),够写个普通的RGSS脚本就行了。WIN32API之类的暂时不需要,像什么for和each的区别之类的,也不要过分纠结,给一个一般性的导向就行了。

3. 逻辑一定要清楚,整个流程是怎么回事,一定要交代清楚。RGSS3是一个框架,要理解它的工作流程。最好要制作一些示意图,帮助读者理解,但这个的前提是作者对问题本身有着很深刻的理解!

4. 一定要坚持……还要合理更新。想想URG3和RGSS3小探的报告,一拖就是三年,我真感觉有点对不起读者啊………………




后来看到有题……贴代码的话又会被认为是在装逼吧

第一题,简单来说的话用了函数式编程的高阶语义,reduce是所谓的归约。Ruby的Range类支持reduce感觉有点奇怪,最初我用.to_a让Range变为Array,结果还多花了“几个字符”。
A1.
RUBY 代码复制下载
  1. (1..100).reduce(&:*)


顺便说一下,这个问题你如果知道了原理,可以写成各种花样的,就是一些函数式编程爱好者(比如我)喜欢玩的把戏而已(注意这不是什么很本质的东西,只是高阶语义的抽象)。
RUBY 代码复制下载
  1. (1..100).reduce {|x, y| x * y}
  2. (1..100).reduce &->(i, j) {i * j}
  3.  
  4. (1..100).to_a.reduce(&:*)


一个自底向上计算的斐波那契数列,通常的解法是递归地求解。
RUBY 代码复制下载
  1. fib = [0, 1, 1]
  2. 3.upto 100 do |i|
  3.   fib[i] = fib[i - 1] + fib[i - 2]
  4. end


第三个,作弊吧……要是老老实实做,筛一遍还是可以的。
RUBY 代码复制下载
  1. require 'prime'
  2. Prime.first 100


第一题是函数式,第二题有动规的思想(就是所谓的做记忆,先解子问题),第三题就是个算法(我们偷用了Ruby的库)。

看着上面代码写得爽哈?其实对做游戏没多大帮助。

因为RGSS3就只需要你给几个变量赋值,实例化几个窗口啊,喂!

评分

参与人数 1星屑 +120 收起 理由
moy + 120 +65535

查看全部评分


See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1050
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

2
发表于 2014-6-22 09:07:36 | 显示全部楼层
本帖最后由 DeathKing 于 2014-6-22 09:09 编辑

无论是OOP还是FP,都是对于解决某一问题的思维建模。思维角度不一样,看问题的方面也不一样,自然解决问题的办法也不一样。

二者殊途同归,都是用于解决问题。OOP重在黑盒抽象,FP也有这个用途,不过更在乎“高阶语义”。像什么map、inject都是Ruby从FP那边抄来的(在SICP中,要求读者实现map、for-each、filter、reduce这几个高阶过程,实际上其它几个过程都可以通过reduce来实现。Ruby中的map、select、filter、inject、each也都是类似的可以由reduce来实现),它们都只是高阶语义而已,并不是什么很本质的东西。

Block正是Ruby从Lisp那里面抄坏的东西,Lisp中函数是一等公民,直接可以当做变量去传递。Ruby不行(Ruby里面Block、Proc、lambda还有方法对象等等,概念很混乱),需要用一些魔法,比如传递代表方法的符号(比如你上面的:*)等等。这是因为Matz想让Block“看起来像控制结构”,结果反而让问题变得更糟。

下面就给出了一个对表做map操作的实现,它用到的全是基本过程,而且你会发现它就是课普普通通的递归函数而已(没有写成尾递归调用或者CPS)

SCHEME 代码复制
  1. (define (map proc lst)
  2.   (if (null? lst)
  3.     '()
  4.     (cons (proc (car lst)) (map proc (cdr lst))))))


结论就是,像迭代器这种东西,不用讲得太细,让大家知道是这么回事,并且会使用就行了。迭代器本身的实现非常复杂而精细,仔细考察的话都足够写几篇Paper了。

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1050
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

3
发表于 2014-6-22 11:22:52 | 显示全部楼层
IamI 发表于 2014-6-22 10:01
不需要。
写一个Scene一个Window,只要知道class、Start、Terminate是一个固定格式,$data_*,$game_* 是什 ...

我反而觉得在Ruby里面使用for反而应该被暴扁啊!而且for还是each等迭代方法的语法糖……像for这种东西,还在外层环境引入了一个新的变量,用迭代器的话,直接就在闭包里,安全无毒。

reduce、map、select之类的语义明显比for强啊!

Ruby Style Guide: https://github.com/bbatsov/ruby-style-guide

Never use for, unless you know exactly why. Most of the time iterators should be used instead. for is implemented in terms of each (so you're adding a level of indirection), but with a twist - for doesn't introduce a new scope (unlike each) and variables defined in its block will be visible outside it.


反正都不是什么很本质上的东西,工程上的实践啦~

点评

Ruby Style Guide 似乎在 Ruby China 上有不完全版来着?总之感谢这东西  发表于 2014-6-22 11:26

评分

参与人数 2星屑 +145 收起 理由
余烬之中 + 100 同意 | 头像好评
taroxd + 45 我很赞同

查看全部评分


See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-6 01:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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