cpp
short Menu() //选中开始游戏返回1,离开则返回2
{
short choice = 1;//跟踪用户选中的选项
char c; //记录用户按键信息
system("cls");
SetPos(9, 12); //设置输出坐标,12行9列
cout << "┌────────┐";
SetPos(9, 13);
cout << "│ 俄 罗 斯 方 块 │";
SetPos(9, 14);
cout << "└────────┘";
while (1)
{
SetPos(15, 16);
if (choice == 1) SetColor(2, 7); //2为前景色:绿色,7为背景色:白色。
else SetColor(2, 0); //如果当前第一项不是选中项,背景色为黑色0
cout << "开始游戏";
SetPos(15, 18);
if (choice == 2) SetColor(2, 7); //2为前景色:绿色,7为背景色:白色。
else SetColor(2, 0); //如果当前第一项不是选中项,背景色为黑色
cout << "离 开";
c = getch();
if (c == VK_RETURN) break; //用户按下了回车,离开循环体
else
if (c == 0) choice = getch(); // 如果用户输入了非打印字符键,如:enter space F2,让用户重新输入
if (c == 72 || c == 80) choice = choice == 1 ? 2 : 1; //让choice在1、2之间切换,72向下的方向键80向上的方向键
//用户如果什么都不输入,继续循环 while true
}
SetColor(7, 0); //恢复黑底白字
return choice;
}
函数解析:
- 清屏(循环时清除旧数据)
- 定位坐标 -- 输出标题 :俄罗斯方块(修改纵坐标SetPost(9,12))
- 循环体
- 定位坐标 -- 判断choice默认为1的时候,设置前景色背景色,并打印"开始游戏"
- 如果choice用户选中2,打印出"离开"
- c来接收用户的按键
- 如果用户按下了回车,离开循环体break
- 如果用户按下了非打印字符:一般阿斯克码值为0;就重新输入c的值
- 如果新的C的值是左右键,就通过三木运算符,赋值给choice 1或者2
- 然后继续循环1. 按回车就离开循环体while,
- 离开循环体后,恢复黑底白字
- 返回最终的choice的值 1 或者 2 return choice
概念理解:
非打印字符键:如:enter space F2
通常指的是那些不产生可见字符的按键,比如控制键(如Ctrl、Alt、Shift)、功能键(如F1、F2、F3等)、导航键(如方向键、Home、End、Page Up、Page Down等)以及一些产生不可见控制字符的按键(如Enter、Tab、Backspace、Delete等)。这些按键在文本编辑中通常不直接产生可见的字符,而是用来控制程序的行为或者光标的移动等。