我一直在为一个naughts和crosses程序做一些编程,而且这个板是一个2D数组。我一直试图让程序重复,如果用户想要重播但是我注意到重复时所有值都保留在数组中。所以我想知道是否有办法清除我的数组中的所有值。
我确实在论坛上尝试了一些先前的问题,但我找到的一些解决方案似乎没有用。
如果有人希望看到代码只是评论,我会在这里添加,我只是不确定是否有必要。
非常感谢任何帮助。
const int Rows = 4;
const int Columns = 4;
char Board[Rows][Columns] = { {' ', ' ', ' ', ' ' },
{' ', '_', '_', '_' },
{' ', '_', '_', '_' },
{' ', '_', '_', '_' } };
for (int i = 0; i < Rows; ++i)
{
for (int j = 0; j < Columns; ++j)
cout << Board [i][j];
cout << endl;
}
cout << endl << endl;
int row;
int column;
do
{
cout << "Please enter the value of the row you would like to take ";
cin >> row;
}while (row != 0 && row != 1 && row != 2 && row != 3);
do
{
cout << "Please enter the value of the column you would like to take ";
cin >> column;
}while (column != 0 && column != 1 && column != 2 && column != 3);
Board [row][column] = Player1.GetNorX();
for (int i = 0; i < Rows; ++i)
{
for (int j = 0; j < Columns; ++j)
cout << Board [i][j];
cout << endl;
}
答案 0 :(得分:2)
假设您希望将Board
重置为其原始状态,则需要:
for (int i = 0; i < Rows; i++) {
for (int j = 0; j < Columns; j++) {
if (i == 0 || j == 0) {
Board[i][j] = ' ';
} else {
Board[i][j] = '_';
}
}
}
这将循环遍历数组的每个元素,如果列或行号为0,则用' '
填充,或者用'_'
填充。
如果您只关心右下方的3x3网格,那么您可以这样做:
for (int i = 1; i < 4; i++) {
for (int j = 1; j < 4; j++) {
Board[i][j] = '_';
}
}
但我建议将Rows
和Columns
声明为3
。如果您希望用户输入从1开始的行号和列号,则只需在访问阵列时从{1,2,3}转换为{0,1,2}。
答案 1 :(得分:0)
将代码放入单独的函数
void game()
{
const int Rows = 4;
// ...
}
并从游戏控制器
调用它bool replay;
do
{
game();
cout << "Replay? (0 - no, 1 - yes)";
cin >> replay;
} while(replay);
这种方法可以恢复整个环境。
答案 2 :(得分:0)
使用 List 类而不是传统的多维数组。可以轻松清除和删除此类对象的元素。此外,列表的大小是动态的和可变的。创建对象时无需指定大小。尝试定义二维列表。
List<List<char>> Board = new List<List<char>>;