2012-07-26 40 views
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#中可能的,我已经在帕斯卡尔做到了这一点,但我不知道C#的工作方式相同...

+2

这里不清楚有什么问题。你已经提出了一种绘制绘画的方法,但没有提供调用它的代码。在“Paint”事件中,您通过PaintEventArgs得到一个图形对象,该对象应该用于绘画,但是您不在此处使用它。是“simWindow”面板还是整个窗体? – 2012-07-26 13:05:39

回答

1

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

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