Когда дело доходит до 2D-массивов, у вас есть правильная идея с вложенными циклами. Они позволяют выполнять итерацию по каждой строке, а затем по каждому столбцу (если вы визуализируете эту матрицу).
Обновление вида консоли может быть достигнуто с помощью метода Console.SetCursorPostion()
. Каждый символ в консоли имеет координаты X и Y, но при вызове этого метода вы можете поместить курсор в ссылку на сетку. После вызова этого метода из этой новой позиции выведет все, что будет записано на консоль.
Примечание: Консоль не очищается, когда вы вызываете Console.SetCursorPostion()
любой вывод после того, как прост написан сверху. Это означает, что если текст, который вы пишете после вызова метода, короче предыдущего вывода, вы все равно увидите часть старого вывода.
В вашем случае каждый раз, когда ваше использование делает ход, вы можете полностью очистить всю консоль, что может быть достигнуто с помощью Console.Clear()
.
Я написал небольшое демонстрационное приложение, ниже которого читается сетка из текстового файла, который может выступать в качестве платы Tic Tac Toe. По умолчанию сетка заполняется координатами этого конкретного окна, это потому, что программа довольно грубая и использует эти текстовые значения для размещения игроков. Игроки идут в 2D-массив, который отображает либо пустые значения, либо может содержать '0'/'X'.
Простая строка чтения позволяет пользователям вводить координаты, а затем заполняет 2D-массив ответом и перерисовывает сетку.
Кресты всегда идут первым!
Я надеюсь, что эта демонстрационная программа дает хороший пример того, как консоль может быть переписана, и дает некоторые идеи о том, как вы могли бы реализовать свою идею с использованием 2D-массивов.
Программа
static void Main(string[] args)
{
int player = 0;
string[,] grid = new string[3, 3] {{" "," "," "},
{" "," "," "},
{" "," "," "} };
string box = System.IO.File.ReadAllText(@"C:\Users\..\Box.txt");
Console.WriteLine(box);
Console.ReadLine();
while (true)
{
Console.WriteLine("Enter Coordinate in 'x,y' Format");
string update = Console.ReadLine();
if (player == 0)
{
string[] coords = update.Split(',');
var x = int.Parse(coords[0]) - 1;
var y = int.Parse(coords[1]) - 1;
grid[x,y] = " X ";
player++;
}
else
{
string[] coords = update.Split(',');
var x = int.Parse(coords[0]) - 1;
var y = int.Parse(coords[1]) - 1;
grid[x, y] = " 0 ";
player--;
}
UpdateGrid(grid, box);
}
}
public static void UpdateGrid(string[,] grid, string box)
{
Console.Clear();
for (int i = 0; i < grid.GetLength(0); i++)
{
for (int j = 0; j < grid.GetLength(1); j++)
{
box = box.Replace((i + 1) + "," + (j + 1), grid[i, j]);
}
}
// In the case not required as clearning the console default the cursor back to 0,0, but left in
// as an example
Console.SetCursorPosition(0, 0);
Console.WriteLine(box);
}
Текстовый файл
+-----------------+
| 1,1 | 2,1 | 3,1 |
+-----+-----+-----+
| 1,2 | 2,2 | 3,3 |
+-----+-----+-----+
| 1,3 | 2,3 | 3,3 |
+-----------------+
другая тема, но может быть полезно http://stackoverflow.com/questions/38496889/ – fubo