自动生成井字游戏

时间:2012-03-12 01:54:43

标签: c#

这是有效的

            int index = 0;

        for (int i = 0; i != ROWS; i++)
        {
            for (int n = 0; n != COLS; n++)
            {
                if (gameArray[i, n] == 1)
                {
                    labels[index].Text = "X";
                }
                else if (gameArray[i, n] == 0)
                {
                    labels[index].Text = "O";
                }
                index += 1;
            }
        }

我正在用c#做一个自动的tic-tac-toe游戏。我只能让标签显示所有X或所有O,它从未在所有9个标签中混合其中的一个或另一个。以下是我获取x或o值的方法。

// initialize our game array
for (int i = 0; i != ROWS; i++)
{
    for (int j = 0; j != COLS; j++)
    {
        gameArray[i, j] = rand.Next(0, 2);
    }
}

// Add the x's and o's to our labels
foreach (int item in gameArray)
{
    foreach (Label myLabel in labels)
    {
        if (item == 1)
            myLabel.Text = "X";
        if (item == 0)
            myLabel.Text = "O";
    }
}

3 个答案:

答案 0 :(得分:3)

您正在浏览每个项目,然后对于每个标签,您将根据该项目设置X或O.

所以它要么全部是X,要么全部取决于最后一项是什么。

您需要一种将标签与商品相关联的方法。如果你知道这两个数组都是9长......

for(int c=0; c<COLS c++)
{
   for(r=0; r<ROWS; r++)
   {
    if(gameArray[r,c] == 1)
    {
       labels[r*COLS+c].Text = "X";
    }
    else if(gameArray[r,c] == 0)
    { 
       labels[r*COLS+c].Text = "O";
    } 
}
}

答案 1 :(得分:0)

这一代太快,以至于它只使用相同的种子作为随机数。每次尝试生成数字时都会生成一个新的种子rand实例。

答案 2 :(得分:0)

这应该有效,因为标签也是二维数组:

for (int i = 0; i != ROWS; i++)
{
    for (int j = 0; j != COLS; j++)
    {
      var item = rand.Next(0, 2);
      gameArray[i, j] = item; 
      var myLabel = labels[i,j];

      if (item == 1)
        myLabel.Text = "X";
      if(item == 0)
        myLabel.Text = "O"; 
    }
}

如果标签是一维替换:

var myLabel = labels[i,j];

使用:

var myLabel = labels[i+j];
相关问题