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

Project1

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

[胡扯] 玩游戏学脚本——rubywarrior

[复制链接]

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

跳转到指定楼层
1
发表于 2014-7-29 19:08:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 taroxd 于 2014-7-29 19:43 编辑

这款游戏@余烬之中 推荐过(在此),但他所推荐的并不是完整版。

完整版在这里:https://github.com/ryanb/ruby-warrior
欢迎 Ruby 爱好者玩耍。

无论你刚学Ruby,还是已经学了一段时间,这款游戏都适合你!

我第一次玩这款游戏是在某次期末考试前无聊的时候,同学推荐给我这款游戏,然后我拿学校电脑玩的网页版(即余烬之中的链接)
当时我连 symbol 都不知道是什么,但是依旧勉强过了 Beginner 难度。代码写得极其丑陋不解释……

第二次是之后想要重温,就下载了 gem 版(即完整版)。这一次把游戏通关了,代码也写得漂亮了许多。
但是,有两关是依靠存在的敌人数目判断关卡数的,感觉有点作弊嫌疑呢……

然后是今天,突然脑洞大开想要把这款游戏移植RM(当然不一定会真的这么干),然后……忍不住又玩了一次……
这次的代码又比上次精简了许多许多……并且,战士的行动方式也不依赖于关卡了。

顺便附赠我 A 等级过 Intermediate Epic Mode 的代码(Ruby 2.0 环境):
RUBY 代码复制
  1. class Player
  2.   def play_turn(warrior)
  3.     @warrior = warrior
  4.     bind? || rest_before_detonation? || detonate? || rescue_ticking? ||
  5.     find_ticking? || attack? || rest? || rescue? || find_captive? ||
  6.     find_enemy? || walk_ahead!
  7.   end
  8.  
  9.   def bind?
  10.     dirs = enemy_dirs
  11.     dirs.size > 1 && (bind!(dirs[0]) || true)
  12.   end
  13.  
  14.   def rest_before_detonation?
  15.     health < 15 &&
  16.     enemy_dirs.empty? &&
  17.     directions.any? {|dir| look(dir).last(2).all?(&:enemy?) } &&
  18.     (rest! || true)
  19.   end
  20.  
  21.   def detonate?
  22.     return if listen.any? {|space| space.ticking? && distance_of(space) < 3 }
  23.     dir = directions.find {|d| look(d).first(2).all?(&:enemy?) }
  24.     dir && (detonate!(dir) || true)
  25.   end
  26.  
  27.   def rescue?
  28.     dir = captive_dirs[0]
  29.     dir && (rescue!(dir) || true)
  30.   end
  31.  
  32.   def attack?
  33.     dir = enemy_dirs[0]
  34.     dir && (attack!(dir) || true)
  35.   end
  36.  
  37.   def rescue_ticking?
  38.     dir = ticking_dirs[0]
  39.     dir && (rescue!(dir) || true)
  40.   end
  41.  
  42.   def rest?
  43.     health < 16 && !listen.empty? && (rest! || true)
  44.   end
  45.  
  46.   def walk_ahead!
  47.     walk! direction_of_stairs
  48.   end
  49.  
  50.   def directions
  51.     %i(left right forward backward)
  52.   end
  53.  
  54.   around_dirs = lambda do |proc|
  55.     -> { directions.select {|dir| proc.(feel(dir)) } }
  56.   end
  57.  
  58.   all_dirs = lambda do |proc|
  59.     -> { listen.select(&proc).map {|space| direction_of(space) } }
  60.   end
  61.  
  62.   find = lambda do |sym|
  63.     lambda do
  64.       dir = send(sym)[0]
  65.       ok_dirs = empty_dirs
  66.       ok_dirs.delete(:backward) if sym == :tickings
  67.       dir = ok_dirs[0] if dir && !ok_dirs.include?(dir)
  68.       dir && (walk!(dir) || true)
  69.     end
  70.   end
  71.  
  72.   define_method(:enemies, &all_dirs.(:enemy?.to_proc))
  73.   define_method(:captives, &all_dirs.(:captive?.to_proc))
  74.   define_method(:tickings, &all_dirs.(:ticking?.to_proc))
  75.   define_method(:enemy_dirs, &around_dirs.(:enemy?.to_proc))
  76.   define_method(:captive_dirs, &around_dirs.(:captive?.to_proc))
  77.   define_method(:ticking_dirs, &around_dirs.(:ticking?.to_proc))
  78.   empty = ->(space) { space.empty? && !space.stairs? }
  79.   define_method(:empty_dirs, &around_dirs.(empty))
  80.   define_method(:find_enemy?, &find.(:enemies))
  81.   define_method(:find_captive?, &find.(:captives))
  82.   define_method(:find_ticking?, &find.(:tickings))
  83.  
  84.   def method_missing(sym, *args)
  85.     @warrior.respond_to?(sym) ? @warrior.send(sym, *args) : super
  86.   end
  87. end

点评

一个最简单的方法,上 http://rubyinstaller.org/ (可能部分时间会很慢,但是没有墙。当然翻墙可以保证速度)  发表于 2014-7-29 19:46
是我太傻了吗,再来问下,ruby怎么安装  发表于 2014-7-29 19:45
首先你要安装 Ruby,然后开始菜单->运行->cmd,就可以调出命令行了  发表于 2014-7-29 19:40
还是不懂,命令行在哪呢  发表于 2014-7-29 19:35
英文不怎么需要看懂。你只要看懂:在命令行打 gem install rubyinstaller 安装,打 rubywarrior 运行,然后生成的 README 都是很简单很少的英文,问题不大的  发表于 2014-7-29 19:31

评分

参与人数 5星屑 +233 收起 理由
kuerlulu + 29 打不过怎破
冰水金刚 + 4 最后4个
satgo1546 + 50 玩过
余烬之中 + 100 我很赞同
px.凤翔九天 + 50 默默给taroxd大触点赞....

查看全部评分

Lv1.梦旅人

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
帖子
1524
2
发表于 2014-7-29 19:10:06 | 只看该作者
我第一次玩这款游戏是在某次期末考试前无聊的时候,同学推荐给我这款游戏,然后我拿学校电脑玩的网页版(即余烬之中的链接)


你同学好厉害的样子

点评

他进了数学国家集训队,物理国家集训队,计算机没进去主要原因是和时间上和数学冲突……  发表于 2014-7-29 19:12
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
104
在线时间
1242 小时
注册时间
2010-6-30
帖子
573
3
发表于 2014-7-29 19:32:42 | 只看该作者
大触终归是大触……不管是本人还是同学

我同学怎么就没人听说过Ruby的
null
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
4
发表于 2014-7-29 19:36:03 | 只看该作者
这个游戏确实很赞,只是好像我只过了前5关而已……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
63 小时
注册时间
2014-7-28
帖子
296
5
发表于 2014-7-29 19:36:27 | 只看该作者
只玩游戏不学行么

点评

不学没法玩=。=  发表于 2014-7-29 19:40
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

6
发表于 2014-7-29 19:40:46 | 只看该作者
gem版没怎么玩下去 就把网页版过了( ̄∇ ̄)

点评

网页版多不好玩= =  发表于 2014-7-29 19:41
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

Lv1.梦旅人

星君

梦石
0
星屑
83
在线时间
2980 小时
注册时间
2011-10-9
帖子
2317

贵宾短篇七萝莉正太组冠军

7
发表于 2014-7-29 19:49:52 | 只看该作者
好棒(*´д`)
还是第一次玩这种类型的游戏,奇妙的爽快感
再加上这种像素风格的,玩定了|д゚ )

点评

其实,RM也可以算“这种类型的像素风格的游戏”,不是吗 kira☆~  发表于 2014-7-29 20:11

回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

8
 楼主| 发表于 2014-7-29 19:51:43 | 只看该作者
皮卡星 发表于 2014-7-29 19:49
好棒(*´д`)
还是第一次玩这种类型的游戏,奇妙的爽快感
再加上这种像素风格的,玩定了|д゚ ) ...

如果是 gem 版的话,就是命令行风格了= =
网页版才是像素风格

推荐 gem 版

点评

嗯,RM其实很多图块都不能算像素风格了,XP的还可以算,VX和VA开始就不能算了0 0  发表于 2014-7-29 20:16
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
117
在线时间
552 小时
注册时间
2012-8-18
帖子
1429
9
发表于 2014-7-29 19:55:21 | 只看该作者
网页版果断打不开,一下午净折腾SublimeText了,最后果断决定不玩了——我又不是Ruby党
同学什么的,唉,只见过玩C++的和易语言的,各种竞赛没几个人参加,整天不是LOL就是刷贴吧,唉,生不逢地啊

点评

+1  发表于 2014-7-30 10:38
我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
180
在线时间
810 小时
注册时间
2013-8-23
帖子
804

开拓者

10
发表于 2014-7-29 20:05:44 | 只看该作者

无法运行怎么办

点评

你电脑装Ruby了吗/  发表于 2014-7-29 22:13
遗失的签名。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-20 09:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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