您的位置:首页 > 其它

生命游戏

2012-08-15 15:50 162 查看
生命游戏,又称生命棋,是英国数学家约翰·何顿·康威1970年发明的细胞自动机

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

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

当周围有3个细胞时,该位置产生细胞

当周围有2个细胞时,该位置维持原样

其他情况,该位置变为无细胞

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

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

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

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

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace ThinkingModel
{
class Cell
{
private int m_x;
private int m_y;
private int m_width;
private Color m_color;

private readonly Color ALIVE_COLOR = Color.Green;
private readonly Color DEAD_COLOR = Color.DarkGray;

public void draw(Graphics gc)
{
Brush tbrush = new SolidBrush(Color.Black);
Brush fbrush = new SolidBrush(m_color);
int penWidth = m_width / 10;
Pen aPen = new Pen(tbrush, penWidth);
gc.DrawRectangle(aPen, m_x, m_y, m_width, m_width);
gc.FillRectangle(fbrush, m_x + penWidth, m_y + penWidth, m_width - penWidth, m_width - penWidth);
}

public bool isDead()
{
return m_color == DEAD_COLOR;
}

public bool isAlive()
{
return m_color == ALIVE_COLOR;
}

public void setDead()
{
m_color = DEAD_COLOR;
}

public void setAlive()
{
m_color = ALIVE_COLOR;
}
}
}


工程文件下载:http://files.cnblogs.com/linbirg/GameLife.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: