当前位置: 首页 > news >正文

【C++】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值

 [导读]本系列博文内容链接如下:

【C++】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值

【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动
【C++】【C++】做一个飞机空战小游戏(三)——模块化程设设计

最近想用c++做一个小游戏,游戏的主要内容是利用键盘控制一个飞机躲避和击落屏幕顶部随机掉落敌方炮弹,飞机被敌方炮弹击中则减掉一条命,飞机也可以发射炮弹反击,每击落一个敌方炮弹,则有相应积分。

游戏的思路就是利用w、s、a、d四个按键来控制飞机的移动方向,w——向上,s——向下,a——向左,d——向右;按空格键飞机发射反击炮弹。

那么问题来了,程序如何知道键盘哪个键被按下了呢?c++中getch()这个函数可以实现这个功能,当键盘某个按键(或某个组合按键)被按下时,利用这个函数可以获得该按键(或组合按键)对应符号的码值,从而确定哪个按键被按下了。

目录

一、getch()函数

(一)功能描述:

(二)函数原型:

二、键盘码值

(一)可显示字符

(二)控制按键编码

1、单码

2、双码

(1)第一部分为224

(2)第一部分为0

(三)小键盘码值

1、可显示字符

2、第一类控制字符

3、第二类控制字符

(四)检查键盘码值的方法

1、查询按键码值程序

2、可显示字符的运行结果

3、控制按键单编码

4、控制按键双编码


一、getch()函数

百度百科getch()函数的描述:

(一)功能描述:

getch()是编程中所用的函数,这个函数是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车,有的C语言命令行程序会用到此函数做游戏,但是这个函数并非标准函数,要注意移植性!

(二)函数原型:

函数原型:int getch(void)

返回值:读取字符的码值

getch():所在头文件:conio.h

函数用途:从控制台读取一个字符,但不显示在屏幕上函数原型:int getch(void)返回值:读取的字符例如:char ch;或int ch;getch();或ch=getch();用getch();会等待你按下任意键,再继续执行下面的语句;用ch=getch();会等待你按下任意键之后,把该键字符所对应的键盘码值赋给ch,再执行下面的语句。

二、键盘码值

(一)可显示字符

可显示字符是指可通过键盘录入的字符文本,编号范围是32-126(0x20-0x7E),共95个字符,如图1所示浅黄色区域为对应的按键。

图1 可显示字符按键

getch()获得的可显示字符的码值就是字符的ascii码值,具体情况见表1。

表1 可显示字符对应的码值

(二)控制按键编码

键盘的有些按键,作用并不是录入文本字符,而是代表输入了一些控制指令。这部分指令按键的码值分两种情况,单码和双码。单码码值范围为0~32之间,双码由两部分码组成,第一部分为0或者224,第二部分为0~255。

1、单码

常用的按键有4个:

序号码值键盘符号
18Backspace
29Tab
313Enter
427Esc

2、双码

(1)第一部分为224

序号第一部分码值第二部分码值键盘符号
122471Home
222472
322473PgUp
422475
522477
622479End
722480
822481PgDn
922482Insert
1022483Delete
11224133F11
12224134F12
13224135F11第二功能
14224136F12第二功能

(2)第一部分为0

序号第一部分码值第二部分码值键盘符号
1059F1
2060F2
3061F3
4062F4
5063F5
6064F6
7065F7
8066F8
9067F9
10068F10
11084F1第二功能
12085F2第二功能
13086F3第二功能
14087F4第二功能
15088F5第二功能
16089F6第二功能
17090F7第二功能
18091F8第二功能
19092F9第二功能
20093F10第二功能

(三)小键盘码值

大部分外接键盘和部分笔记本键盘带有数字输入专用的小键盘,如图2所示,也有独立的小键盘,如图3所示。

图2 带有小键盘的键盘

图3 独立的小键盘

小键盘上的按键除了数字切换键NumLock之外,其余的键大键盘也是有的,是重复的。

小键盘的码值分三种情况:

1、可显示字符

小键盘的数字0~9、加减乘除等于号(+、-、*、/、=)、小数点(.)等15个可显示字符,其码值与大键盘一样,都是ascii码值。

2、第一类控制字符

数字键7、8、9、4、6、1、2、3、0和小数点键等10个键有复合功能,分别为Home、↑、PgUp、←、→、End、↓、PgDn、Insert、Delete。这10个复合功能键码值与大键盘的码值略有区别,其码值第二部分完全一致,而第一部分码值都是0。详见下表。

序号第一部分码值第二部分码值键盘符号
1071Home
2072
3073PgUp
4075
5077
6079End
7080
8081PgDn
9082Insert
10083Delete

3、第二类控制字符

控制字符键Backspace和Enter,其码值与大键盘一样,分别为13和8。

(四)检查键盘码值的方法

对于可显示字符,各个品牌键盘的码值基本都一样。对于控制按键的码值可能会有不同,可以通过

编写程序来显示。

1、查询按键码值程序

#include <iostream>
#include "conio.h"
using namespace std;int main()
{while(1){cout<<getch()<<endl;}}

2、可显示字符的运行结果

分别输入'1'、'A'、'a'、'!'、','5个字符时,显示的码值如下所示。

49
65
97
33
44

3、控制按键单编码

分别按Backspace、Tab、Enter、Esc时,显示的码值如下所示。

8
9
13
27

4、控制按键双编码

分别按↑、↓、←、→、F1、F2键时,显示的码值如下所示,注意每个按键对应的两个码值是分行显示。

224
72
224
80
224
75
224
77
0
59
0
60

http://www.lryc.cn/news/104384.html

相关文章:

  • Spring项目整合策略模式~实战应用
  • mybatis PageHelper的坑---记录
  • uniapp微信小程序下载文件并打开
  • 安卓Intent打开系统进程汇总
  • python学习(廖雪峰的官方网站部分,自学笔记)
  • python题-检查该字符串的括号是否成对出现
  • 3ds Max建模教程:模拟布料拖拽撕裂和用剑撕裂两种效果
  • 数据可视化(4)散点图及面积图
  • Redis - 数据过期策略
  • 英文论文(sci)解读复现:基于YOLOv5的自然场景下苹果叶片病害实时检测
  • 【Liux下6818开发板(ARM)】实现简易相册
  • Kubernetes(K8s)从入门到精通系列之六:K8s的基本概念和术语之存储类
  • Spark-统一内存模型
  • 类的继承和super关键字的使用(JAVA)
  • BGP属性+选路规则
  • 类的实例化
  • 智能提词器有哪些?了解一下这款提词工具
  • oracle 19c rac环境配置firewalld
  • Flutter 之Bloc入门指南实现倒计时功能
  • 目标识别数据集互相转换——xml、txt、json数据格式互转
  • 211. 添加与搜索单词 - 数据结构设计---------------字典树
  • SQL Server通过指令备份数据库和恢复数据库
  • windows如何上架ios应用到app store
  • Hadoop学习日记-YARN组件
  • 汽车过户时,怎么选到理想的好车牌?
  • 力扣468 验证IP地址
  • 前端静态登录页面实现
  • 华为数通HCIA-网络参考模型(TCP/IP)
  • java快速生成数据库表文档(HTML、DOC、MD)
  • Dojo学习和常用知识