2016-12-08 8 views
0

В настоящее время я работаю над noughts и скрещенными видами игры, я решил, как сделать массив 3x3, но не имеет понятия, как рисовать его в окне консоли, а затем меня интересует, как я мог идти о внесении изменений в пустые пространства (или пробелы с числами) либо символу «Х», либо «О» с системой координат.Как нарисовать 2D-массив, а затем визуально изменить его значения?

Это то, что у меня уже есть, как это сделать сейчас ?;

{ 
     int[,] grid = new int[3, 3]; 
     for (int y = 0; y < 3; y++) 
     { 
      for (int x = 0; x<3;x++) 
      { 
       grid[x, y] = x * y; 
      } 
     } 
    } 
+0

другая тема, но может быть полезно http://stackoverflow.com/questions/38496889/ – fubo

ответ

0

Когда дело доходит до 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 | 
+-----------------+