我正在制作这款基于pacman游戏机的游戏,其中有一个40x40的主板。董事会上有吃着食物的pacmans和敌人。 pacman由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");
}
答案 0 :(得分:3)
如果您只重绘真正改变的字符怎么办?也许使用Console.SetCursorPosition
答案 1 :(得分:1)
首先尝试为棋盘构建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());
}