C++图形开发(8):空格键控制小球起跳

news2024/11/25 19:11:29

文章目录

  • 1.绘制小球
  • 2.按下空格让小球跳起来

我们今天来实现下按下空格键控制小球的起跳(还没阅读之前文章的同学可以先去阅读一下:C++图形开发专栏)

1.绘制小球

首先,我们要绘制小球,这里就不细讲啦,之前的文章里都有,新内容看一下注释:

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

int main() {
	double width, height;//定义画面长度、宽度
	width = 600;
	height = 400;
	initgraph(width, height);
	int ball_x, ball_y, r;//定义小球x轴、y轴、半径
	r = 20;
	ball_x = width / 4;//x坐标等于整个画面x轴长度的四分之一
	ball_y = height - r;//y坐标等于画面的y轴长度减去圆的半径(保证圆在画面的最底端)
	cleardevice();
	fillcircle(ball_x, ball_y, r);
	_getch();
	closegraph();
	return 0;
}

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

2.按下空格让小球跳起来

我们要让小球跳起来,其实就是让小球y方向的坐标发生变化,如图:
在这里插入图片描述
要让小球跳起来,那显然就需要定义一个变量来调整小球的速度和重力加速度:

int ball_vy = 0;//最初小球落在地面上时y轴方向的速度显然应该为0
double g = 0.6;//重力加速度

然后就是构造循环体实现球的起跳:

while (1){
		ball_vy = ball_vy + g;//根据牛顿力学定律得
		ball_y = ball_y + ball_vy;//小球y轴方向的变化
		if (ball_y >= height - r) {
			ball_vy = 0;//小球落地以后速度清零
			ball_y = height - r;
		}
		cleardevice();
		fillcircle(ball_x, ball_y, r);
		Sleep(10);
	}

但是……就只有以上的代码的话小球是无法移动的,因为小球y轴方向的速度(ball_vy)为0,所以,我们要通过检测按键来实现按下空格后更改y轴方向的速度使小球跳起:

if (_kbhit()) {
			char input = _getch();
			if (input == ' ') {
				ball_vy = -16;
			}
		}

在以上代码中,_kbhit()是一个函数,作用是检查键盘上是否有输入字符,如果有则返回一个非零值,否则返回零。
在实际编程中,可以利用_kbhit()函数来检测用户是否有键盘输入,从而进行相应的操作。比如,可以在游戏中检测用户按下了哪个键盘上的按键,或者在命令行中读取用户输入的命令等。

在以上代码中,我们是通过如果检测到键盘有输入,就执行if内的语句

而我们将_getch()所获得的键盘输入的内容储存在一个名为input的char类型变量中,接着在下面的if语句中检测输入内容,若输入的内容为空格,就将小球y轴方向的速度(ball_vy)更改为-16,从而使小球的y轴坐标减少,来达到向上“跳起”的效果

注意:这里所有的g(重力加速度)与ball_vy所更改的值都是经过反复试验所得到的效果较理想的值,也可以自行修改

那么整个一段代码就是:

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

int main() {
	double width, height;//定义画面长度、宽度
	width = 600;
	height = 400;
	initgraph(width, height);
	double ball_x, ball_y,ball_vy, r,g;//定义小球x轴、y轴、y轴方向的速度、半径、重力加速度
	g = 0.6;
	r = 20;
	ball_x = width / 4;//x坐标等于整个画面x轴长度的四分之一
	ball_y = height - r;//y坐标等于画面的y轴长度减去圆的半径(保证圆在画面的最底端)
	ball_vy = 0; //最初小球落在地面上时y轴方向的速度为0
	while (1){
		if (_kbhit()) {
			char input = _getch();
			if (input == ' ') {
				ball_vy = -16;
			}
		}
		ball_vy = ball_vy + g;//根据牛顿力学定律得
		ball_y = ball_y + ball_vy;//小球y轴方向的变化
		if (ball_y >= height - r) {
			ball_vy = 0;//小球落地以后速度清零
			ball_y = height - r;
		}
		cleardevice();
		fillcircle(ball_x, ball_y, r);
		Sleep(10);
	}
	_getch();
	closegraph();
	return 0;
}

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

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

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

相关文章

4.1 探索LyScript漏洞挖掘插件

在第一章中我们介绍了x64dbg这款强大的调试软件&#xff0c;通过该软件逆向工程师们可以手动完成对特定进程的漏洞挖掘及脱壳等操作&#xff0c;虽然x64dbg支持内置Script脚本执行模块&#xff0c;但脚本引擎通常来说是不够强大的&#xff0c;LyScript 插件的出现填补了这方面的…

2020~2030年 中国智能驾驶市场和技术趋势分析及主流芯片方案概述

分析及主流芯片方案概述智能驾驶已经成为中国用户买车时首选的配置之一&#xff0c;从L0到L2的整个产品布局&#xff0c;已经是车厂卖车时候的重点宣传点&#xff0c;智能驾驶不同于自动驾驶&#xff0c;无论是法律法规和产品定义都有着明确且清晰的定义。用户本身智能驾驶产品…

十个创业九个死,如何看待大学生创业?

虽然大家都在说“十个创业九个死”&#xff0c;尤其是前几年疫情的影响&#xff0c;很多创业和开店铺的都以失败告终&#xff0c;可是对于大学生来说&#xff0c;创业是很值得去做的一件事情。 熟悉我的朋友都知道&#xff0c;我是从事软件开发行业的&#xff0c;虽然前几年的…

实训笔记7.5

实训笔记7.5 7.5一、座右铭二、软件--软件工程2.1 需求分析2.2 系统设计2.2.1 概要设计2.2.2 数据库设计2.2.3 详细设计 2.3 编码开发/实现2.4 系统测试2.5 系统部署运行和维护 三、Java界面编程---仅作了解四、maven--自动化构建工具4.1 作用&#xff1a;4.2 maven如何帮助我们…

C#常见技能_结构

大家好&#xff0c;我是华山自控编程朱老师 前几天一个学员在学习C#与结构交互时,也不知道结构法可以用来做什么 。下面我们就详细讲讲C# 和结构交互的相关知识。 在C#编程中&#xff0c;结构是一种数据类型&#xff0c;它可以用于存储和组织相关数据&#xff0c;并提供对数据…

MySQL原理探索——24 MySQL是怎么保证主备一致的

在前面的文章中&#xff0c;我不止一次地和你提到了 binlog&#xff0c;大家知道 binlog 可以用来归档&#xff0c;也可以用来做主备同步&#xff0c;但它的内容是什么样的呢&#xff1f;为什么备库执行了 binlog 就可以跟主库保持一致了呢&#xff1f;今天我就正式地和你介绍一…

Selenium 中并行测试的重要性

目录 前言 并行测试 Selenium 中的并行测试 使用 TestNG 和 Selenium 进行并行测试 为什么我们需要在 Selenium 中进行并行测试&#xff1f; 更多测试范围 减少测试时间 成本效益 优化 CI/CD 流程 持续测试 实施并行测试 总结 前言 随着技术的进步&#xff0c;测试…

【JavaEE进阶】Spring核心与设计思想

1&#xff0c;Spring是什么&#xff1f; 我们通常所说的Spring指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是一个轻量级的 Java 开源框架&#xff0c;有着活跃庞⼤的社区。Spring 是为了解决企业应用开发的复杂性而创建的&#xff0c;不仅⽀持…

Linux网络抓包工具tcpdump

tcpdump 指令可列出经过指定网络界面的数据包文件头&#xff0c;可以将网络中传送的数据包的 “头” 完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤&#xff0c;并提供 and、or、not 等逻辑语句来帮助你摘取有用信息。   由于它需要将网络接口设置为…

青岛大学_王卓老师【数据结构与算法】Week04_11_案例分析与实现1_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c;另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础–…

STM32网络通信Web Server中SSI和CGI的应用

介绍 最近由于项目功能需要&#xff0c;开始研究STM32 WebServer通信以及SSI和CGI应用方法。项目结束后&#xff0c;主要总结浏览器与STM32之间进行通行&#xff0c;STM32作为服务器而浏览器做为客户端进行通行。 文件介绍 此部分的代码是根据ST官方的Web Server例程的基础上…

ubuntu配置pppoe的详细过程

虽然我的是22&#xff0c;其实这跟ubuntu的具体版本没什么关系 1 为什么要装pppoe联网&#xff1f; 联想主机装上ubuntu后发现wifi网络在启动后一段时间找不到&#xff0c;突然搜索不了&#xff0c;后来问导师才知道师妹之前就是用这个电脑&#xff0c;然后也碰到过。 所以不…

开发抖音短视频账号矩阵系统技术实现能解决一机一号实名认证问题?

一、短视频账号矩阵系统解决一机一号实名认证问题&#xff1f; 目前站在开发者角度来看问的比较多&#xff0c;做开发技术类矩阵saas工具&#xff0c;需要的多账号怎么解决&#xff0c;这需要从两个方面来做开发解决。 第一、从开发角度来看技术开发首先解决代理ip分发问题&a…

SPSS读取纯文本文件

纯文本文件是通用的一种格式文件&#xff0c;根据纯文本文件中数据的排序方式&#xff0c;可以将其分为自由格式和固定格式。自由格式文本文件的数据项之间必须有分隔符&#xff0c;固定格式数据项之间不需要分隔符。 1.以自由格式读取数据 &#xff08;1&#xff09;选择“文…

【嵌入式Qt开发入门】如何使用Qt进行绘制实时图表——QChart 图表

要想使用 Qt Charts&#xff0c;我们的 Qt 版本得使用 Qt 5.7 之后的版本。其实 Qt Charts 并不是 Qt 5.7 才有的&#xff0c;是在 Qt 5.7 以前只有商业版本的 Qt 才有 Qt Charts。我们能免费下载的 Qt 版本都是社区&#xff08;开源&#xff09;版本。 Qt Charts 很方便的绘制…

LTD233次升级|官网商城全球卖货•上传文章SEO关键字•创建下载中心

1、支持第三方支付平台Billing System&#xff0c;支持人民币结算外币商品 2、中文商城支持海外收货地址 3、文章批量上传支持传入 SEO关键字 4、拍卖应用支持查看竞价中的报价记录 5、新增下载文件模块 商城应用 1) 支持第三方支付平台 Billing System 在本次升级中&…

IM即时通讯+智能审批,助力企业效能提升

在企业运行中&#xff0c;大都会使用即时通讯去进行沟通交流&#xff0c;即传递文字信息、各类文档文件甚至是实时的语音和视频通话。而随着技术的不断深入&#xff0c;即时通讯软件越发成熟&#xff0c;它已经不再仅仅只是一个简单的聊天工具&#xff0c;而是包涵办公、协作、…

2023年测试之路,从功能测试进阶测试开发工程师,突破内卷...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试开发工程师到…

LiangGaRy-学习笔记-Day28

1、回顾知识 1.1、docker启动MySQL 安装docker #准备好二进制的包 [rootNode2 ~]# ls docker-20.10.9.tgz docker-20.10.9.tgz [rootNode2 ~]# #解压docker的二进制包 [rootNode2 ~]# tar -xf docker-20.10.9.tgz #把它移动到/usr/local/下 [rootNode2 ~]# mv docker /usr/…

《MySQL技术内幕》读书总结(一):MySQL体系结构和存储引擎

文章目录 前言&#xff1a;1、定义数据库和实例2、MySQL体系结构3、MySQL存储引擎InnoDBMyISAM 4、连接MySQL 前言&#xff1a; 该技术文章是我阅读《MySQL技术内幕 InnoDB存储引擎》第2版的总结梳理 我写这里文章的目的&#xff1a;书中的内容过于系统和繁琐&#xff0c;并不是…