C语言/C++ 之 打飞机游戏
【项目简介】
1、设计思想:本项目主要是为了实现打飞机游戏,主要包括5个函数模块,和1个主函数框架。分别是chu_shi_hua();、you_cao_zuo;、wu_cao_zuo();、show();、main();等。项目完成过程中主要运用了C/C++中的输入输出流、调用函数、for循环函数、“清屏”函数、随机函数、以及无限循环函数等基本知识点。其中最难的三个函数模块设计思想如下:
(1)、构建主函数:首先得确定一堆数据的初始值,然后利用无限循环刷新函数实现游戏的运行。其中包含四个函数模块分别为数据初始化、游戏界面显示、无操作时函数、有操作时函数(按键)以及结束游戏语句即剩余关卡为0时游戏胜利,剩余生命为0时游戏失败。
(2)、编写游戏界面函数:为了让界面动起来,我选择了刷新函数,然后通过定义行和列来确定游戏中物体的位置,并在刷新的过程中实现行或者列的递增。
(3)、编写无操作函数:该函数里包含了速度的递增和击中与未击中和随机生成敌人语句。其中没击中两个敌人则速度加1 是通过的分判断例如if(de_fen%2==0) {level++;sheng_yu-=1;}。而击中敌人则隐藏子弹并且重新生成敌人,未击中则在生命减一的条件下随机生成一个敌人。
本项目是由小组成员共同协作完成,其中数据初始化模块由林正燃完成,无按键操作函数模块由薛泽鹏完成,其余函数由曹晶完成。
2、设计框架
(1)总体设计及功能框架
(2)打飞机游戏流程图
【使用工具】
Dev-C++
【数据结构】
int gao_du; //界面高度:20
int kuan_du; //界面宽度:25
int diji_weizhi_j; //敌机位置 列:rand()%宽度;
int wo_weizhi_i; //我的位置:列:宽度/2
int wo_weizhi_j; // 行:高度-1;
int zidan_weizhi_i; //子弹位置:列:我的位置的列
int zidan_weihzi_j; // 行:-1;
int de_fen; //得分:0
int level; //速度等级:0
int speed=0; //速度:0
int sheng_yu=9; //剩余关卡:9
int sheng_ming=5; //剩余生命:10
【最终程序】
#include<iostream>
#include <conio.h>
#include <cstdlib>
using namespace std;
int gao_du,kuan_du;
int dij_weizhi_j,diji_weizhi_i;
int wo_weizhi_i ,wo_weizhi_j ;
int zidan_weizhi_i,zidan_weihzi_j;
int de_fen,level;
int speed=0,sheng_yu=9,sheng_ming=5;
void chu_shi_hua()//确定一堆初始值
{gao_du=20; kuan_du=25;
dij_weizhi_j=4; diji_weizhi_i=0;
wo_weizhi_i =gao_du-1; wo_weizhi_j=kuan_du/2;
zidan_weizhi_i=-1; zidan_weihzi_j=wo_weizhi_j;
diji_weizhi_i=0; dij_weizhi_j=rand()%kuan_du;//随机生成敌机
de_fen=0; level=0;}
void show()//显示画面
{system("cls");//就是执行命令清屏的意思。
int i,j;
for (i=0; i<=gao_du;i++)
{for (j=0; j<=kuan_du;j++)
{ if(i==wo_weizhi_i &&j==wo_weizhi_j) cout<<"我";//weizhi_i,weizhi_j分别表示我所在位置的行和列
else if(i==zidan_weizhi_i&&j==zidan_weihzi_j) cout<<"凸";//同上
else if(i==diji_weizhi_i&&j==dij_weizhi_j) cout<<"敌机";
else if(i==gao_du) cout<<'-';
else if(j==kuan_du) cout<<'&';//输出边界
else cout<<' ';}
cout<<endl;}
cout<<"得分: "<<de_fen<<" "<<"剩余生命: "<<sheng_ming<<" "<<endl;
cout<<"剩余关卡:"<<sheng_yu<<" "<<" speed:"<<speed<<" "<<endl;
}
void wu_cao_zuo()
{
if(zidan_weizhi_i>-1) zidan_weizhi_i--;//子弹向上移动
if(speed<sheng_yu) speed++;//速度增加
if(speed==sheng_yu)
{
if(diji_weizhi_i<gao_du) {diji_weizhi_i++;}//敌机向下移动
else {diji_weizhi_i=0;dij_weizhi_j=rand()%kuan_du;}
speed=0;}
if(zidan_weizhi_i==diji_weizhi_i&&zidan_weihzi_j==dij_weizhi_j)//击中
{zidan_weizhi_i=-1;//隐藏子弹
diji_weizhi_i=0;//重新生成敌机
dij_weizhi_j=rand()%kuan_du;
de_fen++;
if(de_fen%2==0) //每击中两个通过一关
{level++;sheng_yu-=1;}}
if (wo_weizhi_i ==diji_weizhi_i&&wo_weizhi_j==dij_weizhi_j||diji_weizhi_i==gao_du-1) //击中
{sheng_ming--;
diji_weizhi_i=0;
dij_weizhi_j=rand()%kuan_du;} //生命值减一并且在随机生成一个敌机
}
void you_cao_zuo()
{char ch;
if (_kbhit())//按键时 kbhit() 在执行时,检测是否有按键按下。
{ch=_getch();
if(ch=='a') wo_weizhi_j--;
if(ch=='d') wo_weizhi_j++;
if(ch=='w') wo_weizhi_i--;
if(ch=='s') wo_weizhi_i++;
if(ch==' ') {zidan_weizhi_i=wo_weizhi_i -1;zidan_weihzi_j=wo_weizhi_j;}//子弹从我的位置发出
}}
int main()
{ chu_shi_hua(); //确定一堆初始值
while (true) //无线循环以下操作
{ show(); //显示屏幕
wu_cao_zuo(); //该函数是指在没有键盘输入时要做的
you_cao_zuo(); //该函数时有键盘输入时要做的
if(sheng_yu<=0) {cout<<"你赢啦"<<endl;break;} //剩余关卡为0时游戏胜利
if(sheng_ming==0) {cout<<"你失败了"<<endl;break;}//剩余生命为0时游戏失败
}
cout<<"******游戏结束啦*****"<<endl;
return 0;}
【程序最终运行情况】
1.开始运行
代表游戏开始,空格键表示攻击。从“我”发出“凸”,“敌机”随机生成并从顶端下落。当“凸”遇到“敌机”时界面清除,子弹和飞机一起消失,得分加1,当“敌机”到达下边界时则生命减1,击中敌机两次后,敌机速度会提高。
2.暂停游戏
当鼠标左键点击界面时,点击处会变成白点然后游戏暂停,再次操作键盘游戏会继续进行。
3.游戏失败
如果剩余剩余生命为1时 敌机落入我方最后一行代表游戏失败,也可以理解为剩余生命为0时游戏失败。显示“你失败了”并且游戏结束。
4.游戏胜利
如果剩余关卡为0时则代表游戏结束,显示“你赢了”并且游戏结束。
(注:可以更改初始化函数里的剩余生命以及剩余关卡或者更改if(de_fen%2==0)整除的数大小来改变每击中几个敌通过一关来改变关卡难度)
基础知识点:
谭浩强.C++面向对象程序设计(第三版)北京:清华出版社.2020
【12】for循环推广应用:
刘春茂,李琪.C语言程序设计案例(第一版)北京:清华出版社.2018
相关文章:

C语言/C++ 之 打飞机游戏
【项目简介】 1、设计思想:本项目主要是为了实现打飞机游戏,主要包括5个函数模块,和1个主函数框架。分别是chu_shi_hua();、you_cao_zuo;、wu_cao_zuo();、show();、main();等。项目完成过程中主要运用了C/C中的输入输…...

在 Docker 中部署 Mino 并挂载配置文件
创建本地目录 首先,在主机上创建一个目录,用于存放 Mino 的配置文件。例如,创建一个名为 mino 的目录,用于存放 Mino 的配置文件。 mkdir mino拉取 Mino 镜像 使用以下命令从 Docker Hub 上拉取 Mino 的最新镜像: …...

无限脉动:释放音乐和区块链在音乐领域的力量
音乐是一种永恒的通用语言,它将人们聚集在一起,超越了边界,在我们灵魂深处产生共鸣,创造联系。在当今数字时代,随着区块链技术和去中心化网络的出现,音乐世界正在经历一场深刻的变革。 我们在与艺术家合作&…...

读发布!设计与部署稳定的分布式系统(第2版)笔记09_一窝蜂和容量
1. 停电事故后电力恢复的方式 1.1. 停电后常见的情形是,送电几秒钟后又再次断电 1.2. 数百万台空调和冰箱的用电需求,使刚刚恢复的电力供应发生过载 1.3. 当电力供应不足时,增加的电流很快就到达满负荷,导致过载,触…...

详解java定时任务
在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现。下面LZ就其原理、实例以及Timer缺陷三个方面来解析java Timer定时器。 一、简介 在java中一个完整定时任务需要由Timer、TimerTask两个…...

PCIe卡设计方案:单路12Gsps 3G 带宽模拟信号源PCIe卡
一、板卡概述 单路3G带宽模拟信号源卡由DA子卡和PCIe底板组成,二者通过标准FMC连接器互联,可以实现将PCIe总线数据转换为一路高速的模拟量输出。北京太速科技板可广泛用于雷达、通信、光电领域的噪声信号、毛刺、脉冲信号模拟产生等领域。 二、 …...

第1章 计算机网络和因特网
1、主机或端系统通过( )接入因特网。 A. ISPB. 调制解调器C. 交换机D. 路由器 P21:端系统(PC、智能手机、Web 服务器、电子邮件服务器等)经过一个接入 ISP 与因特网相连。 2、主机一般被划分为两类:客…...

QT入门基础知识
什么是QT QT是一个跨平台的C图像用户界面应用程序框架QT在1991年由奇趣科技开发QT的优点 跨平台,几乎支持所有平台接口简单,容易上手一定程度上简化了内存回收机制有很好的社区氛围可以进行嵌入式开发 QWidget QT注意事项 命名规范 类名 首字母大写,单…...

Leetcode---350周赛
题目列表 6901. 总行驶距离 6890. 找出分区值 6893. 特别的排列 6447. 给墙壁刷油漆 一、总行驶距离 很显然,这题单纯就是一道数学应用题,我们要明白最关键的一点 :只有当mainTank>5并且additionalTank>0时,才能发生副油…...

Django通过Nginx和uWSGI实现负载均衡
Django是一款非常流行的Web应用程序框架,它允许开发人员以快速、简单和灵活的方式构建可扩展和可维护的Web应用程序。当你的应用程序开始变得越来越受欢迎时,你可能会发现需要使用负载均衡来确保应用程序的可用性和性能。在本文中,我们将介绍…...

单元测试框架——Junit5
文章目录 Junit1. 注解2.断言3.测试用例执行顺序4.测试套件Suite1) 指定多个类2) 指定包 5. 参数化1) 单参数2) 多参数3) 文件注入 6.动态参数 Junit Junit是一个开源的用于Java语言的单元测试框架,也是Java方向使用最广泛的单元测试框架。 在pom.xml中引入Junit5…...

centos 系列添加 yum 源
nginx 首先,安装 EPEL (Extra Packages for Enterprise Linux) 仓库。这是一个由 Fedora 项目提供的免费扩展软件包仓库,其中包含许多有用的软件包。 sudo yum install epel-release 接下来,导入 Nginx 的官方 GPG 密钥,以便验证安…...

[Hive高级特性与 DDL和DML语法]
目录 🎇前言: 🎇 HiveQL语言的基本语法,包括DDL和DML两个方面。 🎇DDL(数据定义语言): 🎇DML(数据操作语言): 🎇 Hive高级特性 多种…...

Web服务器群集:Web基础与HTTP协议
目录 一、理论 1.Web基础 2.HTTP协议 二、实验 1.浏览本地HTML页面 三、总结 一、理论 1.Web基础 (1)域名和DNS ① 域名 网络是基于TCP/IP 协议进行通信和连接的,每一台主机都有一个唯一的标识(固定的IP地 址࿰…...

cmd命令常用速记
cmd命令大全 常见的appwiz.cpl control calc 等,各类功能、设置、甚至是文件属性和系统版本,都可以通过命令的方式快速查看和操作,有助于我们的提高工作效率,具体见下文。 cmd命令:开始->运行->键入…...

Python网络爬虫基础进阶到实战教程
文章目录 认识网络爬虫HTML页面组成Requests模块get请求与实战效果图代码解析 Post请求与实战代码解析 发送JSON格式的POST请求使用代理服务器发送POST请求发送带文件的POST请求 Xpath解析XPath语法的规则集:XPath解析的代码案例及其详细讲解:使用XPath解…...

树莓派使用VNC、SSH、Xrdp等方式进行远程控制的方法和注意事项
下面来总结一下远程操控树莓派用到的三种方式及其注意事项,其实这三种方式对于所有的Linux系统来说都是适用的。 目录 一、ssh控制树莓派 1.开启 ssh服务方法一 2.开启 ssh服务方法二 二、VNC远程连接 三、xrdp远程连接 四、其他注意事项 一、ssh控制树莓派 S…...

C++ 第二弹封装-类和对象
目录 1.类的引入 2.类的定义方式 3.访问权限 4.封装 5.类也是作用域 6.类的实例化 7.如何求一个类的大小 8.this指针 9.默认成员函数 10.构造函数 11.析构函数 12.拷贝构造函数 13.赋值运算符重载 14.const的类成员 15初始化列表 16.static的类成员 17.友元 …...

浅析 GeoServer CVE-2023-25157 SQL注入
原创稿件征集 邮箱:eduantvsion.com QQ:3200599554 黑客与极客相关,互联网安全领域里 的热点话题 漏洞、技术相关的调查或分析 稿件通过并发布还能收获 200-800元不等的稿酬 更多详情,点我查看! 简介 GeoServer是一个开…...

1001router6-react
文章目录 1 一级路由2 Navigate3 NavLink 自定义高亮样式4 useRoutes()5 嵌套路由6 路由传参6.1 传递params参数6.2 传递search参数6.3 传递state参数 7 编程式导航7.1 路由跳转7.2 前进、后退 8 钩子函数8.1 useInRouterContext()8.2 useNavigationType()8.3 useOutlet()8.4 u…...

前端Vue自定义支付密码输入键盘Keyboard和支付设置输入框Input
前端Vue自定义支付密码输入键盘Keyboard和支付设置输入框Input, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id13166 效果图如下: # cc-defineKeyboard #### 使用方法 使用方法 <!-- ref:唯一ref pas…...

VB+ACCESS超市管理系统设计(源代码+系统)
超市管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。经过分析,我们使用 MICROSOFT公司的 VISUAL BASI…...

【机器学习】十大算法之一 “神经网络”
作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…...

【MarkDown】CSDN Markdown之流程图graphflowchart详解
基本语法 flowchart/graph 流程图(Flowcharts/Graphs)是由节点 (几何形状) 和连接线 (箭头或线条)组成的. Mermaid代码定义了节点和连线的编码方式,并支持不同的箭头类型、多向箭头以及子图之间的任意链接。 警告 如果在流程图的节点使用e…...

Git下:Git命令使用-详细解读
目录 一、Git 安装 二、Git 配置 三、Git 工作流程 四、Git 工作区、暂存区和版本库 五、常用 Git 命令清单 1. 创建仓库 2. 增加/删除文件 3. 代码提交 4. 分支管理 5. 标签 6. 查看历史提交 7. 远程仓库同步 8. 撤销操作 六、Git 常用命令速查表 七、Git 电子…...

一条SQL语句的前世今生
文章目录 MySQL 基础架构分析语句分析查询语句更新语句 总结 本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程,包括 SQL 的查询在 MySQL 内部会怎么流转,SQL 语句的更新是怎么完成的。 MySQL 基础架构分析 下图是 MySQL 的一个简要架构图ÿ…...

各种架构比较
架构特点适用领域x86- 市场份额大,广泛支持和应用<br>- 成熟稳定,软件生态丰富<br>- 相对较低的功耗<br>- 适用于桌面、服务器和嵌入式系统等桌面应用、服务器、嵌入式系统x86-64- 支持 64 位操作系统和应用程序<br>- 更大的内存…...

scapy定制数据包探测主机
kali 输入scapy 进入界面 scapy定制ARP协议 输入ARP().display()显示ARP包的详细信息 输入sr1(ARP(pdst"192.168.133.2")),向网关发送arp请求数据包 scapy定制PING包 输入IP().display()显示IP包的详细信息 输入ICMP().display()显示ICMP包的详细信息…...

【Java】Java核心要点总结70
文章目录 1. volatile 如何保证变量的可⻅性?2. volatile 可以保证原⼦性么?3. synchronized 关键字4. synchronized 和 volatile 的区别5. synchronized 和 ReentrantLock 的区别 1. volatile 如何保证变量的可⻅性? 在Java中,使…...

如何把一个 Git 仓库的分支加入另一个无关的 Git 仓库
文章目录 笔者需要将两个无关的 Git 仓库合并,也就是把一个 Git 仓库的分支加入另一个无关的 Git 仓库。笔者琢磨了一下之后就实现了。方法如下。 笔者的运行环境: git version 2.37.0.windows.1 TortoiseGit 2.11.0.0 IntelliJ IDEA 2023.1.1 (Ultima…...