C++俄罗斯方块 -- 菜单展示和选择 -- 方法

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;

}
函数解析:
  1. 清屏(循环时清除旧数据)
  2. 定位坐标 -- 输出标题 :俄罗斯方块(修改纵坐标SetPost(9,12))
  3. 循环体
    1. 定位坐标 -- 判断choice默认为1的时候,设置前景色背景色,并打印"开始游戏"
    2. 如果choice用户选中2,打印出"离开"
    3. c来接收用户的按键
      1. 如果用户按下了回车,离开循环体break
      2. 如果用户按下了非打印字符:一般阿斯克码值为0;就重新输入c的值
      3. 如果新的C的值是左右键,就通过三木运算符,赋值给choice 1或者2
      4. 然后继续循环1. 按回车就离开循环体while,
  4. 离开循环体后,恢复黑底白字
  5. 返回最终的choice的值 1 或者 2 return choice
概念理解:
非打印字符键:如:enter space F2

通常指的是那些不产生可见字符的按键,比如控制键(如Ctrl、Alt、Shift)、功能键(如F1、F2、F3等)、导航键(如方向键、Home、End、Page Up、Page Down等)以及一些产生不可见控制字符的按键(如Enter、Tab、Backspace、Delete等)。这些按键在文本编辑中通常不直接产生可见的字符,而是用来控制程序的行为或者光标的移动等。

相关推荐
TDengine (老段)1 小时前
TDengine C/C++ 连接器进阶指南
大数据·c语言·c++·人工智能·物联网·时序数据库·tdengine
a3535413821 小时前
设计模式-代理模式
c++·设计模式·代理模式
会周易的程序员9 小时前
多模态AI 基于工业级编译技术的PLC数据结构解析与映射工具
数据结构·c++·人工智能·单例模式·信息可视化·架构
lixzest12 小时前
C++上位机软件开发入门深度学习
开发语言·c++·深度学习
苦藤新鸡13 小时前
4.移动零
c++·算法·力扣
hetao173383713 小时前
2026-01-04~06 hetao1733837 的刷题笔记
c++·笔记·算法
liulilittle14 小时前
XDP VNP虚拟以太网关(章节:一)
linux·服务器·开发语言·网络·c++·通信·xdp
Ralph_Y14 小时前
多重继承与虚继承
开发语言·c++
bkspiderx14 小时前
C++虚析构函数:多态场景下的资源安全保障
c++·析构函数·虚函数表·虚析构函数
White_Can15 小时前
《C++11:列表初始化》
c语言·开发语言·c++·vscode·stl