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

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 diji_weizhi_i;  //          行:0

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

12for循环推广应用:

刘春茂,李琪.C语言程序设计案例(第一版)北京:清华出版社.2018

相关文章:

C语言/C++ 之 打飞机游戏

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

在 Docker 中部署 Mino 并挂载配置文件

创建本地目录 首先&#xff0c;在主机上创建一个目录&#xff0c;用于存放 Mino 的配置文件。例如&#xff0c;创建一个名为 mino 的目录&#xff0c;用于存放 Mino 的配置文件。 mkdir mino拉取 Mino 镜像 使用以下命令从 Docker Hub 上拉取 Mino 的最新镜像&#xff1a; …...

无限脉动:释放音乐和区块链在音乐领域的力量

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

读发布!设计与部署稳定的分布式系统(第2版)笔记09_一窝蜂和容量

1. 停电事故后电力恢复的方式 1.1. 停电后常见的情形是&#xff0c;送电几秒钟后又再次断电 1.2. 数百万台空调和冰箱的用电需求&#xff0c;使刚刚恢复的电力供应发生过载 1.3. 当电力供应不足时&#xff0c;增加的电流很快就到达满负荷&#xff0c;导致过载&#xff0c;触…...

详解java定时任务

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

PCIe卡设计方案:单路12Gsps 3G 带宽模拟信号源PCIe卡

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

第1章 计算机网络和因特网

1、主机或端系统通过&#xff08; &#xff09;接入因特网。 A. ISPB. 调制解调器C. 交换机D. 路由器 P21&#xff1a;端系统&#xff08;PC、智能手机、Web 服务器、电子邮件服务器等&#xff09;经过一个接入 ISP 与因特网相连。 2、‌主机一般被划分为两类&#xff1a;客…...

QT入门基础知识

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

Leetcode---350周赛

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

Django通过Nginx和uWSGI实现负载均衡

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

单元测试框架——Junit5

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

centos 系列添加 yum 源

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

[Hive高级特性与 DDL和DML语法]

目录 &#x1f387;前言: &#x1f387; HiveQL语言的基本语法&#xff0c;包括DDL和DML两个方面。 &#x1f387;DDL&#xff08;数据定义语言&#xff09;&#xff1a; &#x1f387;DML&#xff08;数据操作语言&#xff09;&#xff1a; &#x1f387; Hive高级特性 多种…...

Web服务器群集:Web基础与HTTP协议

目录 一、理论 1.Web基础 2.HTTP协议 二、实验 1.浏览本地HTML页面 三、总结 一、理论 1.Web基础 &#xff08;1&#xff09;域名和DNS ① 域名 网络是基于TCP/IP 协议进行通信和连接的&#xff0c;每一台主机都有一个唯一的标识&#xff08;固定的IP地 址&#xff0…...

cmd命令常用速记

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

Python网络爬虫基础进阶到实战教程

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

树莓派使用VNC、SSH、Xrdp等方式进行远程控制的方法和注意事项

下面来总结一下远程操控树莓派用到的三种方式及其注意事项&#xff0c;其实这三种方式对于所有的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注入

原创稿件征集 邮箱&#xff1a;eduantvsion.com QQ&#xff1a;3200599554 黑客与极客相关&#xff0c;互联网安全领域里 的热点话题 漏洞、技术相关的调查或分析 稿件通过并发布还能收获 200-800元不等的稿酬 更多详情&#xff0c;点我查看&#xff01; 简介 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…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...