Project1

标题: 生命游戏 RMXP版 [打印本页]

作者: 沙漠点灰    时间: 2011-3-12 17:23
标题: 生命游戏 RMXP版
本帖最后由 沙漠点灰 于 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了




作者: 双子男星    时间: 2011-3-12 17:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: lianran123456    时间: 2011-3-12 17:33
终于看懂了...
收藏起来!
作者: px.凤翔九天    时间: 2011-3-12 17:46
看起来挺好玩的,期待各位搞出华丽的图案出来~
我也试着搞一搞..
作者: 月下黄昏    时间: 2011-10-12 19:37
下下看看
作者: 各种压力的猫君    时间: 2011-10-12 19:45
这……这难道不是CPU测试程序么 = = b
古董笔记本亚历山大




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1