游戏演示这是一份老少皆宜的C 游戏编程教程,从我们数年的内部教学中孵化而出,从6岁~66岁皆可学习。当然,主要是写给6~16岁的孩子[狗头]
游戏描述
让我们把以上这些看似复杂的任务,分解成更小更具体的任务,提出下面这些问题。其中鼠标跟随已经在之前的案例中学习过,不记得的同学可以戳
在 这篇文章中,我们学习了如何实现位置的移动,总结起来就是每次循环执行的时候,更新小球的位置,并且把新位置的小球画出来,同时擦除之前的小球。
小球位置更新的依据是 “ 新位置 = 旧位置 这段时间内移动的距离”
我们知道,如果把一个东西从高处抛下来,它下落的速度会越来越快,也就是说相同时长内移动的距离会越来越大。我们可以找出位置的变化的规律
用代码可以把这个规律更清楚地写出来(我们省去其他一些部分,只展现核心代码)
while (1) {
vy = vy g;
y = y vy;
}
每次循环的时候,小球的速度和位置都会更新,我们依据最新位置画出小球。这部分代码如下
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
int main()
{
initgraph(1000, 1000);
int x = 200;
int y = -20;
int r = 20;
int vy = 10;
int g = 1;
while (1) {
cleardevice();
vy = vy g;
y = y vy;
fillcircle(x, y, r);
Sleep(10);
}
return 0;
}
碰撞检测——条件语句
当小球碰到横板、左右边界、下边界的时候,它要反弹。可是,计算机没有我们这样的眼睛,它要怎么判断小球有没有碰到横板、左右边界、下边界呢?
以横板为例,对于计算机来说,小球是用圆心坐标和半径表示的,横板也是用位置和大小表示的,它们对于计算机来说都是些数字。
如果小球落到了横板上面,那么“ 小球的圆心y坐标肯定是横板的y坐标减去小球的半径,小球的圆心x坐标一定大于横板的左侧边界数值 并且 小于横板的右侧边界数值”
上面加引号的部分就是判断小球是否落到横板上的依据,这个依据用代码是这样写的
y >= p.y-r && x >= p.x && x <= p.x w //w表示横板的宽
if (y >= p.y-r && x >= p.x && x <= p.x w) {
// 小球反弹
}
反弹怎么表示
反弹重在一个“反”,如果原先是向下运动,那么碰到了边界之后就要向反方向运动
我们说两个物体向反方向运动,意味着它们速度相反
所以,我们需要在碰到边界之后,先让这个物体固定在边界处,然后马上将速度改成反方向的速度。通过 -1 * 原先的速度 来实现
if (y >= p.y-r && x >= p.x && x <= p.x w) {
y = p.y-r;
vy = -1 * vy; // 小球反弹
}
整理一下
把这几个部分合在一起,代码如下。30行实现球球大作战,是不是可以动手尝试一下?
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include<iostream>
#include<windows.h>
int main()
{
initgraph(1000, 1000);
int x = 200;
int y = -20;
int r = 20;
int vy = 10;
int g = 1;
int w = 300;
int h = 5;
while (1) {
POINT p;
GetCursorPos(&p);
if (y >= p.y-r && x >= p.x && x <= p.x w)
{
y = p.y;
vy = -vy;
}
cleardevice();
vy = vy g;
y = y vy;
fillcircle(x, y, r);
fillrectangle(p.x, p.y, p.x w, p.y h);
Sleep(10);
}
return 0;
}
课后思考
欢迎大家在评论区留下你们的答案~
答对1题者即可获得 AC少儿编程 免费试听课名额(原价480元)
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved