C语言小游戏之弹跳的小球

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝 颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值