如何绘制2D数组然后直观地更改其值?

时间:2016-12-08 10:45:24

标签: c# arrays grid console-application coordinates

我目前正在开发一款不错的游戏,我想到了如何制作一个3x3阵列,但却不知道如何在控制台窗口中绘制它,接下来我对我的能力感兴趣使用坐标系统对空格(或带数字的空格)进行“X”或“O”符号的更改。

这就是我现在如何绘制它?;

{
        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;
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

对于2D阵列,您已经通过嵌套for循环获得了正确的想法。这些允许您遍历每一行,然后遍历每一列(如果您将其显示为矩阵)。

使用Console.SetCursorPostion()方法可以更新控制台视图。控制台中的每个字符都有一个X和Y坐标,但调用此方法可以将光标放在网格参考上。调用此方法后,写入控制台的任何内容都将从此新位置输出。

注意:在简单地写在顶部之后调用Console.SetCursorPostion()任何输出时,控制台不会被清除。这意味着如果您在调用方法后写入的文本比上一个输出短,您仍会看到一些旧输出。

在您的情况下,每次使用时,您都可以清理整个控制台,这可以通过Console.Clear()实现。

我已经写了一个小的演示应用程序,在其下面从文本文件中读取网格,该文件可以充当Tic Tac Toe板。默认情况下,网格用特定框的坐标填充,这是因为程序非常粗糙并使用这些文本值来放置玩家。玩家前往存储在2D数组中,该数组显示空白值或者可以保存&#39; 0&#39; X&#39;。

一条简单的读取线让用户输入坐标,然后它将用答案填充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 |
+-----------------+