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

Project1

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

[原创发布] 生命游戏 RMXP版

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
跳转到指定楼层
1
发表于 2011-3-12 17:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 沙漠点灰 于 2011-3-12 19:16 编辑

生命游戏(Game Of Life)是英国数学家约翰·何顿·康威在1970年发明的细胞自动机,
70年的老古董了,以前没玩个(废话,70年...),看了下"游戏规则",个人认为很有趣——
细胞自动机(又称元胞自动机),名字虽然很深奥,但是它的行为却是非常美妙的。所有这些怎样实现的呢?我们可以把计算机中的宇宙想象成是一堆方格子构成的封闭空间,尺寸为N的空间就有N*N个格子。而每一个格子都可以看成是一个生命体,每个生命都有两种状态,如果该格子生就显示兰色,死则显示白色。每一个格子旁边都有邻居格子存在,如果我们把3*3的9个格子构成的正方形看成一个基本单位的话,那么这个正方形中心的格子的邻居就是它旁边的8个格子。
  每个格子的生死遵循下面的原则:
  1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) 。
  2. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;
  3. 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变

设定图像中每个像素的初始状态后依据上述的游戏规则演绎生命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案。


所以,扔一个 生命游戏的RMXP版上来(话说用其他语言30几行搞定...我的不含注释估计70行)给大家分享1下
  1. #==============================================================================
  2. # ■ Scene_Game_of_Life
  3. #------------------------------------------------------------------------------
  4. #     生命游戏      RMXP版(可做游戏Logo)                 —— by 沙漠.灰
  5. #==============================================================================

  6. class Scene_Game_of_Life
  7.   # 常量定义
  8.   Death = Color.new(255,255,255,255) # 死亡细胞颜色
  9.   Alive = Color.new(000,000,000,255) # 存活细胞颜色
  10.   Map_X = 200                        # 地图X轴大小
  11.   Map_Y = 200                        # 地图Y轴大小
  12.   #--------------------------------------------------------------------------
  13.   # ● 主处理
  14.   #--------------------------------------------------------------------------
  15.   def main
  16.     $data_system        = load_data("Data/System.rxdata")
  17.     @sprite             = Sprite.new
  18.     @sprite.bitmap      = RPG::Cache.title($data_system.title_name)
  19.     # 执行过渡
  20.     Graphics.transition
  21.     # 生成所谓的"地图"
  22.     @map = Sprite.new
  23.     @map.x = (640-Map_X)/2
  24.     @map.y = (480-Map_Y)/2
  25.     @map.bitmap = Bitmap.new(Map_X,Map_Y)
  26.     # 初始化游戏地图
  27.     for y in 0...Map_Y
  28.       for x in 0...Map_X
  29.         draw_cell(x,y,rand(2))
  30.       end
  31.       Graphics.update
  32.     end
  33.     # 主循环
  34.     loop do
  35.       # 刷新画面
  36.       update
  37.       # 闪人
  38.       break if $scene != self
  39.     end
  40.     # 准备过渡
  41.     Graphics.freeze
  42.     # 释放窗口
  43.     @map.bitmap.dispose
  44.     @map.dispose
  45.     @sprite.bitmap.dispose
  46.     @sprite.dispose
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 刷新画面
  50.   #--------------------------------------------------------------------------
  51.   def update
  52.     for y in 0...Map_Y
  53.       for x in 0...Map_X
  54.         # 刷新输入信息
  55.         Input.update
  56.         # 按B键闪人
  57.         if Input.trigger?(Input::B)
  58.           $scene = Scene_Title.new
  59.           return
  60.         end
  61.         # 确定刷新
  62.         ready(x,y)
  63.       end
  64.       Graphics.update
  65.     end
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 确定刷新
  69.   #--------------------------------------------------------------------------
  70.   def ready(x,y)
  71.     alive_cell = 0
  72.     for new_y in -1..1
  73.       for new_x in -1..1
  74.         next if new_x + x < 0 or new_x + x >= Map_X
  75.         next if new_y + y < 0 or new_y + y >= Map_Y
  76.         next if new_x == 0 and new_y == 0
  77.         if @map.bitmap.get_pixel(new_x+x, new_y+y) == Alive
  78.           alive_cell += 1
  79.         end
  80.       end
  81.     end
  82.     return if alive_cell == 2
  83.     alive_cell == 3 ? draw_cell(x,y,1) : draw_cell(x,y,0)
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 描绘细胞 0 死 1 活
  87.   #--------------------------------------------------------------------------
  88.   def draw_cell(x,y,status)
  89.     if status == 0
  90.       @map.bitmap.set_pixel(x, y, Death)
  91.     else
  92.       @map.bitmap.set_pixel(x, y, Alive)
  93.     end
  94.   end
  95. end
复制代码
附:工程

生命游戏.rar (188.35 KB, 下载次数: 1352)


P.S 上次有个小BUG,x,y习惯了,y,x就小BUG了



>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
60 小时
注册时间
2011-1-14
帖子
179
2
发表于 2011-3-12 17:33:48 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
10
星屑
319
在线时间
1406 小时
注册时间
2010-12-8
帖子
2805

贵宾

3
发表于 2011-3-12 17:33:54 | 只看该作者
终于看懂了...
收藏起来!
回复 支持 反对

使用道具 举报

Lv2.观梦者

铃铃塔的守护者

梦石
0
星屑
626
在线时间
961 小时
注册时间
2010-10-24
帖子
2768

贵宾

4
发表于 2011-3-12 17:46:51 | 只看该作者
看起来挺好玩的,期待各位搞出华丽的图案出来~
我也试着搞一搞..

魔法麻将独立游戏制作中,欢迎热情的测试员与UI设计师合作开发~
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
597
在线时间
374 小时
注册时间
2011-10-11
帖子
311
5
发表于 2011-10-12 19:37:39 | 只看该作者
下下看看
回复 支持 反对

使用道具 举报

Lv2.观梦者

(?????)

梦石
0
星屑
713
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

6
发表于 2011-10-12 19:45:19 | 只看该作者
这……这难道不是CPU测试程序么 = = b
古董笔记本亚历山大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-21 22:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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