生命游戏

生命游戏,又称生命棋,是英国数学家约翰·何顿·康威1970年发明的细胞自动机

它最初于1970年10月在《科学美国人》(杂志上马丁·葛登能的“数学游戏”专栏出现。

生命游戏中,对于任意位置,规则只有三条:(如图,黑色为细胞,白色为无细胞)

  1. 当周围有3个细胞时,该位置产生细胞
  2. 当周围有2个细胞时,该位置维持原样
  3. 其他情况,该位置变为无细胞

3个细胞时,该位置产生细胞,称作复活

1个细胞时,该细胞会因为孤独而死

4个或者过多时,会因为太过拥挤而死。

 

下面我给出了实现,不过好像有点问题,有兴趣的可以一起讨论。

一个cell类,代表细胞,一个container类,基于Panel的面板,用户绘制细胞。主界面中有个定时器,3秒钟重新对所有的细胞重新计算一次。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Drawing;
 6 
 7 namespace ThinkingModel
 8 {
 9     class Cell
10     {
11         private int m_x;
12         private int m_y;
13         private int m_width;
14         private Color m_color;
15 
16         private readonly Color ALIVE_COLOR = Color.Green;
17         private readonly Color DEAD_COLOR = Color.DarkGray;
18 59 
60         public void draw(Graphics gc)
61         {
62             Brush tbrush = new SolidBrush(Color.Black);
63             Brush fbrush = new SolidBrush(m_color);
64             int penWidth = m_width / 10;
65             Pen aPen = new Pen(tbrush, penWidth);
66             gc.DrawRectangle(aPen, m_x, m_y, m_width, m_width);
67             gc.FillRectangle(fbrush, m_x + penWidth, m_y + penWidth, m_width - penWidth, m_width - penWidth);
68         }
69 
70         public bool isDead()
71         {
72             return m_color == DEAD_COLOR;
73         }
74 
75         public bool isAlive()
76         {
77             return m_color == ALIVE_COLOR;
78         }
79 
80         public void setDead()
81         {
82             m_color = DEAD_COLOR;
83         }
84 
85         public void setAlive()
86         {
87             m_color = ALIVE_COLOR;
88         }
89     }
90 }
 

工程文件下载:https://files.cnblogs.com/linbirg/GameLife.rar

posted @ 2012-08-15 15:50  linbirg  阅读(519)  评论(0编辑  收藏  举报