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等)。这些按键在文本编辑中通常不直接产生可见的字符,而是用来控制程序的行为或者光标的移动等。

相关推荐
爱和冰阔落38 分钟前
【Linux】Ctrl+C 到底做了什么?从键盘、kill 到 alarm,一次讲清信号的产生
linux·运维·c++·安卓
水饺编程1 小时前
第5章,[Win32 章节] :贝塞尔样条曲线(一)
c语言·c++·windows·visual studio
程序员打怪兽2 小时前
C++:类与对象,封装,继承,多态,构造/析构,重载/重写
c++
Escalating_xu2 小时前
【C++ STL简介】从六大组件到容器、迭代器与算法协作
java·c++·算法
Brilliantwxx2 小时前
【Linux】 进程(3)深度解析:从查看进程到进程状态
linux·服务器·网络·c++
啊啊啊啊啊!!!!2 小时前
【c++】二叉搜索树
开发语言·c++
ShineWinsu3 小时前
对于 C++:C++20中Concept(概念) 与 Coroutine(协程)的解析
linux·开发语言·网络·c++·c++20·epoll
liulilittle3 小时前
llmx 学习手册 06 —— CPU 指令集优化(AVX-512 三层演进)
c++·学习·算法·ai·llm
skr爱码士3 小时前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt·系统架构·客户端
郝学胜-神的一滴4 小时前
Horse3D 游戏引擎研发笔记(七):Clydesdale——从流式日志到多输出订阅
c++·qt·unity·游戏引擎·图形渲染·unreal engine·opengl