easyx图形库基础:3实现弹球小游戏
实现弹球小游戏
- 一.实现弹球小游戏:
- 1.初始化布:
- 2.初始化一个球的信息:
- 3.球的移动和碰撞反弹
- 4.底边挡板的绘制和移动碰撞重置数据。
- 二.整体代码:
一.实现弹球小游戏:
1.初始化布:
int main()
{initgraph(800, 600);setorigin(400, 300);setaspectratio(1, -1);setbkcolor(RGB(188, 227, 245));cleardevice();getchar();closegraph();
}
画面效果:

2.初始化一个球的信息:
1.球的中心点坐标,球的半径,
2.球的实际速度,水平竖直的分量速度。
3.球的颜色。
4.定义一个结构体去保存这些数值。
#define radius 30typedef struct ball {double x, y;double v, vx, vy;int radius;COLORREF colour;
}Ba;

//初始化球:
void InitBall(Ba* ball)
{//在一个范围内随机生成一个球,数值全部都是随机的ball->x = ((rand() % 301) - 150);//[-150,150]ball->y = ((rand() % 201) - 100);//生成随机速度ball->v = (rand() % 6)+3;//[3,8];//生成随机的角度:int thead = rand() % 360;//定义水平竖直的速度:ball->vx = ball->v *cos((double)thead);ball->vy = ball->v *sin((double)thead);//初始化颜色;ball->colour = GREEN;
}
3.球的移动和碰撞反弹

//球的移动和碰撞反弹
void CrashBall(Ba* ball)
{while (1){cleardevice();//设置颜色绘制球;setfillcolor(ball->colour);fillcircle(ball->x, ball->y,radius);Sleep(40);//球的移动(ball->x) += (ball->vx);(ball->y) += (ball->vy);//判断球是否到墙壁;//不考虑底边是否存在挡板的情况;if ((ball->x >= 400 - radius) || (ball->x <= -400 + radius)){ball->vx = (-(ball->vx));}if ((ball->y >= 300 - radius) || (ball->y <= -300 + radius)){ball->vy = (-(ball->vy));}}
}
4.底边挡板的绘制和移动碰撞重置数据。

void CrashBall(Ba* ball)
{int left, top, right, bottom;left = -100, top = -270;right = 100, bottom = -300;while (1){cleardevice();//设置颜色绘制球;setfillcolor(ball->colour);fillcircle(ball->x, ball->y,radius);//绘制挡板setfillcolor(RGB(113, 187, 234));//挡板不可以出界fillrectangle(left, top, right, bottom);Sleep(40);//球的移动(ball->x) += (ball->vx);(ball->y) += (ball->vy);//控制挡板移动if (_kbhit()){char ch = _getch();switch (ch){case 'a':case 'A':if (left < -400)break;left -= 5;right -= 5;break;case 'd':case 'D':if (right > 400)break;left += 5;right += 5;break;}}//判断球是否到墙壁;//不考虑底边是否存在挡板的情况;if ((ball->x >= 400 - radius) || (ball->x <= -400 + radius)){ball->vx = (-(ball->vx));}if ((ball->y >= 300 - radius)){ball->vy = (-(ball->vy));}//撞到挡板if ((ball->x >= left) && (ball->x <= right)){if (ball->y <= -240)ball->vy = (-(ball->vy));}//判断出界if ((ball->x < left) || (ball->x > right)){if (ball->y < -300){InitBall(ball);left = -100, top = -270;right = 100, bottom = -300;}}}
}
二.整体代码:
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<easyx.h>
#include<conio.h>
#include<time.h>
#include<math.h>
#include<stdbool.h>#define radius 30
#define move 10typedef struct ball {double x, y;double v, vx, vy;COLORREF colour;
}Ba;//初始化球:
void InitBall(Ba* ball)
{//在一个范围内随机生成一个球,数值全部都是随机的ball->x = ((rand() % 301) - 150);//[-150,150]ball->y = ((rand() % 201) - 100);//生成随机速度ball->v = (rand() % 6) + 5;//[5,11];//生成随机的角度:int thead = rand() % 360;//定义水平竖直的速度:ball->vx = (ball->v) * cos((double)thead);ball->vy = (ball->v) * sin((double)thead);//初始化颜色;ball->colour = GREEN;
}//球的移动和碰撞反弹void CrashBall(Ba* ball)
{int left, top, right, bottom;left = -100, top = -270;right = 100, bottom = -300;while (1){cleardevice();//设置颜色绘制球;setfillcolor(ball->colour);fillcircle(ball->x, ball->y,radius);//绘制挡板setfillcolor(RGB(113, 187, 234));//挡板不可以出界fillrectangle(left, top, right, bottom);Sleep(40);//球的移动(ball->x) += (ball->vx);(ball->y) += (ball->vy);//控制挡板移动if (_kbhit()){char ch = _getch();switch (ch){case 'a':case 'A':if (left < -400)break;left -= 5;right -= 5;break;case 'd':case 'D':if (right > 400)break;left += 5;right += 5;break;}}//判断球是否到墙壁;//不考虑底边是否存在挡板的情况;if ((ball->x >= 400 - radius) || (ball->x <= -400 + radius)){ball->vx = (-(ball->vx));}if ((ball->y >= 300 - radius)){ball->vy = (-(ball->vy));}//撞到挡板if ((ball->x >= left) && (ball->x <= right)){if (ball->y <= -240)ball->vy = (-(ball->vy));}//判断出界if ((ball->x < left) || (ball->x > right)){if (ball->y < -300){InitBall(ball);left = -100, top = -270;right = 100, bottom = -300;}}}
}int main()
{initgraph(800, 600);setorigin(400, 300);setaspectratio(1, -1);setbkcolor(RGB(188, 227, 245));cleardevice();//获取当前时间作为随机数种子;srand((unsigned int)time(NULL));//定义变量Ba ball;//初始化球:InitBall(&ball);//球的移动和碰撞反弹CrashBall(&ball);getchar();closegraph();
}
相关文章:
easyx图形库基础:3实现弹球小游戏
实现弹球小游戏 一.实现弹球小游戏:1.初始化布:2.初始化一个球的信息:3.球的移动和碰撞反弹4.底边挡板的绘制和移动碰撞重置数据。 二.整体代码: 一.实现弹球小游戏: 1.初始化布: int main() {initgraph(800, 600);setorigin(40…...
vue基础知识三:v-show和v-if有什么区别?使用场景分别是什么?
一、v-show与v-if的共同点 我们都知道在 vue 中 v-show 与 v-if 的作用效果是相同的(不含v-else),都能控制元素在页面是否显示 在用法上也是相同的 <Model v-show"isShow" /> <Model v-if"isShow" />当表达式为true的时候&#…...
Python Opencv实践 - 图像旋转
import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR)#图像旋转 #Opencv中的旋转,首先通过cv.getRotationMatrix2D获得旋转矩阵 #cv.getRotationMatrix2D(center,ang…...
第五章 Opencv图像处理框架实战 5-10 文档扫描OCR识别
一、整体流程演示 上一篇我们进行了银行卡数字识别,这次我们利用opnecv等基础图像处理方法实现文档扫描OCR识别,该项目可以对任何一个文档,识别扫描出该文档上所有的文字信息。 为了方便后续程序运行,大家可以在Run->Edit Configuration中配置相关参数,选择相应编译器…...
CentOS 7 源码制作openssh 9.4p1 rpm包 —— 筑梦之路
参考之前的博客: centos 7 制作openssh8.7/8.8/8.9/9.0/9.1/9.2/9.3 p1 rpm包升级——筑梦之路_openssh rpm包_筑梦之路的博客-CSDN博客 需要说明的是9.4版本必须要openssl 1.1.1,低于此版本无法完成编译。这也是单独写这篇文章的必要性。 参考这篇编…...
OpenCV图像处理——轮廓检测
目录 图像的轮廓查找轮廓绘制轮廓 轮廓的特征轮廓面积轮廓周长轮廓近似凸包边界矩形最小外接圆椭圆拟合直线拟合 图像的矩特征矩的概念图像中的矩特征 图像的轮廓 查找轮廓 binary,contours,hierarchycv.findContours(img,mode,method)绘制轮廓 cv.drawContours(img,coutours…...
【论文阅读】基于深度学习的时序预测——Non-stationary Transformers
系列文章链接 论文一:2020 Informer:长时序数据预测 论文二:2021 Autoformer:长序列数据预测 论文三:2022 FEDformer:长序列数据预测 论文四:2022 Non-Stationary Transformers:非平…...
开发者如何使用讯飞星火认知大模型API?
目录 1、申请星火API接口 2、使用星火API接口 3、测试编译效果 之前我们使用网页文本输入的方式体验了讯飞星火认知大模型的功能(是什么让科大讯飞1个月股价翻倍?),本篇博文将从开发者角度来看看如何使用讯飞星火认知大模型API…...
linux 系统中vi 编辑器和库的制作和使用
目录 1 vim 1.1 vim简单介绍 1.2 vim的三种模式 1.3 vim基本操作 1.3.1命令模式下的操作 1.3.2 切换到文本输入模式 1.3.3 末行模式下的操作 2 gcc编译器 2.1 gcc的工作流程 2.2 gcc常用参数 3 静态库和共享(动态)库 3.1库的介绍 3.2静态…...
麒麟arm架构 编译安装qt5.14.2
1、先在官网下载qt源码: https://download.qt.io/archive/qt/5.14/5.14.2/single/[qt源码下载地址] 2、解压编译 使用tar -xvf qt-everywhere-src-5.14.2.tar.xz 解压压缩包 cd qt-everywhere-src-5.14.2 执行 ./configure --prefix/usr/local/qt.5.14.2 make -…...
【springmvc系】利用RequestBodyAdviceAdapter做接口鉴权
需求 有个简单的需求,对于第三方接口我们需要做个简单的鉴权机制,这边使用的是非对称性加密的机制。我们提供三方公钥,他们通过公钥对接口json报文使用加密后的报文请求,我们通过对接收过来的请求某一个加密报文字段来进行RSA解密…...
ROS学习笔记(三)---好用的终端Terminator
ROS学习笔记文章目录 01. ROS学习笔记(一)—Linux安装VScode 02. ROS学习笔记(二)—使用 VScode 开发 ROS 的Python程序(简例) 一、Terminator是什么? 在前面的学习中,为了运行hello.py我是在vscode频繁的点击运行窗口的“”号…...
NFT Insider#102:The Sandbox重新上线LAND桥接服务,YGG加入Base生态
引言:NFT Insider由NFT收藏组织WHALE Members(https://twitter.com/WHALEMembers)、BeepCrypto(https://twitter.com/beep_crypto)联合出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周…...
Webpack 的 sass-loader 在生产模式下最小化 CSS 问题
学习webpack时候我发现一个问题: 将mode 改为production模式后,生成的css会被压缩了,但是我并没有引入CssMinimizerPlugin插件,然后我试着将optimization.minimize 设置为false,测试是否为webpack自带的压缩࿰…...
pytest自动化测试框架tep环境变量、fixtures、用例三者之间的关系
tep是一款测试工具,在pytest测试框架基础上集成了第三方包,提供项目脚手架,帮助以写Python代码方式,快速实现自动化项目落地。 在tep项目中,自动化测试用例都是放到tests目录下的,每个.py文件相互独立&…...
vue自定义穿梭框支持远程滚动加载
分享-2023年资深前端进阶:前端登顶之巅-最全面的前端知识点梳理总结,前端之巅 *分享一个使用比较久的🪜 技术框架公司的选型(老项目):vue2 iview-ui 方案的实现思路是共性的,展现UI样式需要你们自定义进行更改&#…...
TCP 协议十大相关特性总结
目录 一、TCP特性 二、报文格式 TCP十大核心特性 1. 确认应答 2. 超时重传 3. 连接管理(三次握手,四次挥手) 三次握手 四次挥手 4. 滑动窗口 情况一:接收方的ACK丢失 情况二:发送方的数据包丢失 5. 流量控制 6. 拥塞控制 7. 延迟应答 8. 捎带应答 9. 字节流粘包问题 10. TCP的…...
文档控件DevExpress Office File API v23.1新版亮点 - 支持.NET MAUI
DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库,不用安装Microsoft Office,就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…...
分割字符串的最大得分
题目: 给你一个由若干 0 和 1 组成的字符串 s ,请你计算并返回将该字符串分割成两个 非空 子字符串(即 左 子字符串和 右 子字符串)所能获得的最大得分。 「分割字符串的得分」为 左 子字符串中 0 的数量加上 右 子字符串中 1 的…...
ASR 语音识别接口封装和分析
这个文档主要是介绍一下我自己封装了 6 家厂商的短语音识别和实时流语音识别接口的一个包,以及对这些接口的一个对比。分别是,阿里,快商通,百度,腾讯,科大,字节。 zxmfke/asrfactory (github.c…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
