跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

C语言实现弹跳小球动画

目录

一、项目描述和最终成果展示

二、实现一个移动的球

三、弹跳一个小球

四、弹跳一个小球(改进版)

五、多个球碰撞

六、多个球碰撞(升级版)

本文实例为大家分享了C语言实现弹跳小球动画的具体代码,供大家参考,具体内容如下

一、项目描述和最终成果展示

项目描述:  一个球来回的跳动效果图如下:

二、实现一个移动的球

代码如下:#include#includeint main(void){int x;initgraph(640,480);for(x=100;x<540;x=x+20){setcolor(YELLOW);//绘制黄线,绿色填充的圆setfillcolor(GREEN);fillcircle(x,100,20);Sleep(320);//延时/*setcolor(BLACK);//绘制黑线,黑色填充的圆//目的清除以前的圆,达到小球动态移动的效果//等价于清屏函数setfillcolor(BLACK);fillcircle(x,100,20);*/ cleardevice();}closegraph();return 0;}

三、弹跳一个小球

代码如下:#include#include#define High 480 //游戏画布尺寸#define Width 640 int main(void){float ball_x,ball_y;//小球的坐标float ball_vx,ball_vy;//小球的速度float radius;//小球的半径

initgraph(Width,High);ball_x=Width/2;ball_y=High/2;ball_vx=1;ball_vy=1;radius=20;while(1){setcolor(BLACK);//绘制黑色,黑色填充的圆//不用清屏函数的好处:不会闪屏setfillcolor(BLACK);fillcircle(ball_x,ball_y,radius);

//更新圆的坐标ball_x=ball_x+ball_vx;ball_y=ball_y+ball_vy;

if( (ball_x<=radius) || (ball_x>=Width-radius) ) ball_vx=-ball_vx;if( (ball_y<=radius) || (ball_y>=High-radius) ) ball_vy=-ball_vy;

//绘制黄线,绿色填充的圆setcolor(YELLOW);setfillcolor(GREEN);fillcircle(ball_x,ball_y,radius);Sleep(3);}closegraph();return 0;}效果图如下:

四、弹跳一个小球(改进版)

代码如下:#include#include#define High 480 //游戏画布尺寸#define Width 640 int main(void){float ball_x,ball_y;//小球的坐标float ball_vx,ball_vy;//小球的速度float radius;//小球的半径

initgraph(Width,High);ball_x=Width/2;ball_y=High/2;ball_vx=1;ball_vy=1;radius=20;BeginBatchDraw();while(1){setcolor(BLACK);//绘制黑色,黑色填充的圆//不用清屏函数的好处:不会闪屏setfillcolor(BLACK);fillcircle(ball_x,ball_y,radius);

//更新圆的坐标ball_x=ball_x+ball_vx;ball_y=ball_y+ball_vy;

if( (ball_x<=radius) || (ball_x>=Width-radius) ) ball_vx=-ball_vx;if( (ball_y<=radius) || (ball_y>=High-radius) ) ball_vy=-ball_vy;

//绘制黄线,绿色填充的圆setcolor(YELLOW);setfillcolor(GREEN);fillcircle(ball_x,ball_y,radius);

FlushBatchDraw();Sleep(3);}EndBatchDraw();closegraph();return 0;}效果图如下:

五、多个球碰撞

代码如下:#include#include#define High 480 //游戏画布尺寸#define Width 640#define BallNum 5 //小球的个数int main(void){float ball_x[BallNum],ball_y[BallNum];//小球的坐标float ball_vx[BallNum],ball_vy[BallNum];//小球的速度float radius=20;//小球的半径int i;

for(i=0;i

initgraph(Width,High);BeginBatchDraw();while(1){setcolor(BLACK);//绘制黑色,黑色填充的圆//不用清屏函数的好处:不会闪屏setfillcolor(BLACK);for(i=0;i

//更新圆的坐标for(i=0;i

//判断是否和墙壁碰撞for(i=0;i=Width-radius) ) ball_vx[i]=-ball_vx[i];if( (ball_y[i]<=radius) || (ball_y[i]>=High-radius) ) ball_vy[i]=-ball_vy[i];}

//绘制黄线,绿色填充的圆setcolor(YELLOW);setfillcolor(GREEN);for(i=0;i效果图如下:

六、多个球碰撞(升级版)

增加了球与球之间的碰撞代码如下:#include#include#include#define High 480  //游戏画面大小#define Width 640#define BallNum 15//小球的个数

int main(void){float ball_x[BallNum],ball_y[BallNum];//小球的坐标float ball_vx[BallNum],ball_vy[BallNum];//小球的速度float radius;//小球的半径int i,j;radius=20;

for(i=0;i

while(1){setcolor(BLACK);//绘制黑色,黑色填充的圆//不用清屏函数的好处:不会闪屏setfillcolor(BLACK);for(i=0;i

//更新小球的坐标for(i=0;i

//把超出边界的小球拉回来if(ball_x[i]Width-radius) ball_x[i]=Width-radius;if(ball_y[i]>High-radius) ball_y[i]=High-radius;}

//判断是否和墙壁碰撞for(i=0;i=Width-radius) ) ball_vx[i]=-ball_vx[i];if( (ball_y[i]<=radius) || (ball_y[i]>=High-radius) ) ball_vy[i]=-ball_vy[i];}

float minDistances2[BallNum][2];//记录某个小球和与它最近小球的距离,以及这个小球的坐标

for(i=0;i

//判断小球之间是否碰撞for(i=0;i

minDistances2[j][0]=9999999;//避免交换两次速度,又回去了minDistances2[j][1]=-1;}}//绘制黄线,绿色填充的圆setcolor(YELLOW);setfillcolor(GREEN);for(i=0;i效果图如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:C语言用函数实现反弹球消砖块C语言实现弹跳小球项目C语言实现简单反弹球消砖块游戏C语言实现简单弹跳小球C语言实现反弹球消砖块游戏C语言实现反弹球游戏C语言实现弹跳小球C语言实现简单弹跳球游戏C语言实现反弹球小游戏C语言实现简单弹球游戏

相关文章