一、输出与输入
1.输出:
Console.WriteLine("Hello, World!");//光标空行
Console.Write("Hello, World!");//光标不空行
2.输入:
Console.ReadLine(); //读取输入的文本
Console.ReadKey(); //读取按下的单个键
Console.KeyAvailable; //用于检查是否有按键操作在输入流中可用.它返回一个布尔值,如果有按键操作可用,则返回true,否则返回false.
注意:如果输入ReadKey(true)不会把输入的内容打印到控制台上:
char c = Console.ReadKey(true).KeyChar;
二、控制台其它方法
1.清空:
相当于是擦黑板
Console.Clear();
2.设置控制台的大小:
注意:①先设置窗口大小再设置缓冲区大小。
②缓冲区的大小不能小于窗口的大小。
③窗口的大小不能大于控制台的最大尺寸。
窗口大小:
Console.SetWindowSize(100,50);
缓冲区大小:
Console.SetBufferSize(100,50);
3.设置光标的位置:
Console.SetCursorPosition(5, 5);
Console.WriteLine("光标");
注意:①控制台左上角为原点(0,0),右侧是x轴正方向,下方是y轴正方向,它是一个平面二维坐标系。
②要考虑到边界问题。
③横纵比例单位不同,从视觉上来看,y=2x。
4.设置颜色相关
①设置文字颜色:
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("黄色");
注意:只要打印了一次颜色,之后文字的颜色都会是这个颜色。
②设置背景颜色:
Console.BackgroundColor = ConsoleColor.Green;
Console.WriteLine("绿色");
注意:设置背景颜色只会把输出内容的背景颜色换成对应颜色,而不是把整个控制台的背景颜色换成对应颜色,如果想要把整个控制台的颜色进行更换,需要对控制台进行清空。
Console.BackgroundColor = ConsoleColor.Green;
Console.Clear();
5.光标的隐藏
Console.CursorVisible = false;
6.关闭控制台
Environment.Exit(0);
三、制作小游戏移动逻辑
通过上述介绍控制台相关的内容,并结合我之前发布的关于C#入门语言的文章,要求制作一个小游戏的移动逻辑:通过W、A、S、D在控制台中控制一个黄色方块上下左右移动(注意边界问题)。
internal class Program
{
const int WIDTH = 40;//设置控制台宽度作为边界
const int HEIGHT = 20;//设置控制台高度作为边界
static void Main(string[] args)
{
Console.CursorVisible = false;//隐藏光标
Console.SetWindowSize(WIDTH, HEIGHT);//设置窗口大小
Console.SetBufferSize(WIDTH, HEIGHT);//设置缓冲区大小
int x = 0, y = 0;//方块初始位置
while (true)
{
Console.SetCursorPosition(x,y); // 将光标移动到方块的当前位置
Console.ForegroundColor = ConsoleColor.Yellow; // 设置方块颜色为黄色
Console.Write("■");// 在当前位置绘制方块
char key = Console.ReadKey(true).KeyChar;// 读取用户按下的键(true参数表示不显示按下的键)
Console.SetCursorPosition(x, y);// 将光标移回方块的原始位置,准备清除方块
Console.Write(" "); // 用两个空格覆盖原位置的方块,实现清除效果
// 根据用户按下的键处理方块移动
switch (key)
{
//W或w键:向上移动
case 'W':
case 'w':
y--;
if (y < 0) // 边界检查:防止y坐标小于0(超出上边界)
{
y = 0;// 如果超出上边界,则保持在边界位置
}
break;
//A或a键:向左移动
case 'A':
case 'a':
x--;
if (x < 0) // 边界检查:防止x坐标小于0(超出左边界)
{
x = 0; // 如果超出左边界,则保持在边界位置
}
break;
//S或s键:向下移动
case 'S':
case 's':
y++;
if (y > HEIGHT-1) //边界检查:防止y坐标超过最大高度(超出下边界)
{
y = HEIGHT-1;// 如果超出下边界,则保持在边界位置
}
break;
//D或d键:向右移动
case 'D':
case 'd':
x++;
if (x > WIDTH-2)// 边界检查:防止x坐标超过最大宽度(超出右边界)
{
// WIDTH-2是因为方块"■"占2个字符宽度,需要留出空间
x = WIDTH-2;// 如果超出右边界,则保持在边界位置
}
break;
// ESC键(ASCII码27):退出程序
case (char)27:
Environment.Exit(0);// 退出应用程序,返回代码0表示正常退出
break;
}
}
}
}