第2章 自由落体的小球

说明

童晶老师《C 和 C++ 游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。

本章我们将实现小球受重力影响加速下落,碰到地面后反弹的效果,如图所示。

首先学习 EasyX 图形库的下载安装,显示一个静止小球;学习整数常量的知识,并绘制多个小球;接着学习整型变量的定义和使用,从而方便修改小球坐标;然后学习 while(1) 循环和if语句,实现小球下落和反弹;最后学习浮点型变量,实现小球受重力加速下落的效果。

源码

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

int main()
{
	float y = 100;				// 小球的 y 坐标
	float vy = 0;				// 小球 y 方向速度
	float g = 0.5;				// 小球加速度,y 方向
	initgraph(600, 600);		// 初始游戏窗口画面,宽 600,高 600
	while(1)					// 一直循环运行
	{		
		cleardevice();			// 清除掉之前绘制的内容
		vy = vy + g;			// 利用加速度 g 更新 vy 速度
		y = y + vy;				// 利用y方向速度 vy 更新 y 坐标
		if (y >= 580)			// 当碰到地面时
			vy = -0.95 * vy;	// y 方向速度改变方向,并受阻尼影响绝对值变小
		if (y > 580)			// 防止小球越过地面
			y = 580;
		fillcircle(300, y, 20);	// 在坐标 (300, y) 处画一个半径为 20 的圆
		Sleep(10);				// 暂停 10 毫秒
	}
	_getch();					// 等待按键
	closegraph();				// 关闭窗口
	return 0;
}

这一章主要讲解了整数、浮点数常量和变量的定义与使用方法、while(1) 循环和if选择判断语句。利用这些较少的知识点,开发了自由落体小球的仿真程序。本章的实现效果,可以用于 flappy bird 等游戏中的自由落体效果,也可用于愤怒的小鸟等游戏中的抛物线发射效果。

视频教程可以参考这里:https://zhuanlan.zhihu.com/p/186255141

练习 2-8:增加变量x表示小球的 x 坐标,vx 表示 x 方向的速度,vx 初始化为 1。尝试实现小球抛物线运动,并在窗口中四处反弹的效果。

源码:

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

int main()
{
	float x, y, vx, vy, g;		// 定义一些变量
	x = 100;					// 小球的 x 坐标
	y = 200;					// 小球的 y 坐标
	vx = 8;						// 小球 x 方向速度
	vy = 0;						// 小球 y 方向速度
	g = 0.5;					// 小球加速度,y 方向
	initgraph(600, 600);		// 初始游戏窗口画面,宽 600,高 600
	while(1)					// 一直循环运行
	{		
		cleardevice();			// 清除掉之前绘制的内容
		vy = vy + g;			// 利用加速度 g 更新 vy 速度
		x = x + vx;				// 利用 x 方向速度 vx 更新 x 坐标
		y = y + vy;				// 利用 y 方向速度 vy 更新 y 坐标
		if (y >= 580)			// 当碰到地面时
		{
			vx = 0.98 * vx;		// x 方向速度受阻尼影响变小
			vy = -0.95 * vy;	// y 方向速度改变方向,并受阻尼影响变小
		}
		if (y > 580)			// 防止小球越过地面
			y = 580;
		if (x >= 580)			// 碰到右边墙,小球 x 方向速度反向
			vx = -vx;
		if (x <= 20)			// 碰到左边墙,小球 x 方向速度反向
			vx = -vx;
		fillcircle(x, y, 20);	// 在坐标 (x, y) 处画一个半径为 20 的圆
		Sleep(10);				// 暂停 10 毫秒
	}
	_getch();					// 等待按键
	closegraph();				// 关闭窗口
	return 0;
}
分享到

添加评论