打气球小游戏

news2024/11/15 17:37:16

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; //开始时闻、结束时间、频率F
	QueryPerformanceFrequency(&F);
	BeginBatchDraw();//获取频率F

	while (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.coloradmin.cn/o/1684887.html

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

相关文章

php部分特性漏洞学习

php部分函数漏洞学习 简单总结一些我遇到的ctf中的php的一些函数或特性的漏洞&#xff0c;我刷题还是太少了&#xff0c;所以很多例子来自ctfshow&#xff0c;以后遇到相关赛题再更新 1.MD5和其他hash 弱类型比较 php中&#xff0c;有两中判断相等的符号&#xff0c;和&…

【Linux】进程信号及相关函数/系统调用的简单认识与使用

文章目录 前言一、相关函数/系统调用1. signal2. kill3. abort (库函数)4. raise (库函数)5. alarm 前言 现实生活中, 存在着诸多信号, 比如红绿灯, 上下课铃声…我们在接收到信号时, 就会做出相应的动作. 对于进程也是如此的, 进程也会收到来自 OS 发出的信号, 根据信号的不同…

树莓派 Raspberry Pi M.2 HAT+ 现已发售!原理图流出!

​Raspberry Pi M.2 HAT 使您能够将 M.2 M-key 外设&#xff08;如 NVMe 驱动器和人工智能加速器&#xff09;连接到 Raspberry Pi 5。它能够提供与这些外设之间的快数据传输&#xff08;高达 500 MB/s&#xff09;&#xff0c;现在就可以从树莓派的授权经销商网络购买&#xf…

智能网关和交换机在智慧路灯杆上的用途差别

智慧路灯杆是智能城市建设中的一个重要组成部分&#xff0c;它整合了智能照明、视频监控、交通管理、环境监测、网络覆盖、信息发布、一键告警等多种功能。针对智慧路灯杆的使用场景&#xff0c;智能网关和交换机各自发挥着不同的作用&#xff0c;并且拥有各自的优缺点&#xf…

5.14.3 UNETR:用于 3D 医学图像分割的 Transformers

具有收缩和扩展路径的全卷积神经网络 (FCNN) 在大多数医学图像分割应用中表现出了突出的作用。在 FCNN 中&#xff0c;编码器通过学习全局和局部特征以及上下文表示来发挥不可或缺的作用&#xff0c;这些特征和上下文表示可用于解码器的语义输出预测。 在FCNN中&#xff0c;收缩…

包装类..

定义&#xff1a;基本数据类型对应的对象。 如何获取包装类&#xff1a;直接赋值即可&#xff1b;Integer i10; 其中的一个成员方法&#xff1a; public static int parseInt(String s)——把字符串类型的整数转成int 类型的整数。 8种包装类中&#xff0c;除了character都…

力扣刷题---1748.唯一元素的和【简单】

题目描述 给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。 请你返回 nums 中唯一元素的 和 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,2] 输出&#xff1a;4 解释&#xff1a;唯一元素为 [1,3] &#xff0c;和为 4 。 示例 2&#xff1a;…

单词可交互的弧形文本

在一个项目中&#xff0c;要求把少儿读本做成电子教材呈现出来&#xff0c;电子书的排版要求跟纸质书一致。其中&#xff0c;英语书有个需求&#xff1a;书中有些不规则排版的文本&#xff08;如下图所示&#xff09;&#xff0c;当随书音频播放时&#xff0c;被读到的文本要求…

注意力机制篇 | MSFE:即插即用的多尺度滑窗注意力(附源码实现)

前言:Hello大家好,我是小哥谈。多尺度滑窗注意力(Multi-Scale Sliding Window Attention,MSFE)是一种用于处理图像的深度学习模型。它通过引入多尺度特征提取和滑窗注意力机制来提高图像识别的准确性。在MSFE中,模型采用多尺度卷积神经网络来提取图像的特征,然后使用滑窗…

同旺科技 FLUKE ADPT 隔离版发布 ---- 2

所需设备&#xff1a; 1、FLUKE ADPT 隔离版 内附链接&#xff1b; 应用于&#xff1a;福禄克Fluke 12E / 15BMax / 17B Max / 101 / 106 / 107 应用于&#xff1a;福禄克Fluke 15B / 17B / 18B 正面&#xff1a; 反面&#xff1a; 侧面&#xff1a; 开孔位置&#xff08;可…

一种综合评价及决策方法:层次分析法AHP

大家好&#xff0c;层次分析法(Analytic Hierarchy Process&#xff0c;AHP)是一种多准则决策方法&#xff0c;它帮助决策者处理复杂的决策问题&#xff0c;将其分解成层次结构&#xff0c;然后通过两两比较来确定各个层次的因素之间的相对重要性。这种分析方式允许决策者对问题…

抖店,今年入场还有机会吗?从客观角度分析!

大家好&#xff0c;我是电商小V 伴随着短视频平台的兴起&#xff0c;也慢慢的步入了电商市场&#xff0c;成为了一个新的电商模式&#xff0c;抖音小店就是依靠着短视频达人带货的流量模式&#xff0c;可以说一直处于红利期&#xff0c;享受着这个短视频风口&#xff0c;也是吸…

前端更改线上请求地址

由于后台接口更改 , 线上请求地址需从 /api/api/ 改成 /api/ , 需实现的效果如下图 1 在原本的vite.config.js中将前端做的端口转发内容更改 , 更改一行即可 import { defineConfig } from vite import react from vitejs/plugin-react import path from path import * as fs …

C语言指针相关知识(第四篇章)(非常详细版)

文章目录 前言一、什么是回调函数二、qsort函数的介绍(默认升序排序)三、qsort函数的模拟实现&#xff08;通过冒泡排序&#xff09;总结 前言 本文介绍了回调函数&#xff0c;qsort函数的使用&#xff0c;以用冒泡排序来模拟实现qsort函数 提示&#xff1a;以下是本篇文章正文…

大语言模型量化方法对比:GPTQ、GGUF、AWQ 包括显存和速度

GPTQ: Post-Training Quantization for GPT Models GPTQ是一种4位量化的训练后量化(PTQ)方法&#xff0c;主要关注GPU推理和性能。 该方法背后的思想是&#xff0c;尝试通过最小化该权重的均方误差将所有权重压缩到4位。在推理过程中&#xff0c;它将动态地将其权重去量化为f…

【wvp】获取丢包及码率等参数

目录 设计 测试 swagger 设计 /** * 获取推流过程中的bytesSpeed,loss等统计信息 * 方案1&#xff1a;每个app stream 一个线程&#xff0c;定时获取统计信息。当subscribe 时&#xff0c;进行“增加&#xff1b;修改&#xff1b;加入队列”操作。 * 缺点&#xff1a; 占用…

linux mail命令及其历史

一、【问题描述】 最近隔壁组有人把crontab删了&#xff0c;crontab这个命令有点反人类&#xff0c;它的参数特别容易误操作&#xff1a; crontab - 是删除计划表 crontab -e 是编辑&#xff0c;总之就是特别容易输入错误。 好在可以通过mail命令找回&#xff0c;但是mai…

CentOS-9配置静态IP地址

查看配置命令nmcli CentOS 9 使用 nmcli 命令行工具进行网络配置。以下是配置静态 IP 地址的步骤和示例代码&#xff1a;相对以前centos7之类的&#xff0c;9版本的默认的网络是NetworkManager&#xff0c;网络配置也有较大改变 nmcli con show用vim进行编辑配文件 cd /etc/…

ESP32学习笔记:WS2812B驱动

WS2812B是一款贴片RGB灯。由于采用了单总线通讯&#xff0c;所以需要特别关注下它的通讯时序。 调试细节&#xff1a; 本来以为会是一个比较简单的调试&#xff0c;结果还是花了很长时间才调试完成。 首先是关于ESP32的纳秒级延时确定&#xff0c;当时按照空指令始终调试不出来…

ECharts实现地图飞线

echarts版本&#xff1a;https://echarts.apache.org/zh/changelog.html v5.x.x版本&#xff1a;不提供china.js和china.json文件 v4.x.x版本&#xff1a;使用npm安装echarts&#xff0c;默认包含china.js和china.json文件 目录 一、Html工程 二、vue工程 三、vue工程 四、矢…