遇到的问题:
1.Console.ReadKey() 返回的是一个 ConsoleKeyInfo 对象,表示按键的状态,包括按下的键位、以及 Shift、Alt 和 Ctrl 的状态等等
2.Console.ReadKey() 可以传递一个 Boolean 参数,表示是否隐藏回显,默认是 false。如果传递 true 的话,用户的输入就不会回显在控制台上。
ConsoleKeyInfo kinfo = Console.ReadKey(true);
var op= Console.ReadKey(true);
switch (op.KeyChar)
3.用Console.clear() 屏幕闪烁严重。参考了其他人的做法 改成用Console.SetCursorPosition(x,y);只重绘了前后两个位置。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Beta1._0
{
class Game
{
private int MapHight ;
private int MapWidth;
private int PlayerX;
private int PlayerY;
public Game ()
{
MapHight = 20;
MapWidth = 40;
PlayerX = 5;
PlayerY = 5;
}
public void Move ()
{
var op= Console.ReadKey(true);
switch (op.KeyChar)
{
case 'w':
case 'W':
if (PlayerY > 1)
{
Console.SetCursorPosition(PlayerX, PlayerY);
Console.Write(" ");
PlayerY--;
Console.SetCursorPosition(PlayerX, PlayerY);
Console.Write("♜");
}
break;
case 's':
case 'S':
if (PlayerY <MapHight-1)
{
Console.SetCursorPosition(PlayerX, PlayerY);
Console.Write(" ");
PlayerY++;
Console.SetCursorPosition(PlayerX, PlayerY);
Console.Write("♜");
}
break;
case 'a':
case 'A':
if (PlayerX > 1)
{
Console.SetCursorPosition(PlayerX, PlayerY);
Console.Write(" ");
PlayerX--;
Console.SetCursorPosition(PlayerX, PlayerY);
Console.Write("♜");
}
break;
case 'd':
case 'D':
if (PlayerX < MapWidth - 1)
{
Console.SetCursorPosition(PlayerX, PlayerY);
Console.Write(" ");
PlayerX++;
Console.SetCursorPosition(PlayerX, PlayerY);
Console.Write("♜");
}
break;
}
}
public void show()
{
int i, j;
for (i = 0; i <= MapHight; i++)
{
for (j = 0; j <= MapWidth; j++)
{
if (i == 0 || i == MapHight || j == 0 || j == MapWidth)
Console.Write("#");
else if (i == PlayerY && j == PlayerX)
Console.Write("♜");
else Console.Write(" ");
}
Console.WriteLine();
}
}
}
class Program
{
static void Main(string[] args)
{
Game g=new Game ();
g.show();
while(true)
{
g.Move();
}
Console.ReadKey();
}
}
}