我正在制作这个基于吃豆人控制台的游戏,其中有一个 40x40 的板。棋盘上有吃豆人和敌人在吃食物。吃豆人用 0 表示,敌人用 # 表示。每次位置发生变化时,都会调用显示函数,在当前逻辑中,每秒清除整个控制台并重新打印板上的每个元素。但是这样,每当显示整个板时,都会有这些混蛋。请告诉我一种更好的方法来实现paacman和敌人的平稳运动,理想情况下我应该只改变pacman和敌人的位置,但我需要清除控制台才能在同一位置显示网格,否则它只会继续向下滚动。显示功能的代码如下:
public static void display()
{
Console.Clear();
for (int i = 0; i < 40; i++)
{
for (int j = 0; j < 40; j++)
{
bool packFound = false;
bool enmFound = false;
foreach (Packman element in myVers.packmans)
{
if (element.x == i && element.y == j)
{
packFound = true;
break;
}
}
foreach (Packman element in myVers.enemys)
{
if (element.x == i && element.y == j)
{
enmFound = true;
break;
}
}
if (packFound == true)
{
Console.Write('0');
myVers.board[i, j] = ' ';
}
else if (enmFound == true)
{
myVers.board[i, j] = ' ';
Console.Write('#');
}
else
{
Console.Write(myVers.board[i, j]);
}
}
Console.Write('n');
}
//Console.Write("nFood Count " + myVers.foodCount + "n");
}
如果你只重绘真正改变的角色怎么办?也许使用 Console.SetCursorPosition
首先尝试为开发板构建String
,然后一次将整个内容传递给控制台。 仍然执行清除操作。
这将是一项工作: String Builder
public static void display()
{
var boardStr = new StringBuilder();
for (int i = 0; i < 40; i++)
{
for (int j = 0; j < 40; j++)
{
bool packFound = false;
bool enmFound = false;
foreach (Packman element in myVers.packmans)
{
if (element.x == i && element.y == j)
{
packFound = true;
break;
}
}
foreach (Packman element in myVers.enemys)
{
if (element.x == i && element.y == j)
{
enmFound = true;
break;
}
}
if (packFound == true)
{
boardStr.Append("0");
myVers.board[i, j] = ' ';
}
else if (enmFound == true)
{
myVers.board[i, j] = ' ';
boardStr.Append("#");
}
else
{
boardStr.Append(myVers.board[i, j].ToString());
}
}
boardStr.Append("n");
}
//Console.Write("nFood Count " + myVers.foodCount + "n");
Console.Clear();
Console.Write(boardStr.ToString());
}