我目前正在开发一款不错的游戏,我想到了如何制作一个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;
}
}
}
答案 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 |
+-----------------+