[导读]本系列博文内容链接如下:
【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所示浅黄色区域为对应的按键。
getch()获得的可显示字符的码值就是字符的ascii码值,具体情况见表1。
(二)控制按键编码
键盘的有些按键,作用并不是录入文本字符,而是代表输入了一些控制指令。这部分指令按键的码值分两种情况,单码和双码。单码码值范围为0~32之间,双码由两部分码组成,第一部分为0或者224,第二部分为0~255。
1、单码
常用的按键有4个:
序号 | 码值 | 键盘符号 |
1 | 8 | Backspace |
2 | 9 | Tab |
3 | 13 | Enter |
4 | 27 | Esc |
2、双码
(1)第一部分为224
序号 | 第一部分码值 | 第二部分码值 | 键盘符号 |
1 | 224 | 71 | Home |
2 | 224 | 72 | ↑ |
3 | 224 | 73 | PgUp |
4 | 224 | 75 | ← |
5 | 224 | 77 | → |
6 | 224 | 79 | End |
7 | 224 | 80 | ↓ |
8 | 224 | 81 | PgDn |
9 | 224 | 82 | Insert |
10 | 224 | 83 | Delete |
11 | 224 | 133 | F11 |
12 | 224 | 134 | F12 |
13 | 224 | 135 | F11第二功能 |
14 | 224 | 136 | F12第二功能 |
(2)第一部分为0
序号 | 第一部分码值 | 第二部分码值 | 键盘符号 |
1 | 0 | 59 | F1 |
2 | 0 | 60 | F2 |
3 | 0 | 61 | F3 |
4 | 0 | 62 | F4 |
5 | 0 | 63 | F5 |
6 | 0 | 64 | F6 |
7 | 0 | 65 | F7 |
8 | 0 | 66 | F8 |
9 | 0 | 67 | F9 |
10 | 0 | 68 | F10 |
11 | 0 | 84 | F1第二功能 |
12 | 0 | 85 | F2第二功能 |
13 | 0 | 86 | F3第二功能 |
14 | 0 | 87 | F4第二功能 |
15 | 0 | 88 | F5第二功能 |
16 | 0 | 89 | F6第二功能 |
17 | 0 | 90 | F7第二功能 |
18 | 0 | 91 | F8第二功能 |
19 | 0 | 92 | F9第二功能 |
20 | 0 | 93 | F10第二功能 |
(三)小键盘码值
大部分外接键盘和部分笔记本键盘带有数字输入专用的小键盘,如图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。详见下表。
序号 | 第一部分码值 | 第二部分码值 | 键盘符号 |
1 | 0 | 71 | Home |
2 | 0 | 72 | ↑ |
3 | 0 | 73 | PgUp |
4 | 0 | 75 | ← |
5 | 0 | 77 | → |
6 | 0 | 79 | End |
7 | 0 | 80 | ↓ |
8 | 0 | 81 | PgDn |
9 | 0 | 82 | Insert |
10 | 0 | 83 | Delete |
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