打气球小游戏

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

我们就可以执行

 

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

几年前写的一个小工具

几年前写的一个工具&#xff0c;开发工具 是Delphi7 UniDAC FastReport2.53 &#xff0c;开发时间不到8小时&#xff08;同时还在处理其他事情&#xff09;。 其实把这个翻出来&#xff0c;是想说说俺的一个同事。他是俺这几年遇到的最优秀的人之一。他负责售后维护部&#x…

浅谈AI大模型的数据特点和应用问题

【摘要】AI大模型的训练、推理及应用落地都需要大量的数据&#xff0c;其数据具有参数和数据量大、质量要求高、行业垂直属性强、资源消耗大等特点&#xff0c;由此带来的个人隐私泄露、数据中毒、数据篡改等数据安全风险已成为业界必须应对的重要议题。目前大模型的规模化应用…

使用 LlamaParse 进行 PDF 解析并创建知识图谱

此 Python 笔记本提供了有关利用 LlamaParse 从 PDF 文档中提取信息并随后将提取的内容存储到 Neo4j 图形数据库中的综合指南。本教程在设计时考虑到了实用性&#xff0c;适合对文档处理、信息提取和图形数据库技术感兴趣的开发人员、数据科学家和技术爱好者。 该笔记本电脑的主…

怎么判断一家公司是否有前景

前段时间&#xff0c;有个老铁&#xff0c;给我发了一长串文字&#xff0c;看得我头皮发麻。 好在&#xff0c;他情商很高&#xff0c;买了我一个小时的时间&#xff0c;我才硬着头皮看完&#xff0c;根据他的情况&#xff0c;跟他打了电话交流。 他目前的处境&#xff0c;是在…

干G货,性能测试基本方法和原则,

一、性能测试关键点 评估性能指标——线程tps&#xff08;可架构给&#xff09; 吞吐量qps&#xff08;可架构给&#xff09; 错误率&#xff08;可架构给&#xff09; 平均响应时间&#xff08;可架构给&#xff09;模拟线上数据量了解接口有没有缓存&#xff0c;有缓存的需要…

HIOKI日置阻抗分析仪IM7583

HIOKI日置阻抗分析仪IM7583 HIOKI日置阻抗分析仪IM7583 HIOKI日置阻抗分析仪IM7583 功率分析仪 PW6001 基本参数 测量线路 单相2线&#xff0c;单相3线&#xff0c;三相3线&#xff0c;三相4线 输入通道数 zui大6ch&#xff0c;电压/电流同时单位是1ch &#xff08;电压测…

ClickHouse配置与使用

静态IP配置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic IPADDR192.168.18.128 NETMASK255.255.255.0 GATEWAY192.168.18.2 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INIT…

OSPF路由聚合

原理概述 与RIP不同&#xff0c;OSPF不支持自动路由聚合&#xff0c;仅支持手动路由聚合。OSPF的路由聚合有两种机制&#xff1a;区域间路由聚合和外部路由聚合。区域间路由聚合必须配置在ABR路由器上&#xff0c;指的是ABR在把与自己直接相连区域&#xff08;Area&#xff09…

5.23.1 深度学习在乳腺癌成像中的应用

乳腺成像在早期发现乳腺癌以及在治疗期间监测和评估乳腺癌方面发挥着重要作用。最常用的乳腺成像方式是数字乳房X线摄影、数字乳腺断层合成、超声和磁共振成像。 传统的 CAD 系统基于传统的机器学习 (ML) 技术&#xff1b;预定义&#xff08;手工制作&#xff09;的特征是系统…

汽车摄像头智能画质增强解决方案,高品质车载视觉系统

在数字化与智能化浪潮的推动下&#xff0c;汽车行业正经历着一场前所未有的技术革命。其中&#xff0c;车载摄像头作为智能驾驶与安防监控的核心部件&#xff0c;其画质的高低直接关系到行车安全与驾驶体验。美摄科技&#xff0c;作为行业领先的智能图像技术解决方案提供商&…

想在抖音做电商怎么操作?我的建议是......

我是王路飞。 想在抖音做电商&#xff0c;应该怎么操作呢&#xff1f; 我的建议是&#xff0c;开通一个抖音小店就可以了~ 想了解抖音电商内容的&#xff0c;可以认真看完这篇文章~ 内容来源于【电商王路飞】 先给你们解答一些概念类的问题。 抖店和橱窗是一个东西吗&…

不闭合三维TSP:蛇优化算法SO求解不闭合三维TSP(起点固定,终点不定,可以更改数据集),MATLAB代码

旅行商从城市1出发&#xff0c;终点城市由算法求解而定 部分代码 close all clear clc global data load(data.txt)%导入TSP数据集 Dimsize(data,1)-1;%维度 lb-100;%下界 ub100;%上界 fobjFun;%计算总距离 SearchAgents_no100; % 种群大小&#xff08;可以修改&#xff09; …

Centos7.9安装卸载Docker

文章目录 1、官网安装1.1、卸载旧版本Docker1.2、通过rpm仓库安装1.2.1、设置仓库1.2.2、安装Docker Engine1.2.3、启动Docker1.2.4、验证安装 1.3、通过rpm软件包安装1.4、通过便捷脚本安装 2、yum安装2.1、安装docker-ce以及客户端2.2、启动docker2.3、配置镜像加速 3、卸载D…

【情感大师智能体】:定制专属情感支持

文章目录 &#x1f4d1;前言一、快速创建智能体二、配置表单2.1 基础配置2.2 指令配置什么是指令&#xff08;prompt&#xff09;&#xff1f; 2.3 我的指令如下&#xff1a; 三、体验发布四、小结 &#x1f4d1;前言 随着智能体技术的快速发展&#xff0c;用户对智能体的需求不…

buuctf的RSA(二)

1.RSA 知道 flag.enc 和 pub.key&#xff0c;典型的加密、解密 将pub,key 改为pub.txt 打开后发现公钥 在RSA公私钥分解 Exponent、Modulus&#xff0c;Rsa公私钥指数、系数(模数)分解--查错网 进行解密 得到e65537 n8693448229604811919066606200349480058890565…

全网最全面的由浅到深的Kotlin基础教程(七)

前言 本篇文章接着上一篇文章全网最全面的由浅到深的Kotlin基础教程&#xff08;六&#xff09;继续进阶学习kotlin&#xff0c;建议看完上一篇文章&#xff0c;再来看本篇文章。本篇主要分析一些常用的kotlin函数源码&#xff0c;以及用kotlin简单实现Rxjava的几个操作符。坚…

来盘点我的校园生活(3)

来公布上期数学题答案:12 你算对了吗&#xff1f; 今天我们班真是炸开了锅。事情是这样的&#xff0c;我今天早晨上学&#xff0c;学校不让早到&#xff0c;但我一个不小心早到了&#xff0c;主任的规定是尽量不早到&#xff0c;早到不扣分&#xff0c;倒要站在那儿背书&…

「项目」负载均衡在线OJ(ONLINE_JUDGE)系统

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

使用python实现socket进行消息传输-demo

Socket 是什么 Socket 是一种在计算机网络中用于实现进程间通信的一种机制。它是网络编程中的重要概念&#xff0c;通过它可以在不同的计算机之间进行数据传输和通信。Socket 可以用于实现各种网络应用&#xff0c;包括客户端-服务器模型、P2P 应用等。基本上&#xff0c;Sock…

uniappx 应用未读角标插件(完善推送、通知、消息效果) Ba-Shortcut-Badge-U

简介&#xff08;下载地址&#xff09; Ba-Shortcut-Badge-U 是设置应用未读角标的原生插件&#xff0c;UTS版本&#xff08;同时支持uniapp和uniappx&#xff09; 支持设置未读、清空未读支持机型有Huawei、oppo、xiaomi、Samsung、Sony、LG、HTC、ZUK、ASUS、ADW、APEX、NO…