从另一个函数间接地绘制到面板



我正在用C#创建Conway的生活游戏,除了刷新面板以显示下一代之外,一切都很好。我可以在面板上绘制细胞的网格线,使用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#是否以同样的方式工作。。。

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

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

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

相关内容

  • 没有找到相关文章

最新更新