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

相关推荐
奋斗的小花生4 小时前
c++ 多态性
开发语言·c++
闲晨4 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
UestcXiye6 小时前
《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列
c++·计算机网络·ip·tcp
霁月风7 小时前
设计模式——适配器模式
c++·适配器模式
jrrz08287 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
咖啡里的茶i7 小时前
Vehicle友元Date多态Sedan和Truck
c++
海绵波波1078 小时前
Webserver(4.9)本地套接字的通信
c++
@小博的博客8 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
爱吃喵的鲤鱼9 小时前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
7年老菜鸡9 小时前
策略模式(C++)三分钟读懂
c++·qt·策略模式