我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言实现弹跳小球动画

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言实现弹跳小球动画

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

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

项目描述:  一个球来回的跳动

效果图如下:

二、实现一个移动的球

代码如下:

#include<graphics.h>
#include<conio.h>
int 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);//延时
        
        cleardevice();
    }
    closegraph();
    return 0;
}

三、弹跳一个小球

代码如下:

#include<graphics.h>
#include<conio.h>
#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<graphics.h>
#include<conio.h>
#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<graphics.h>
#include<conio.h>
#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<BallNum;i++)
    {
        ball_x[i]=(i+2)*radius*3;
        ball_y[i]=High/2;
        ball_vx[i]=1;
        ball_vy[i]=1;
    }

    initgraph(Width,High);
    BeginBatchDraw();
    while(1)
    {
        setcolor(BLACK);//绘制黑色,黑色填充的圆
        //不用清屏函数的好处:不会闪屏
        setfillcolor(BLACK);
        for(i=0;i<BallNum;i++)
        {
            fillcircle(ball_x[i],ball_y[i],radius);
        }

        //更新圆的坐标
        for(i=0;i<BallNum;i++)
        {
            ball_x[i]=ball_x[i]+ball_vx[i];
            ball_y[i]=ball_y[i]+ball_vy[i];
        }

        //判断是否和墙壁碰撞
        for(i=0;i<BallNum;i++)
        {
            if( (ball_x[i]<=radius) || (ball_x[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<BallNum;i++)
        {
            fillcircle(ball_x[i],ball_y[i],radius);
        }
        FlushBatchDraw();
        Sleep(3);
    }
    EndBatchDraw();
    closegraph();
    return 0;
}

效果图如下:

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

增加了球与球之间的碰撞

代码如下:

#include<graphics.h>
#include<conio.h>
#include<math.h>
#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<BallNum;i++)//数据的初始化
    {
        ball_x[i]=rand()%int(Width-4*radius)+2*radius;
        ball_y[i]=rand()%int(High-4*radius)+2*radius;
        ball_vx[i]=(rand()%2)*2-1;
        ball_vy[i]=(rand()%2)*2-1;
    }
    initgraph(Width,High);
    BeginBatchDraw();

    while(1)
    {
        setcolor(BLACK);//绘制黑色,黑色填充的圆
        //不用清屏函数的好处:不会闪屏
        setfillcolor(BLACK);
        for(i=0;i<BallNum;i++)
        {
            fillcircle(ball_x[i],ball_y[i],radius);
        }

        //更新小球的坐标
        for(i=0;i<BallNum;i++)
        {
            ball_x[i]=ball_x[i]+ball_vx[i];
            ball_y[i]=ball_y[i]+ball_vx[i];

            //把超出边界的小球拉回来
            if(ball_x[i]<radius)
                ball_x[i]=radius;
            if(ball_y[i]<radius)
                ball_y[i]=radius;
            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<BallNum;i++)
        {    
            if( (ball_x[i]<=radius) || (ball_x[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<BallNum;i++)
        {
            minDistances2[i][0]=999999;
            minDistances2[i][1]=-1;
        }
        //求所有小球两两之间的距离的平方
        for(i=0;i<BallNum;i++)
        {
            for(j=0;j<BallNum;j++)
            {
                if(i!=j)//和自己不比
                {
                    float dist2;
                    dist2=(ball_x[i]-ball_x[j])*(ball_x[i]-ball_x[j])
                        +(ball_y[i]-ball_y[j])*(ball_y[i]-ball_y[j]);
                    if(dist2<minDistances2[i][0])
                    {
                        minDistances2[i][0]=dist2;
                        minDistances2[i][1]=j;
                    }
                }
            }
        }

        //判断小球之间是否碰撞
        for(i=0;i<BallNum;i++)
        {
            if(minDistances2[i][0]<=4*radius*radius)
            //若最小距离小于阈值,发生碰撞
            {
                j=minDistances2[i][1];
                //交换速度
                int temp;
                temp=ball_vx[i];ball_vx[i]=ball_vx[j];ball_vx[j]=temp;
                temp=ball_vy[i];ball_vy[i]=ball_vy[j];ball_vy[j]=temp;

                minDistances2[j][0]=9999999;//避免交换两次速度,又回去了
                minDistances2[j][1]=-1;
            }
        }    
        //绘制黄线,绿色填充的圆
        setcolor(YELLOW);
        setfillcolor(GREEN);
        for(i=0;i<BallNum;i++)
        {
            fillcircle(ball_x[i],ball_y[i],radius);
        }
        FlushBatchDraw();
        Sleep(3);
    }
    EndBatchDraw();
    closegraph();
    return 0;
}

效果图如下:

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言实现弹跳小球动画

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言如何实现弹跳小球动画

这篇文章主要介绍了C语言如何实现弹跳小球动画的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言如何实现弹跳小球动画文章都会有所收获,下面我们一起来看看吧。一、项目描述和最终成果展示项目描述: 一个球来回的跳
2023-06-30

C语言怎么实现弹跳小球效果

本文小编为大家详细介绍“C语言怎么实现弹跳小球效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么实现弹跳小球效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、项目描述和最终项目展示项目描述:
2023-06-30

C语言如何实现简单弹跳小球

这篇“C语言如何实现简单弹跳小球”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言如何实现简单弹跳小球”文章吧。本节利用
2023-06-30

C语言怎么实现简单弹跳小球

C语言可以通过使用图形库来实现简单的弹跳小球效果。首先,需要安装并使用一个图形库,比如Graphics.h。下面是一个简单的示例代码:```c#include int main() {int gd = DETECT, gm;initgrap
2023-08-18

CSS3如何实现弹跳的小球动画

小编给大家分享一下CSS3如何实现弹跳的小球动画,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!这个案例关键点在于小球弹跳的节奏感和布局定位。一、案例知识点1、相对
2023-06-08

Android实现跳动的小球加载动画效果

先来看看效果图跳动的小球做这个动画,需掌握: 1、属性动画 2、Path类、Canvas类 3、贝塞尔曲线 4、SurfaceView用法 5、自定义attr属性 6 、架构: 状态模式,控制
2022-06-06

c语言小球反弹问题怎么解决

在C语言中,可以使用循环结构来模拟小球的反弹问题。以下是一个简单的解决方案:```c#include int main() {int height; // 小球初始高度int times; // 反弹次数printf("请输入小球
2023-08-18

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录