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

文章目录

  • 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.hqwc.cn/news/9508.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT与Excel结合_编写VBA宏

先来解释下什么是Excel vba宏 ⭐Excel VBA宏&#xff08;Visual Basic for Applications&#xff09;是一种用于在Microsoft Excel中自动化和扩展功能的编程语言。VBA允许用户编写自定义的脚本或宏&#xff0c;以便通过执行一系列指令来自动完成特定任务。 使用Excel VBA宏&a…

基于改进莱维飞行和混沌映射的金鹰优化算法(10种混沌映射随意切换),附matlab代码

“ 本篇文章对金鹰优化算法进行改进&#xff0c;首先通过引入混沌映射机制&#xff0c;对其群体进行初始化&#xff0c;增加金鹰个体的多样性&#xff1b;然后在金鹰个体的位置更新公式上引入改进的莱维飞行机制&#xff0c;提高搜索精度&#xff0c;帮助金鹰个体跳出局部最优。…

Work20230705

//main.c #include "uart4.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); }int main() {while(1){//将获取到的字符1发送到终端//hal_put_char(hal_get_char()1);hal_put_string…

监控系统Zabbix

zabbix概述 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果&#xff0c;和网站的健康状态。 利用一个优秀的监控软件&#xff0c;我们可以&#xff1a; 通过一个友好的界面进行浏览整个网站…

【设计模式】第十七章:状态模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…

谷歌Bard入门指南

文章目录 谷歌Bard入门指南一、简介二、使用指南三、中文化3.1 中文提问3.2 中文回答 四、Hello Game五、亮点 谷歌Bard入门指南 一、简介 Bard 是一个大型语言模型&#xff0c;也称为对话式 AI 或聊天机器人&#xff0c;经过训练&#xff0c;内容丰富且全面。Bard 接受过大量…

Tkinter_使用Progressbar创建和管理进度条

前言 Progressbar是Tkinter库中的一个小部件&#xff0c;用于创建和管理进度条。它可以在图形用户界面中显示任务的进度&#xff0c;并提供了多种样式和配置选项。 使用Progressbar&#xff0c;你可以按照固定或不确定的进度展示任务的进行状态。它可以显示任务完成的百分比&am…

matplotlib设置坐标轴为象限模式

import numpy as np import matplotlib.pyplot as pltx np.linspace(-np.pi, np.pi, 1000) cosy np.cos(x) siny np.sin(x)plt.xlim(min(x), max(x)) plt.ylim(min(cosy), max(cosy)0.5) plt.plot(x, cosy) plt.plot(x, siny) # 设置坐标刻度 plt.xticks([-np.pi, -np.pi/2,…

微前端(拆分和细化,整合历史系统)

接入微前端 项目背景说明 假如我们完成了基于Vue2的项目&#xff0c;假设另外一个团队的小伙伴来实现前台可视化部分&#xff0c;他们使用的是最新的Vue3技术栈&#xff0c;现在有一个需求&#xff0c;他们的前台项目想直接使用我们的登录功能&#xff0c;获得token&#xff…

数据结构与算法(持续更新中..)

一. 概论 1. 数据结构 队列&#xff1a;一种遵循先进先出 (FIFO / First In First Out) 原则的一组有序的项&#xff1b;队列在尾部添加新元素&#xff0c;并从头部移除元素。最新添加的元素必须排在队列的末尾。&#xff08;例如&#xff1a;去食堂排队打饭&#xff0c;排在前…

新版本vscode使用配置文件功能,解决不同项目使用不同的插件

如果你同时有vue2,vue3的项目。一定会遇到插件的问题。因为vue2项目插件是使用vetur的&#xff0c;vue3是使用volar的。 以前vscode为了在不同项目中能使用不同的配置文件&#xff0c;是使用工作区的概念去解决的&#xff0c;但是比较复杂而且不好用。 现在新版本的vscode&…

Go语言操作MySql数据库

go-sql-driver/mysql库是Go语言官方推荐的MySQL驱动库&#xff0c;可以很方便地实现对MySQL数据库的连接和操作。本文记录以下使用go-sql-driver/mysql数据库驱动来操作mysql数据库。 目录 1.安装驱动程序 2.导入驱动包 3.操作数据库 3.1 获取mysql版本 3.2 创建表 3.3 …