目录
一、 制作准备
1.所需库函数
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
< stdlib.h>库函数所用到的是system()函数,用来制造小球位置的变化。
<windows.h>库函数用到的是Sleep()函数,用来调节小球移动的速度。
2.基本逻辑
首先是在屏幕上显示这个球,然后使这个球移动起来,最后就是调节小球移动的速度。
二、编写过程
1.显示小球
想要在屏幕上显示出这个小球,我们要做的就是确定他的x,y值,也就是水平和竖直的位置。水平我们用空格填充,竖直用\n来填充。
#include<stdio.h>
int main()
{
int i, j;
int x = 5;
int y = 20;
for (i = 0; i < x; i++)
printf("\n");
for (j = 0; j < y; j++)
printf(" ");
printf("O");
printf("\n");
return 0;
}
这样我们就在屏幕上显示出这个小球来了。那么既然小球出现了,我们现在要做的就是想办法让它动起来。
2.小球下落
想让小球下落,我们就要定义一个循环,让小球的高度不断变化,但是如果仅仅是高度发生变化,之前的小球还会一直停留在屏幕上,现在我们就用到了库函数<stdlib.h>中的清屏函数system("cls");实现清屏,小球每次移动后,之前在屏幕上的小球都会消失。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i, j;
int x = 1;
int y = 10;
for(i = 0;i < y;i++)
{
system("cls");
for (i = 0; i < x; i++)
printf("\n");
for (j = 0; j < y; j++)
printf(" ");
printf("O");
printf("\n");
}
return 0;
}
3.小球弹跳
所谓弹球,小球肯定能在边界反弹,那反弹就是改变运动速度咯。我们只需要定义一个小球的速度,然后在小球位于边界的时候把小球的速度变为相反数,这样就可以让小球以水平或者竖直的相反的方向弹。
在上一步代码的基础山增加速度变量velocity,小球的新位置x=旧位置+速度velocity。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i, j;
int x = 0;
int y = 5;
int left = 0;
int right = 20;
int top = 0;
int buttom = 10;
int velocity_x = 1;
int velocity_y = 1;
while (1)
{
x += velocity_x;
y += velocity_y;
system("cls");
for (i = 0; i < x; i++)
printf("\n");
for (j = 0; j < y; j++)
printf(" ");
printf("O");
printf("\n");
//小球位于边界时改变小球的速度方向
if (x == top||x==buttom)
velocity_x = -velocity_x;
if(y==left||y==right)
velocity_y = -velocity_y;
}
return 0;
}
4.优化体验
弹跳小球的游戏现在看起来时完成了,但是它的游戏体验并不是很好,小球移动速度太快。我们先在要做的就是让小球放慢速度,看起来正常一点。这时候就用到了库函数<windows.h>中的Sleep()函数来让小球速度变慢,也就是输出小球后延迟一段时间再运行函数。
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
int i, j;
int x = 0;
int y = 5;
int left = 0;
int right = 20;
int top = 0;
int buttom = 10;
int velocity_x = 1;
int velocity_y = 1;
while (1)
{
x += velocity_x;
y += velocity_y;
system("cls");
for (i = 0; i < x; i++)
printf("\n");
for (j = 0; j < y; j++)
printf(" ");
printf("O");
printf("\n");
Sleep(10);
//小球位于边界时改变小球的速度方向
if (x == top||x==buttom)
velocity_x = -velocity_x;
if(y==left||y==right)
velocity_y = -velocity_y;
}
return 0;
}
在发生碰撞后我们也可以给予用户一个反馈,可以用\a响铃来完成反馈。
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
int i, j;
int x = 0;
int y = 5;
int left = 0;
int right = 40;
int top = 0;
int buttom = 30;
int velocity_x = 1;
int velocity_y = 1;
while (1)
{
x += velocity_x;
y += velocity_y;
system("cls");
for (i = 0; i < x; i++)
printf("\n");
for (j = 0; j < y; j++)
printf(" ");
printf("O");
printf("\n");
Sleep(10);
//小球位于边界时改变小球的速度方向
if (x == top || x == buttom) {
velocity_x = -velocity_x;
printf("\a");
}
if (y == left || y == right) {
velocity_y = -velocity_y;
printf("\a");
}
}
return 0;
}
但是这个游戏只能说是毫无游戏体验,没有任何游玩性,所以下一期会更新飞机大战《狂野打飞机》游戏!