2D阵列简单问题

时间:2014-02-10 16:30:20

标签: c# arrays

我有一个简单的问题,但对我来说有点困惑所以我很感激提供的所有帮助:)。

基本上,我想要一个2D数组,长度为9,数值为1。 所以,如果我要初始化它,那就是:

int[,] array = new int[8, 1];

我的问题是我感到困惑。我正在制作一个tic tac toe游戏,第一个值就是位置。每次转弯时我都会使用int来增加一个值。但是,第二个值我要保持'0'或'1'或'2'。 '0'意味着没有人在这里打过'1'意味着x已经在这里打了'2'意味着o已经在这里打过。

理想地访问数组时(尽管我不能)我只想指定array [m]但是要访问数组我需要输入数组[m,0]。我希望第二个值保存一个值,而不是一个访问数组的位置,如果有意义的话。

如果我不能用二维阵列做这个,那么有没有人建议使用什么? 如果需要更多信息,请告诉我。

4 个答案:

答案 0 :(得分:1)

詹姆斯·冈特说:

     int[] array = new int[9];

在这个数组中,索引是位置,存储在该索引处的值是0 = Nothing,1 = O's,2 = X's。

您的初始董事会状态将如下所示

{0,0,0,0,0,0,0,0,0}

现在X在中间移动说:

// {0,0,0,0,2,0,0,0,0}
array[4] = 2;

现在O向右移动:

// {0,0,0,0,2,1,0,0,0}
array[5] = 1;

等等......直到达到胜利状态或者棋盘上不再存在0。

答案 1 :(得分:0)

您应该使用2D对象数组,其中每个对象保存空间的值,另一个对象保持位置(我猜你的意思是它的播放顺序)。

答案 2 :(得分:0)

这样可行:

IDictionary<int, int> ticTacToeBoard = new Dictionary<int, int>();

//initialize and reset all values on the board to 0
ticTacToeBoard = resetBoard(ticTacToeBoard);

int position = 1;
int value = ticTacToeBoard[position];

答案 3 :(得分:0)

听起来像是在3x3网格之后,你可以简单地使用2D数组:

const int width = 3;
const int height = 3;

var board = new int[height, width];

然后,您可以使用以下内容扩展它以检查所有值是否为0(例如,电路板为空):

bool AllEmpty(int[,] board, int width, int height)
{
  for (int y = 0; y < height; ++y)
  {
    for (int x = 0; x < width; ++x)
    {
      if (board[y, x] != 0)
      {
        return false;
      }
    }
  }
  return true;
}

(你可以使用LINQ做一些更好的事情,但是LINQ和多维度并不太好,所以我现在保持简单。)

这基本上代表了这一点:

000 
000 
000

您需要进行一些初始化并修改值才能使其正常工作。