1.显示静止的小球
首先利用printf函数在屏幕坐标(x,y)处显示一个静止的小球字符'o',应当注意屏幕坐标系的原点在左上角,代码如下:
#include<stdio.h>
int main()
{
int x=5,y=10;
int i,j;
//输出小球上面的空行
for(i=0;i<x;i++)
printf("\n");
//输出小球左边的空格
for(j=0;j<y;j++)
printf(" ");
printf("o"); //输出小球
printf("\n");
return 0;
}
2.小球下落
改变小球的坐标变量,即让小球的x坐标增加,从而让小球下落。在每次显示之前使用了清屏函数system("cls"),注意需要包含新的头文件#include<stdlib.h>。代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j;
int x=1,y=10;
for(x=1;x<10;x++)
{
system("cls"); //清屏函数
//输出小球上面的空行
for(i=0;i<x;i++)
printf("\n");
//输出小球左边的空格
for(j=0;j<y;j++)
printf(" ");
printf("o"); //输出小球o
printf("\n");
}
return 0;
}
3.上下弹跳的小球
在上一步代码的基础上增加记录速度的变量velocity,小球的新位置x=旧位置x+速度velocity。当判断小球到达上、下边界时改变方向,即改变velocity的正负号。代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j;
int x=5,y=10;
int height=20;
int velocity=1;
while(1)
{
x=x+velocity; //小球的新位置
system("cls"); //清屏函数
//输出小球上面的空行
for(i=0;i<x;i++)
printf("\n");
//输出小球左边的空格
for(j=0;j<y;j++)
printf(" ");
printf("o"); //输出小球o
printf("\n");
//判断小球是否到达上、下边界
if(x==height||x==0)
velocity=-velocity;
}
return 0;
}
4.斜着弹跳的小球
增加x,y两个方向的速度控制变量velocity_x、velocity_y,初值为1;velocity_x碰到上下边界时改变正负号,velocity_y碰到左右边界时改变正负号。代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j;
int x=0,y=5;
int velocity_x=1;
int velocity_y=1;
int left=0,right=20;
int top=0,bottom=10;
while(1)
{
x=x+velocity_x;
y=y+velocity_y;
system("cls"); //清屏函数
//输出小球上面的空行
for(i=0;i<x;i++)
printf("\n");
//输出小球左边的空格
for(j=0;j<y;j++)
printf(" ");
printf("o"); //输出小球o
printf("\n");
//判断小球是否到达上、下边界
if(x==top||x==bottom)
velocity_x=-velocity_x;
//判断小球是否到达左、右边界
if(y==left||y==right)
velocity_y=-velocity_y;
}
return 0;
}
5.控制小球弹跳的速度
为了降低反弹球的速度,可以使用sleep函数(头文件为#include<windows.h>)。比如sleep(10)表示程序执行此处暂停10ms。
6.总结
以上就可以实现弹跳的小球了,利用printf("\a")可以实现小球碰到边界时响铃。
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
int i,j;
int x=0,y=5;
int velocity_x=1;
int velocity_y=1;
int left=0,right=20;
int top=0,bottom=10;
while(1)
{
x=x+velocity_x;
y=y+velocity_y;
system("cls"); //清屏函数
//输出小球上面的空行
for(i=0;i<x;i++)
printf("\n");
//输出小球左边的空格
for(j=0;j<y;j++)
printf(" ");
printf("o"); //输出小球o
printf("\n");
Sleep(50); //输出小球后等待50ms
//判断小球是否到达上、下边界
if(x==top||x==bottom)
velocity_x=-velocity_x,printf("\a");
//判断小球是否到达左、右边界
if(y==left||y==right)
velocity_y=-velocity_y,printf("\a");
}
return 0;
}