打气球小游戏

1.气球往上飘

我们声明两个符号常量来作为窗体的长和宽,接着就是常规操作

#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600#include<easyx.h>
#include<stdio.h>
int main()
{initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);setbkcolor(WHITE);cleardevice();getchar();
}

接下来我们就要用彩色圆形当作气球,让5个气球从窗体的底部出现,飘到窗体的顶部后消失

那么气球是具有这么几个属性的

  1. 圆心坐标
  2. 半径
  3. 移动速度

那么我们就可以声明一个结构体用于保存这样几个属性数据

typedef struct
{int x, y;int r;int v;COLORREF color;
}ballon;

我们再设置两个宏

#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
#define MAX_IN_WINDOW 5 //窗体同时出现的气球数量
#define BALLOON_RADIUS 30 //气球半径#include<easyx.h>
#include<stdio.h>typedef struct
{int x, y;int r;int v;COLORREF color;
}balloon;
int main()
{initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);setbkcolor(WHITE);cleardevice();getchar();
}

为了记录这些气球的数据,我们声明一个结构数组来保存这些气球的数据

	balloon arrBalloons[MAX_IN_WINDOW];//保存窗体内气球数据

接下来我们就可以给气球中的成员设置初始值

	for (int i = 0; i < MAX_IN_WINDOW; i++)//初始化数据{int m, n;m = 100;//坐标区间n = 700;arrBalloons[i].x = rand() % (n - m + 1) + m;//【100,700】arrBalloons[i].y = WINDOW_HEIGHT;//圆心y设置初始值arrBalloons[i].r = BALLOON_RADIUS;//设置圆形半径m = 1;//速度区间n = 3;arrBalloons[i].v = rand() % (n - m + 1) + m;//【1,3】 arrBalloons[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);}

我们再设置一下帧率

#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
#define MAX_IN_WINDOW 5 //窗体同时出现的气球数量
#define BALLOON_RADIUS 30 //气球半径#include<easyx.h>
#include<stdio.h>typedef struct
{int x, y;int r;int v;COLORREF color;
}balloon;
int main()
{initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);setbkcolor(WHITE);cleardevice();balloon arrBalloons[MAX_IN_WINDOW];//保存窗体内气球数据for (int i = 0; i < MAX_IN_WINDOW; i++)//初始化数据{int m, n;m = 100;//坐标区间n = 700;arrBalloons[i].x = rand() % (n - m + 1) + m;//【100,700】arrBalloons[i].y = WINDOW_HEIGHT;//圆心y设置初始值arrBalloons[i].r = BALLOON_RADIUS;//设置圆形半径m = 1;//速度区间n = 3;arrBalloons[i].v = rand() % (n - m + 1) + m;//【1,3】 arrBalloons[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);}timeBeginPeriod(1);LARGE_INTEGER startcount, endcount, F; //开始时闻、结束时间、频率FQueryPerformanceFrequency(&F);BeginBatchDraw();//获取频率Fwhile (1){QueryPerformanceCounter(&startcount);// 获取起始计数cleardevice(); for (int i = 0; i < MAX_IN_WINDOW; i++)//根据气球数组中的数据绘制出气球{setfillcolor(arrBalloons[i].color);solidcircle(arrBalloons[i].x, arrBalloons[i].y, arrBalloons[i].r);}for (int i = 0; i < MAX_IN_WINDOW; i++)//将每个气球进行移动arrBalloons[i].y -= arrBalloons[i].v;QueryPerformanceCounter(&endcount);// 获取结束计数long long elapse = (endcount.QuadPart - startcount.QuadPart) * 1000000 / F.QuadPart;//计算时差while (elapse < 1000000/60)//60帧{Sleep(1);QueryPerformanceCounter(&endcount);elapse = (endcount.QuadPart - startcount.QuadPart) * 1000000 / F.QuadPart;}FlushBatchDraw();}EndBatchDraw();timeEndPeriod(1);getchar();
}

运行一下,发现报错了 

注意timeBeginPeriod(1);    timeEndPeriod(1);这两个函数是在库<winmm.lib> 里,而默认情况下链接器不会输入这个库文件

我们需要将这个库添加到工程配置的链接器输入当中

 注意:这两个函数必须配对使用

 很好看啊!!

2.删除已经消失的气球

我们先在主循环设置一个变量,记录当前窗体出现的小球数量

那么我们怎么判断小球已经消失了呢?

我们知道最顶端的y的值是0,小球的半径是BALLON_RADIUS,那么小球离开窗体的y的范围应该是y<=BALLON_RADIUS

我们就可以执行

 

那么我们现在就要重点讨论如何从数组中删除元素

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

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

相关文章

网关过滤器使用及其原理分析

1.网关过滤器介绍 网关过滤器的用途一般是修改请求或响应信息,例如编解码、Token验证、流量复制等 官方文档地址:Spring Cloud Gateway 网关过滤器分为GloablFilter、GatewayFilter及DefaultFilter 过滤器的执行顺序由Order决定,Order值越小,优先级越高,越先执行 1.1…

vmware 安装系统提示无法启用3D加速的解决

起因&#xff1a;朋友要在虚拟机打游戏&#xff0c;然后就叫我帮忙搞虚拟机&#xff0c;安装的是当前最新的17.1.5 Pro。 说说他老母鸡的情况&#xff1a;i7 10th 32G 显卡1060&#xff0c;这个配置呢&#xff0c;开启虚拟机3D是正常没问题的。因为我的显卡也是这个。本地的显…

linux platform 总线(设备树)驱动

使用文档 设备树修改 新增一个 LED 节点 arch/arm/boot/dts/arm/vexpress-v2p-ca9.dts my_pl_led {compatible "arm, cortex-a9-led";status "okay";};设备树编译 make dtbs日志 DTC arch/arm/boot/dts/arm/vexpress-v2p-ca9.dtbplatform driver …

python+selenium - UI自动框架之封装浏览器引擎driver方法

在做兼容性测试的适合&#xff0c;可以运行指定的浏览器&#xff08;IE,Chrome,Edge&#xff09; 目录文件&#xff1a; from selenium import webdriver from urllib3.exceptions import ProtocolError from common.log import *def getDriver():# if browserType is None:br…

数据分析必备:一步步教你如何用Pandas做数据分析(6)

1、Pandas 函数应用 Pandas 重建索引操作实例 要将您自己或其他库的函数应用于Pandas对象&#xff0c;您应该了解三个重要的方法。方法如下所述。要使用的适当方法取决于您的函数是希望对整个数据帧进行操作&#xff0c;还是行操作还是按列操作&#xff0c;还是按元素操作。 表…

多进程操作文件

最近在调试多进程编程的时候&#xff0c;发现父进程打开过文件后&#xff0c;创建子进程&#xff0c;子进程会拷贝父进程的文件描述符&#xff0c; 举例&#xff0c;比如是串口设备&#xff0c;父进程打开串口后又关闭了串口&#xff0c;可是下次再打开就打不开了&#xff0c; …

模拟面试题

1.装箱和拆箱是指什么&#xff1f; 装箱——把栈中内容迁移到堆中去&#xff08;值转引用&#xff09; 拆箱——把堆中内容迁移到栈中去&#xff08;引用转值&#xff09; 2.值和引用类型在变量赋值时的区别是什么&#xff1f; 值类型&#xff1a;赋值时复制数据本身&a…

Gitee在已有项目基础上创建仓库中遇到的问题和解决

问题一&#xff1a;fatal: remote origin already exists 解释&#xff1a;当前仓库添加了一个名为"origin"的远程仓库配置&#xff0c;此时输入 git remote add origin https://xxx就会提示上面的内容。 解决方案1:移除旧的origin git remote remove origin 解决方案…

C++——mapset红黑树

目录 一补充知识 1关联式容器 2键值对 二set 1set的介绍 2set的使用 三map 1map的说明 2map的使用 四容器在oj中的使用 五AVL树 1概念 2插入 3AVL的旋转 3.1右单旋 3.2左单旋 3.3左右双旋 3.4右左双旋 4判断AVL树是否平衡 完整源代码 六红黑树 1概念 2性…

【Shader】Unity曲面弯曲效果

本期分享一个弯曲效果的Shader&#xff0c;类似于地铁跑酷的跑道 1、Shaer代码 Shader "Unlit/CurvedUnlit" { Properties{_MainTex ("Texture", 2D) "white" {}}SubShader{Tags { "RenderType""Opaque" }LOD 100Pass{CGP…

紫光展锐突破创新终端品类,搭载展锐芯的全球首款二合一5G云电脑正式发布

近日&#xff0c;搭载紫光展锐5G芯片T760的中兴云电脑逍遥系列正式发布&#xff0c;亮点&#xff1a; 全球首款二合一5G云电脑&#xff0c;支持本地/云端双模式&#xff0c;一键切换&#xff0c;用户可同时享有Android平板和Windows云电脑两种形态&#xff1b;支持5G蜂窝网络&…

C++相关概念和易错语法(13)(string的模拟实现)

string由于存在字符串和单字符的概念&#xff0c;使得它的一些接口&#xff0c;实现要比vector多一些。本质上来看string的实现是在顺序表的基础上加入串相关的操作。下面我会分享如何模拟实现string&#xff0c;这可以进一步提高我们对string的熟练程度。 1.构造函数、拷贝构…

附代码:策略常用-正余弦优化算法

正余弦优化算法作为群智能优化算法的一种, 正弦余弦算法 (sine cosine algorithm, SCA) 是 2016 年由 Mirjalili 提出的一种新型仿自然优化算法, 通过创建多个随机候选解, 利用正余弦函数的数学性质来平衡算法在搜系过程中的全局探索和局部开发能力。该算法具有结构简单、参数少…

docker三种自定义网络(虚拟网络) overlay实现原理

docker提供了三种自定义网络驱动&#xff1a;bridge、overlay、macvlan。 bridge驱动类似默认的bridge网络模式。 overlay和macvlan是用于创建跨主机网络。 支持自定义网段、网关&#xff0c;docker network create --subnet 172.77.0.0/24 --gateway 172.77.0.1 my_n…

PPT大珩助手新功能-生成迷宫

大珩助手是一款功能丰富的办公软件插件&#xff0c;它主要分为两个版本&#xff1a;PPT大珩助手和Word大珩助手。这两个版本都旨在提高用户在处理演示文稿和文档时的效率。 PPT大珩助手 这是一款专门为Microsoft PowerPoint设计的插件。它提供了多种功能&#xff0c;例如素材…

类与对象:抽象类、Object类和内部类

一.抽象类 1.概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。 抽象类也是类&#…

盲人社区生活支持体系:织就一张温暖的网

在当今社会&#xff0c;构建一个全面、包容的盲人社区生活支持体系成为了推动社会进步、保障残障人士权益的重要议题。随着科技的不断革新&#xff0c;一款名为“蝙蝠避障”的辅助软件走进了盲人的日常生活&#xff0c;它如同一位无形的向导&#xff0c;通过实时避障与拍照识别…

element DatePicker 日期选择器设置禁用未来日期,时间范围为60天

需要用到 DatePicker 里面的 picker-options 方法 disabledDate onPick方法 <el-date-pickerv-model"form.xxxx"type"daterange"value-format"yyyy-MM-dd":clearable"false":picker-options"pickerOptions"start-placeho…

运行Android项目时,提示错误: 程序包javax.annotation.processing不存在

今天在运行项目时提示错误: 错误: 程序包javax.annotation.processing不存在 import javax.annotation.processing.Generated; 最后是修改了Android Studio的JDK的路径修改为你安装的JDK路径&#xff0c;完成的修复&#xff1a;

5.23 Linux中超时检测方式+模拟面试

1.IO多路复用的原理&#xff1f; IO多路复用使得一个或少量线程资源处理多个连接的IO事件的技术。对于要处理的多个阻塞的IO操作&#xff0c;建立集合并存储它们的文件描述符&#xff0c;利用单个阻塞函数去监控集合中文件描述符事件到达的情况&#xff0c;&#xff08;如果到…