0

私は C# でコンウェイのライフ ゲームを作成していますが、次世代を表示するためのパネルの更新を除いて、すべて正常に動作します。simWindow_Paintパネルに描画してセルのグリッド線を確立し、 andを使用して「生命」を配置および破壊simWindow_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 に答える