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

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.初始化布&#xff1a;2.初始化一个球的信息&#xff1a;3.球的移动和碰撞反弹4.底边挡板的绘制和移动碰撞重置数据。 二.整体代码&#xff1a; 一.实现弹球小游戏: 1.初始化布&#xff1a; int main() {initgraph(800, 600);setorigin(40…...

vue基础知识三:v-show和v-if有什么区别?使用场景分别是什么?

一、v-show与v-if的共同点 我们都知道在 vue 中 v-show 与 v-if 的作用效果是相同的(不含v-else)&#xff0c;都能控制元素在页面是否显示 在用法上也是相同的 <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中的旋转&#xff0c;首先通过cv.getRotationMatrix2D获得旋转矩阵 #cv.getRotationMatrix2D(center,ang…...

第五章 Opencv图像处理框架实战 5-10 文档扫描OCR识别

一、整体流程演示 上一篇我们进行了银行卡数字识别,这次我们利用opnecv等基础图像处理方法实现文档扫描OCR识别,该项目可以对任何一个文档,识别扫描出该文档上所有的文字信息。 为了方便后续程序运行,大家可以在Run->Edit Configuration中配置相关参数,选择相应编译器…...

CentOS 7 源码制作openssh 9.4p1 rpm包 —— 筑梦之路

参考之前的博客&#xff1a; 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&#xff0c;低于此版本无法完成编译。这也是单独写这篇文章的必要性。 参考这篇编…...

OpenCV图像处理——轮廓检测

目录 图像的轮廓查找轮廓绘制轮廓 轮廓的特征轮廓面积轮廓周长轮廓近似凸包边界矩形最小外接圆椭圆拟合直线拟合 图像的矩特征矩的概念图像中的矩特征 图像的轮廓 查找轮廓 binary,contours,hierarchycv.findContours(img,mode,method)绘制轮廓 cv.drawContours(img,coutours…...

【论文阅读】基于深度学习的时序预测——Non-stationary Transformers

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文三&#xff1a;2022 FEDformer&#xff1a;长序列数据预测 论文四&#xff1a;2022 Non-Stationary Transformers&#xff1a;非平…...

开发者如何使用讯飞星火认知大模型API?

目录 1、申请星火API接口 2、使用星火API接口 3、测试编译效果 之前我们使用网页文本输入的方式体验了讯飞星火认知大模型的功能&#xff08;是什么让科大讯飞1个月股价翻倍&#xff1f;&#xff09;&#xff0c;本篇博文将从开发者角度来看看如何使用讯飞星火认知大模型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 静态库和共享&#xff08;动态&#xff09;库 3.1库的介绍 3.2静态…...

麒麟arm架构 编译安装qt5.14.2

1、先在官网下载qt源码&#xff1a; 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做接口鉴权

需求 有个简单的需求&#xff0c;对于第三方接口我们需要做个简单的鉴权机制&#xff0c;这边使用的是非对称性加密的机制。我们提供三方公钥&#xff0c;他们通过公钥对接口json报文使用加密后的报文请求&#xff0c;我们通过对接收过来的请求某一个加密报文字段来进行RSA解密…...

ROS学习笔记(三)---好用的终端Terminator

ROS学习笔记文章目录 01. ROS学习笔记(一)—Linux安装VScode 02. ROS学习笔记(二)—使用 VScode 开发 ROS 的Python程序&#xff08;简例&#xff09; 一、Terminator是什么&#xff1f; 在前面的学习中&#xff0c;为了运行hello.py我是在vscode频繁的点击运行窗口的“”号…...

NFT Insider#102:The Sandbox重新上线LAND桥接服务,YGG加入Base生态

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members(https://twitter.com/WHALEMembers)、BeepCrypto&#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周…...

Webpack 的 sass-loader 在生产模式下最小化 CSS 问题

学习webpack时候我发现一个问题&#xff1a; 将mode 改为production模式后&#xff0c;生成的css会被压缩了&#xff0c;但是我并没有引入CssMinimizerPlugin插件&#xff0c;然后我试着将optimization.minimize 设置为false&#xff0c;测试是否为webpack自带的压缩&#xff0…...

pytest自动化测试框架tep环境变量、fixtures、用例三者之间的关系

tep是一款测试工具&#xff0c;在pytest测试框架基础上集成了第三方包&#xff0c;提供项目脚手架&#xff0c;帮助以写Python代码方式&#xff0c;快速实现自动化项目落地。 在tep项目中&#xff0c;自动化测试用例都是放到tests目录下的&#xff0c;每个.py文件相互独立&…...

vue自定义穿梭框支持远程滚动加载

分享-2023年资深前端进阶&#xff1a;前端登顶之巅-最全面的前端知识点梳理总结&#xff0c;前端之巅 *分享一个使用比较久的&#x1fa9c; 技术框架公司的选型(老项目)&#xff1a;vue2 iview-ui 方案的实现思路是共性的&#xff0c;展现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库。有了这个库&#xff0c;不用安装Microsoft Office&#xff0c;就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…...

分割字符串的最大得分

题目&#xff1a; 给你一个由若干 0 和 1 组成的字符串 s &#xff0c;请你计算并返回将该字符串分割成两个 非空 子字符串&#xff08;即 左 子字符串和 右 子字符串&#xff09;所能获得的最大得分。 「分割字符串的得分」为 左 子字符串中 0 的数量加上 右 子字符串中 1 的…...

ASR 语音识别接口封装和分析

这个文档主要是介绍一下我自己封装了 6 家厂商的短语音识别和实时流语音识别接口的一个包&#xff0c;以及对这些接口的一个对比。分别是&#xff0c;阿里&#xff0c;快商通&#xff0c;百度&#xff0c;腾讯&#xff0c;科大&#xff0c;字节。 zxmfke/asrfactory (github.c…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...