2

私は人生ゲームのコピーを実装することでC#を学んでいます。pictureBoxforループを使用してグリッドを正常に描画することができました。名前のブールfill_inは、正方形を埋めるためです。正方形をクリック可能にするための支援を求めています。のpropertite属性pictureBoxを許可するように設定しましたpictureBox_MouseClick。mouseClickイベントの横で、座標xとを設定しましたy==問題は、 boolオペランドに適用できないため、そのイベント内のifステートメントが正しくないことです。

fill_inブール値がtrueの場合に黒色で塗りつぶされるif条件ステートメントを実行するにはどうすればよいですか?

コード

  namespace life
    {
        public partial class Form1 : Form
        {

            Graphics paper;
            bool[,] fill_in = new bool[450, 450];

        public Form1()
            {
                InitializeComponent();
                paper = pictureBox1.CreateGraphics();

            }


    //makes grid in picture box
    private void drawGrid()
            {
                int numOfCells = 100;
                int cellSize = 10;
                Pen p = new Pen(Color.Blue);
                paper.Clear(Color.White);

                for (int i = 0; i < numOfCells; i++)
                {   
                    // Vertical
                    paper.DrawLine(p, i * cellSize, 0, i * cellSize, numOfCells * cellSize);
                    // Horizontal
                    paper.DrawLine(p, 0, i * cellSize, numOfCells * cellSize, i * cellSize);
                }
            }


    // populate bool fill_in with true (alive) or false (dead)
            private void clearGrid()
            {
                for (int x = 0; x < 450; x = x + 10)
                {
                    for (int y = 0; y < 450; y = y + 10)
                    {
                        fill_in[x, y] = false;
                    }
                }
            }

     private void button1_Click(object sender, EventArgs e)
            {
                drawGrid();
                clearGrid();

                for (int x = 0; x < 440; x = x + 10)
                {
                    for (int y = 0; y < 440; y = y + 10)
                    {
                        if (fill_in[x, y] == true)
                            paper.FillRectangle(Brushes.Black, x, y, 10, 10);
                    }
                }
            }

     private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
            {

                int x = e.X;
                int y = e.Y;
                int i = x / 10;
                int j = y / 10;


                fill_in[i, j] = !fill_in[i, j];

                if (fill_in[i, j])
                {

                 paper.FillRectangle(Brushes.Black, x, y, 10, 10);
                }
                else
                {

                paper.FillRectangle(Brushes.White, x, y, 10, 10);       

                }

                }

                }
           }

ifステートメントへの変更後:

ここに画像の説明を入力してください

4

1 に答える 1

3

if (fill_in == true)inpictureBox1_MouseClickに配列の添字がありません (はfill_in配列です、覚えていますか?)。

しかし、それは問題ではありません。あなたはすでにそのようにしたので、それが真実であることを知っているので、完全にfill_in[i, j]削除することができます。if

最初のクリックで入力し、入力を解除 (「未入力」に戻す) する場合は、イベント ハンドラーを少し変更するだけです。

private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
  int x = e.X;
  int y = e.Y;
  int i = x / 10;
  int j = y / 10;

  // Reverse the value of fill_in[i, j] - if it was false, change to true,
  // and if true change to false
  fill_in[i, j] = !fill_in[i, j];

  if (fill_in[i, j])
  {
    // Fill grid square with the filled color
  }
  else
  {
    // Fill grid square with unfilled color            
  }
}
于 2012-10-04T22:53:22.697 に答える