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

这篇具有很好参考价值的文章主要介绍了C++图形开发(8):空格键控制小球起跳。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们今天来实现下按下空格键控制小球的起跳(还没阅读之前文章的同学可以先去阅读一下: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;
}

运行效果:
C++图形开发(8):空格键控制小球起跳,C++图形开发,C++,编程,c++,开发语言

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

我们要让小球跳起来,其实就是让小球y方向的坐标发生变化,如图:
C++图形开发(8):空格键控制小球起跳,C++图形开发,C++,编程,c++,开发语言
要让小球跳起来,那显然就需要定义一个变量来调整小球的速度和重力加速度:

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;
}

效果展示:
C++图形开发(8):空格键控制小球起跳,C++图形开发,C++,编程,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-529037.html

到了这里,关于C++图形开发(8):空格键控制小球起跳的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++图形开发(3):静止的小球(fillcircle函数)

    要实现在图形界面得到一个小球,我们的graphics库提供了一个函数: 其格式为: 现写一段代码,在图形界面生成一个小球: 效果: 坐标图: 如果是多个小球呢? 效果: 坐标图: 可不可以在上面的基础上增加一些花样呢? 我们先把设计图画出来:(本人字丑,请忽略) 代码

    2024年02月12日
    浏览(36)
  • 学习C语言十天了,我实现了仿真自由落体小球『C/C++&图形库EasyX』

    🌸作者简介: 花想云 ,在读本科生一枚,致力于 C/C++、Linux 学习。 🌸 本文收录于 初学C语言必会的20个小游戏专栏 ,本专栏主要内容为利用C/C++与图形库EasyX实现各种有趣的小游戏。 🌸 相关专栏推荐: C语言初阶系列 、 C语言进阶系列 、 数据结构与算法 本文主要内容为

    2023年04月15日
    浏览(51)
  • Java怎么通过键盘实现动态控制小球移动

    这一操作依赖于Java的事件机制,键盘按键会触发一个事件, 我们捕获到这个事件,然后做相应的处理。 所谓动态移动其实就是根据坐标不断地重新绘制。 思路 定义一个MyPanel类 继承 JPanel 然后在MyPanel的paint方法里画出一个小球,将它的坐标设置为全局变量 让我们的面板类实

    2024年02月12日
    浏览(42)
  • C++图形开发(1):graphics图形库简介与安装

    为了帮助大家实现真正的、更有意思的C++开发,本人决定开一个C++图形开发的专栏,来制作更多的有意思的游戏、程序。 首先我们要了解的,就是控制台和图形库之间的区别: 控制台是一种基于字符的显示方式,它使用文本字符来组成屏幕上的图像。它通常用于命令行界面

    2024年02月12日
    浏览(53)
  • C++图形开发(10):移动的方块

    那么我们今天就来实现一下矩形的移动 注意:本篇文章的内容都是基于此前用空格控制的小球的基础上进行开发的,详见: C++图形开发(8):空格键控制小球起跳 先来回忆下之前的代码吧~ 首先我们要定义所需的变量: 这几个变量的含义: ①: rect_left_x ②: rect_top_y ③:

    2024年02月13日
    浏览(33)
  • C++图形开发(15):C++小游戏——别碰方块

    经过了十几篇文章的开发,“别碰方块”小游戏已经完成啦! 直接下载地址(不是静态编译不能单EXE文件运行,所以上传的是整个项目):一个C++小游戏“别碰方块” 注意:源代码若要成功编译,请确保满足以下条件: 1.使用Visual Stdio进行编译 2.已正确安装 graphics.h 图形库

    2024年02月16日
    浏览(34)
  • iOS开发-CABasicAnimation实现小球左右摆动动画效果

    iOS开发-CABasicAnimation实现小球左右摆动动画效果 之前开发中遇到需要实现小球左右摆动动画效果,这里作下记录。 2.1 CABasicAnimation CABasicAnimation基础动画,包括duration、repeatCount、repeatDuration、beginTime、timingFunction、autoreverses、fromValue、toValue、byValue、byValue等属性。 具体可以查

    2024年02月15日
    浏览(38)
  • 物联网开发笔记(62)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:环境搭建

    一、目的         这一节我们学习如何使用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程的第一步:环境搭建。 :3.2寸SPI串口TFT液晶显示屏模块 ILI9341驱动 LCD触摸屏 240*320 LVGL图形化编程 XPT2046触摸屏芯片IC 二、环境         ESP32 + 3.2寸 ILI934

    2023年04月15日
    浏览(53)
  • unity通过脚本实现漫游功能 wasd控制玩家移动,空格跳跃,鼠标控制视野旋转,滑轮控制镜头伸缩

    将场景中的摄像机删除,在玩家的控制面板中添加Camera组件,和rigibody组件   using System.Collections; using System.Collections.Generic; using UnityEngine; public class move : MonoBehaviour {     public float speed;     Rigidbody rigid;     void Start()     {                 rigid = GetComponentRigidbody();     }  

    2024年02月10日
    浏览(43)
  • c++ 信息学奥赛 2047:【例5.16】过滤空格

    解析:本题中使用一个技巧,那就是scanf函数在读取数据时,不读取空格。当遇到空格时就停止了。 以下是一些关于 scanf 函数的重要信息: scanf 函数的原型如下: int scanf(const char *format, ...); 它返回成功读取的项目数。 format 参数是一个格式字符串,用于指定要读取的数据类

    2024年02月05日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包