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

news2024/11/28 10:40:26

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

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

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

一、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~255之间,双码由两部分码组成,第一部分为0或者224,第二部分为0~255。

1、单码

常用的按键有5个:

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

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第二功能

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

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

编写程序来显示。

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
32

4、控制按键双编码

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/793415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker配置阿里云容器镜像加速

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

目录操作在C语言中:一个全面的指南

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…

7.26 Qt

用QT制作一个登陆界面 运行代码 login.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> //信息调试类&#xff0c;用于输出 #include <QIcon> //图标类头文件 #include <QPushButton&…

更新合集 | 七月功能上新记

点击链接了解详情 七月来临&#xff0c;正式开启 2023 下半年的新征途&#xff01;这个盛夏&#xff0c;腾讯云 CODING 上线了微信扫码注册、微信通知、Go 制品管理等重点能力&#xff0c;为企业及团队研发管理带来更多便利&#xff01;以下是 CODING 新功能速递&#xff0c;快…

一文搞定IP地址

IP编址系列文章&#xff08;上&#xff09; 目录 一&#xff0c;什么是IP地址&#xff1f; 二&#xff0c;IP地址的表示方式 问题&#xff1a;计算机能识别二进制&#xff1f;十进制&#xff1f;十六进制&#xff1f; 三&#xff0c;二进制如何转换为十进制呢&#xff1f; …

如何准备远程开发环境

准备一台有root权限的服务器 创建用于开发的子用户 使用adduser命令创建新用户: sudo adduser newuser为新用户添加sudo权限,编辑sudoers文件: sudo visudo在文件中添加: newuser ALL(ALL:ALL) ALL将新用户添加到docker用户组: sudo usermod -aG docker newuser改权限 ch…

Java 聊天程序案例

单线程版本&#xff1a; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner;//服务端 public class Server {public static void main(String…

HikariCP连接池

HikariCP连接池 HikariCP连接池是高性能的JDBC连接池&#xff0c;官网标注的三大特点&#xff1a;快速、简单、可靠&#xff0c;性能优于其他连接池。 官网详细地说明了HikariCP所做的一些优化&#xff0c;总结如下&#xff1a; 字节码精简&#xff1a;优化代码&#xff0c;直…

领跑人机协同时代!实在智能与EFCIO携手举办AI沙龙,推动企业数字化转型

GPT翻开了AGI&#xff08;通用人工智能&#xff09;领域的新篇章&#xff0c;也开启了各行各业的新时代。毫不夸张地说&#xff0c;进入大模型时代&#xff0c;所有的应用都值得被重写一遍。同时&#xff0c;企业也需要积极采纳新技术和创新模式&#xff0c;以应对竞争压力和不…

MURF2080CT/MURF2080CTR-ASEMI快恢复对管

编辑&#xff1a;ll MURF2080CT/MURF2080CTR-ASEMI快恢复对管 型号&#xff1a;MURF2080CT/MURF2080CTR 品牌&#xff1a;ASEMI 芯片个数&#xff1a;2 芯片尺寸&#xff1a;102MIL*2 封装&#xff1a;TO-220F 恢复时间&#xff1a;50ns 工作温度&#xff1a;-50C~150C…

代码随想录day28

46. 全排列 思路&#xff1a;这道题首先是一个排列问题&#xff0c;排列问题是讲究顺序的&#xff0c;例如[1,2]和[2,1]是两个不一样的排列&#xff0c;这里的1我们会有重复使用到&#xff0c;但是&#xff0c;在每一个排列中&#xff0c;每一个元素只能使用一次。所以需要一个…

外贸行业企业邮箱选择:安全好用的邮箱服务

随着全球化的发展&#xff0c;外贸行业在全球经济中越来越重要。作为一家从事对外贸易的企业&#xff0c;可靠、安全、易用的邮箱系统对于成功的国际交易至关重要。为您的企业选择正确的邮箱解决方案可能是一个挑战。为了使选择过程更加简化&#xff0c;我们在这里提供了一些提…

C++模板的简单练习

运行代码&#xff1a; #include"std_lib_facilities.h"template <class T>struct S { private:T val; public:S<T>() :val(T()) {}S<T>(T tt) : val(tt) {};T& get();void set(T tt) { val tt; }ostream& operator << (ostream&a…

为什么 Splashtop 是更好用的 iOS 远程桌面应用

全球远程桌面软件市场最近达到19.2亿美元&#xff0c;表明使用任意设备实现随处远程控制越来越受欢迎。 近年来&#xff0c;企业的运营方式发生了重大改变&#xff0c;远程桌面软件已成为广泛使用的解决方案。Splashtop 是目前最好用的远程桌面工具之一&#xff0c;安全可靠且…

Android安卓实战项目(2)---健身UI APP(源码在文末)

Android安卓实战项目&#xff08;2&#xff09;—健身UI APP&#xff08;源码在文末&#xff09; 一.项目运行介绍 1.大致浏览 2.功能介绍 &#xff08;1&#xff09;功能一 第一个界面点击后可以弹出图像&#xff0c;如图&#xff1a; &#xff08;2&#xff09;功能二 界…

[Spring] 三级缓存解决循环依赖详解

什么是循环依赖 注册一个bean对象的过程&#xff1a; Spring扫描class得到BeanDefinition – 根据得到的BeanDefinition去生成bean – 现根据class推断构造方法 – 根据推断出来的构造方法&#xff0c;反射&#xff0c;得到一个对象 – 填充初始对象中的属性(依赖注入) – 如果…

window的anaconda下安装opencv

window安装opencv 阿巴阿巴&#xff0c;安装了多少遍的opencv今天居然搞了这么久。整理一下笔记把。 解决思路主要来源于&#xff1a;(37条消息) 导入import cv2时出现ImportError:DLL load fail:找不到指定模块的解决办法_import cv2 importerror: dll load failed: 找不到指定…

【C进阶】指针进阶(1)_二次复习版

目录 1. 字符指针 1.1常量字符串的修改 加上const解决问题 打印常量字符串 1.2数组存放的字符串 1.3例题:数组创建与常量池的区别 2. 指针数组 2.1字符指针数组 2.2整型指针数组 2.3使用3个一维数组,模拟实现一个二维数组 2.4例题: 3.数组指针 3.1 数组指针的定义…

快速上手Webpack打包指南:用简单的步骤掌握Webpack的使用技巧

目录 概念&#xff1a;1. webpack 打包简介1.0 多个 JS 文件打包&#xff1a;1.1 webpack 数组形式1.2 webpack 对象形式 总结 Webpack的打包过程可以总结为以下几个步骤&#xff1a; 1.入口点配置&#xff1a;在Webpack的配置文件中&#xff0c;我们需要指定一个或多个入口点…

Android Studio 代码模板插件实现

Android Studio 代码模板插件 背景 可以跳过背景和简述&#xff0c;从模板插件实现开始看. 开发新页面时&#xff0c;原先需要写一堆模板代码。比如用Databinding写列表结构的页面&#xff0c;需要手写以下文件&#xff1a; XxActivity.ktXxFragment.ktXxViewModel.ktXxListA…