0

我正在用 C# 创建康威的生命游戏,一切正常,除了刷新面板以显示下一代。我可以在面板上绘制以建立单元格的网格线,使用放置和破坏“生命” simWindow_PaintsimWindow_MouseClick但目前我无法更新它。

private void updateGame(){

    int living = 0;
    int dead = 0;

    for(int i = 1; i < gameHeight; i++)
        for (int j = 1; j < gameWidth; j++){

            //set cell location and size
            Rectangle cell = new Rectangle();
            cell.Height = cell.Width = 9;
            int X = j - 1;
            int Y = i - 1;
            cell.X = Convert.ToInt32(X * 10 + 1);
            cell.Y = Convert.ToInt32(Y * 10 + 1);

            using (Graphics g = this.simWindow.CreateGraphics()){
                if (gameArray[i, j] == true){
                    Brush brush = new SolidBrush(Color.Red);
                    g.FillRectangle(brush, cell);
                   ++living;
                } else {
                    Brush brush = new SolidBrush(Color.White);
                    g.FillRectangle(brush, cell);
                    ++dead;
                }
            }
        }
    }

我不确定我在 C# 中尝试做的事情是否可行,我已经在 Pascal 中做过,但我不确定 C# 是否以同样的方式工作......

4

2 回答 2

1

很难说出您向我们展示的内容,但我怀疑问题可能出在您的 simWindow_Paint 方法中。这是(可能)响应面板的绘制事件,我怀疑您正在做的是覆盖(或过度绘制)您在 updateGame() 方法中所做的所有绘图。

所有绘图都应在您的油漆处理程序中完成。因此,您绘制处理程序应该知道游戏的状态并相应地绘制它。您的 updateGame() 方法应该只更新游戏状态,然后使面板无效(强制重绘)。

于 2012-07-26T13:11:38.307 回答
0

我建议您查看以下有关 WinForms 中自定义绘画的文档:http: //msdn.microsoft.com/en-us/library/kxys6ytf.aspx

于 2012-07-26T13:06:59.650 回答