C++图形开发(6):落下后能弹起的小球

news2024/11/25 3:50:07

文章目录

  • 1.重复下落的小球
  • 2.落下后能弹起的小球
  • 3.能上下反弹的小球
  • 4.符合重力的能上下反弹的小球

今天我们来尝试实现一个落地后可以弹起的小球

1.重复下落的小球

首先,我们要来实现一个小球的重复下落

我们知道,在前面的代码中(详见C++图形开发(4):下落的小球),我们已经实现了小球的一直下落,但最终小球会掉出屏幕外,而小球完全消失的坐标是圆心坐标为(600,620)时,因此,我们只需要当小球的圆心达到这个坐标时,让其在最上方且我们正好刚刚看不见时(此时圆心坐标为(0,-20))再继续执行循环,也就是通过if分支语句来实现(关于if语句详见C++爱好者的自我修养(2):if-else分支语句)

也就是说,我们只要在上次代码的基础上添加一段代码:

if (a >= 620){
	a = -20}

整段代码就是:

#include<graphics.h> 
#include<conio.h>
#include<stdio.h>

int main() {
	int a = 50;
	initgraph(600, 600);
	while (1) {
		a++;
		cleardevice();
		fillcircle(300, a, 20);
		Sleep(10);
		if (a >= 620) {
			a = -20;
		}
	}
	_getch();
	closegraph();
}

效果:
在这里插入图片描述

2.落下后能弹起的小球

实际上小球的反弹,就只是在达到最低完整可见点(此时圆心坐标为(300,580))后再进行运动时让y轴的坐标反向增加(即减少)也就是:
在这里插入图片描述
原理同上,完整代码为:

#include<graphics.h> 
#include<conio.h>
#include<stdio.h>

int main() {
	int a = 50;
	int v = 2;
	initgraph(600, 600);
	while (1) {
		a = a + v;
		cleardevice();
		fillcircle(300, a, 20);
		Sleep(10);
		if (a >= 580) {
			v = -v;
		}
	}
	_getch();
	closegraph();
}

效果:
在这里插入图片描述

3.能上下反弹的小球

要使小球能够上下反弹,以上面同理只需再加入一段if分支语句,或直接把上面的if语句更改为:

if (a >= 580 || a <= 20) {
			v = -v;
		}

整段代码就是:

#include<graphics.h> 
#include<conio.h>
#include<stdio.h>

int main() {
	int a = 50;
	int v = 2;
	initgraph(600, 600);
	while (1) {
		a = a + v;
		cleardevice();
		fillcircle(300, a, 20);
		Sleep(10);
		if (a >= 580 || a <= 20) {
			v = -v;
		}
	}
	_getch();
	closegraph();
}

效果;
在这里插入图片描述

4.符合重力的能上下反弹的小球

要生成一个符合重力的能够上下移动的小球,我们就需要增加一个重力加速度(g),在现实中一般取9.832,但考虑到我们的整个窗口只有600x600,所以我们就可以取0.9832来实现更好的视觉效果(或取0.5)
注意:此处取的都是小数(即浮点数,详见:C++爱好者的自我修养(12.2):数据类型——浮点型),因此我们原来的整型(int)就需要改为单精度浮点型(float)或双精度浮点型(double)

根据牛顿力学定律,可以得到此时的运动速度就需要在每帧更改为:

v = v + g;

整段代码就是:

#include<graphics.h> 
#include<conio.h>
#include<stdio.h>

int main() {
	double a = 50;
	double v = 2;
	double g = 0.9832;
	initgraph(600, 600);
	while (1) {
		v = v + g;
		a = a + v;
		cleardevice();
		fillcircle(300, a, 20);
		Sleep(10);
		if (a >= 580 || a <= 20) {
			v = -v;
		}
	}
	_getch();
	closegraph();
}

效果:
在这里插入图片描述

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

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

相关文章

云his源码:医疗卫生信息系统

伴随着以5G、云计算、大数据、人工智能和物联网等新兴技术的发展&#xff0c;医疗行业也呈现了数字化的发展趋势。如何让医疗领域中的服务提供方、需求方、支付方以及供应链等参与方实现业务协同及数据协同&#xff0c;是目前医疗行业所需的能力。 HIS系统&#xff0c;即“医疗…

点云数据分类及滤波方法

如何获取点云数据 传统的点云获取技术包括非接触式测量和接触式测量两种&#xff0c;它们的主要区别在于&#xff0c;在测量过程中测头是否与工件的表面相接触。 非接触式测量是利用光学原理的方法采集数据&#xff0c;例如结构光法、测距法以及干涉法等。该方法的优点在于测…

vue项目中的vue.config.js配置文件中的proxy代理post一直在预检

记录一个比较有意思的bug,帮别人调试遇到的&#xff0c;一个哥们一直在群里问了好几次同一个问题了&#xff0c;他配置了代理&#xff0c;请求一直在发送&#xff0c;postman测试没问题&#xff0c;可以成功接收到&#xff0c;但是在项目前端请求&#xff0c;确实一点响应没有&…

黑芝麻智能科技、上海紫先面试(部分)(未完全解析)

黑芝麻智能科技 Hystrix可以限流吗&#xff1f;客户端限流&#xff0c;是限制对下游&#xff08;被调用方&#xff09;的访问&#xff0c;不是对本服务限流。从HystrixCommand的.withExecutionIsolationStrategy(ExecutionIsolationStrategy.SEMAPHORE)也可以看出来&#xff0c…

C++ -- 异常

文章目录 1. C语言传统处理2. C异常概念3. 异常的使用3.1 异常抛出并没有被捕获3.2 正确使用3.3 捕获异常采用类型匹配就近原则3.4 catch(...)可以捕获任意类型异常3.5 抛出派生类对象使用基类捕获3.6 异常重新抛出3.7 匹配规则3.8 异常规范3.9 异常安全 4. 自定义异常体系5. 异…

05.动态协议OSPF基础

文章目录 **OSPF简介****OSPF和RIP的区别****RIPV2和OSPFV2相同点****不同点** OSPF基础概念OSPF区域OSPF路由类型区域划分的要求**OSPF多区域****Router ID****Router ID选取规则****度量值** OSPF数据包OSPF状态机条件匹配 OSPF的工作过程OSPF基本配置**OSPF的拓展配置** OSP…

番外12:获取晶体管漏极电流源平面的仿真波形

番外12&#xff1a;获取晶体管漏极电流源平面的仿真波形 老是有同学反应&#xff0c;仿真中无法获取漏极电流源平面的仿真波形&#xff0c;在此给出解释与解决办法。 1、ADS能够访问到部分器件的电流源平面波形 对于某些器件&#xff0c;比如说CGH40010F&#xff0c;可以在仿…

硬核了解一下内核链表

一&#xff0c;内核链表定义 言以蔽之&#xff0c;内核链表就是个带头结点的循环双链表。 普通的链表是将next指针定义成为与该结构体一样的类型&#xff0c;这样做通用性不好。与普通的链表的定义和使用方式不一样&#xff0c;内核的链表定义成为了一种通用的结构&#xff1a…

vue打包到生产环境

1.进入到项目根目录执行 npm run build此时会自动打包在dist目录下 2.安装服务 npm install -g serve3.启动 serve dist以上是生产环境打包的过程。 npm run dev 是开发环境, npm run build 是生产环境

Springboot 错用list.stream , 遭遇list浅拷贝偷袭,实战图解

前言 相信很多看客都听闻过深拷贝、浅拷贝 &#xff0c; 但是在日常使用的过程中&#xff0c;是否真的有关心过或者遭遇过呢&#xff1f; 不啰嗦&#xff0c;一起来看看。 正文 接下来我通过示例&#xff0c;来复现一下 list.stream浅拷贝 这个事 &#xff1a; 首先是一个对象…

Nacos服务注册成功,RestTemplate调用服务提供者时空指针异常(已解决)

发现问题并进行记录 目录 项目场景&#xff1a;问题描述原因分析解决 项目场景&#xff1a; RestTemplate也可以做服务调用(进行测试) 目的:解决该问题,不考虑其他远程调用方式(Fegin,Dubbo) 项目Pom文件 Spring Boot ----2.6.3 Spring Cloud------2021.0.1 Spring Cloud Al…

Elasticsearch介绍和安装

ELK简介 Elastic Stack核心产品包括Elasticsearch、Logstash、Kibana&#xff08;也称为ELK&#xff09;和Beats等等。能够安全可靠地获取任何来源、任何格式的数据&#xff0c;然后实时地对数据进行搜索、分析和可视化 Kibana是一个免费且开放的用户界面&#xff0c;能…

Apikit 自学日记:可以对 API 发评论

该功能仅供API研发管理企业版 您可以直接在API文档上发布评论&#xff0c;所有的沟通内容都会跟随API文档保留下来并且按照版本分类好&#xff0c;而不是零散地存在各种聊天工具中。 发表评论 在API详情页&#xff0c;点击 评论 按钮&#xff0c;在弹窗中可以输入评论信息并点…

FPGA实验一:层次法设计组合电路(加法器)

目录 一、实验目的 二、实验要求 三、实验代码 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 3、下载测试结果及分析 五、实验心得 一、实验目的 &#xff08;1&#xff09;掌握基本组合逻辑电路的 FPGA实现&#xff1b; &#xff08;2&#xff09;学习 Verilo…

使用安装器安装windows gcc— MinGW及让windows像Linux一样的MSYS

这里使用installer进行安装GCC&#xff0c;主要是installer安装其它依赖&#xff0c;如MSYS&#xff0c;autoconf,automake&#xff0c;libtool&#xff0c;vim,perl,mingw-developer-toolkit等&#xff0c;mingw下载地址&#xff0c;如图download链接的mingw-get-setup.exe文件…

高级端口扫描工具

高级端口扫描程序可查看哪些服务在哪个端口上运行、开放端口数量、连接的交换机&#xff0c;并帮助保护网络免受未经授权的访问。作为网络管理员&#xff0c;扫描网络中的开放端口、这些端口已连接到的交换机以及在其上运行的服务&#xff0c;并将已知服务与已识别的服务与高级…

迁移学习入门,新手该如何下手?

推荐迁移学习技术的实用入门图书:《自然语言处理迁移学习实战》 [加纳] 保罗阿祖雷&#xff08;Paul Azunre&#xff09; 著&#xff0c;李想&#xff0c;朱仲书&#xff0c;张世武 译 一本书带你读懂ChatGPT背后的技术&#xff0c;自然语言处理迁移学习&#xff0c;解锁机器学…

Xcode Build System

Xcode Build System iOS开发者都使用Xcode来开发、编译程序&#xff0c;但是我们真正了解xcode是怎样编译我们的程序到手机上的么&#xff0c;下面我们主要看看xcode的编译系统内容 一、Preprocessor 预处理&#xff1a;在此步骤中xcode会处理代码中的宏&#xff0c;将其展开…

19k字图文讲解Vision科研常用的系统环境配置和工具(附详细命令行)

猛码Memmat | 转载请注明来源 最近作者有了新设备,趁更新系统写一篇博客为小白讲解这一入门过程 目录 ArchLinux 安装指南(新手向)前言准备工作检查网络通过 SSH 远程连接(可选)硬盘分区格式化并挂载分区设置中国镜像源(推荐)安装系统系统初始化设置进阶设置设置交换空…

VScode中的插件

开启VScode中最简单的内部浏览器 - 可以访问外网 - Browser Preview 插件安装&#xff1a; 插件使用&#xff1a;由下角 - 状态栏 - VS Browser按钮 live sass compiler-vscode插件将scss编译为css live sass compiler是VSCode扩展&#xff0c;可以实时地将SASS / SCSS文件…