c语言程序设计小球弹跳,C语言之1 实现弹跳小球

知乎我玩的比较少,应不少同学的要求,开始试着开一个系列的教程:做游戏,学编程。有问题大家可以反馈给我改进。

首先,这个教程不会讲解C语言的基础知识,大家可以找些经典的教材,在每次教程前,我会写上所需的基础语法知识,大家可以事先学习。主要会给多个步骤的代码,每个步骤提供对应的要求,以及相应的参考代码。大家可以先在前一个步骤代码的基础上,自己尝试实现下一个步骤的要求;如果有困难的话,再参考我们给出的代码。

这次教程,我们实现一个弹跳小球。缺省编译器为VC,需要学习完基础的变量、运算符、表达式,printf、scanf输入输出函数的用法,if-else、while、for语句的用法。

第1步,显示静止的小球。效果为:

41a705fd339bd2c4560385a328b31926.png

//在坐标(x,y)处输出一个小球

#include

voidmain()

{inti,j;int x = 5;int y = 10;//输出小球上面的空行

for(i=0;i

printf("\n");//输出小球左边的空格

for (j=0;j

printf(" ");

printf("o"); //输出小球o

printf("\n");

}

第二步,通过改变小球坐标的变量,让小球下落

#include #include

voidmain()

{inti,j;int x = 1;int y = 10;for (x=1;x<10;x++)

{

system("cls"); //清屏函数//输出小球上面的空行

for(i=0;i

printf("\n");//输出小球左边的空格

for (j=0;j

printf(" ");

printf("o"); //输出小球o

printf("\n");

}

}

这里利用了一个清屏函数system("cls");,只需要加上头文件#include 即可。

第三步,实现小球的上下弹跳,在上面一步代码的基础上,增加记录速度的变量,小球的新位置=旧位置+速度。判断小球到达上下边界时,速度改变方向,即改变正负号。

#include #include

voidmain()

{inti,j;int x = 5;int y = 10;int hight = 20;int velocity = 1;while (1)

{

x=x+velocity;

system("cls"); //清屏函数//输出小球前的空行

for(i=0;i

printf("\n");for (j=0;j

printf(" ");

printf("o"); //输出小球o

printf("\n");if (x==hight)

velocity= -velocity;if (x==0)

{

velocity= -velocity;

}

}

}

第四步,让程序更有趣,让小球斜着弹跳。主要思路是增加x,y两个方向的速度控制变量,一个碰到上下边界后改变正负号,一个碰到左右边界后改变正负号。

#include #include

voidmain()

{inti,j;int x = 0;int y = 5;int velocity_x = 1;int velocity_y = 1;int left = 0;int right = 20;int top = 0;int bottom = 10;while (1)

{

x= x+velocity_x;

y= y+velocity_y;

system("cls"); //清屏函数//输出小球前的空行

for(i=0;i

printf("\n");for (j=0;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;

}

}

大家尽量养成良好的编码习惯,上面的边界坐标尽量不要在程序中写数字,可以用定义的变量或常量。这样程序可读性更好,后面也更容易调整。

第五步,介绍一个Sleep函数,可以让游戏中间等待,从而可以控制小球弹跳的速度。使用这个函数,需要#include

#include #include#include

voidmain()

{inti,j;int x = 0;int y = 5;int velocity_x = 1;int velocity_y = 1;int left = 0;int right = 20;int top = 0;int bottom = 10;while (1)

{

x= x +velocity_x;

y= y +velocity_y;

system("cls"); //清屏函数//输出小球前的空行

for(i=0;i

printf("\n");for (j=0;j

printf(" ");

printf("o"); //输出小球o

printf("\n");

Sleep(50); //等待若干毫秒

if ((x==top)||(x==bottom))

velocity_x= -velocity_x;if ((y==left)||(y==right))

velocity_y= -velocity_y;

}

}

这里出个思考题,如果没有sleep函数的话,能否利用循环,实现小球速度变慢的效果?

结果:

#include #include#include#includemain() {inti, j;int x = 0;int y = 5;int velocity_x = 1;int velocity_y = 1;int left = 0;int right = 20;int top = 0;int 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");

printf("\n");/*for (int k = 0; k < 1000000000; k++)

{

continue;

}*/ //拖慢小球运行速度

Sleep(50); //等待若干毫秒

if ((x == top) || (x ==bottom))

velocity_x= -velocity_x;if ((y == left || y ==right))

velocity_y= -velocity_y;

}

}

另外,大家可以尝试下 printf("\a"); 实现小球碰到边界时响铃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值