• 2019春第四次课程实验报告


    一·实验项目名称: 多球反弹
    二·实验项目功能描述:
    (1)实现多个小球
    (2)实现多个小球碰壁会反弹
    (3)实现小球之间碰撞反弹

    三· 项目模块结构介绍

    define High 480

    define Width 640

    define BallNum 15 //定义小球个数和游戏尺寸

    //对小球的输入
    for(i=0;i<BallNum;i++)
    {
    ball_x[i]=rand()%int(Width-4radius)+2+radius;
    ball_y[i]=rand()%int(High-4
    radius)+2radius;
    ball_vx[i]=(rand()%2)
    2-1;
    ball_vy[i]=(rand()%2)*2-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];
    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]=9999999;
    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[1][0])
    {
    minDistances2[i][0]=dist2;
    minDistances2[i][1]=j;
    }
    }
    }
    }
    for(i=0;i<BallNum;i++)
    {
    if(minDistances2[i][0]<=4radiusradius)
    {
    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]=999999999;
    minDistances2[j][1]=-1;
    }
    }

    //回执绿色的圆
    setcolor(YELLOW);
    setfillcolor(GREEN);
    for(i=0;i<BallNum;i++)
    fillcircle(ball_x[i], ball_y[i], radius);

    四·界面展示

    五·代码托管链接:
    https://gitee.com/djh000/djh000/commit/937d05be39ddce1406943cbb2ba0f11ca93833fe

    六·实验总结
    该实验时在C++6.0里面完成的,起初对实验步骤流程不是特别清楚,但后来发现
    和前面的游戏差不多,绿色小球每移动位置,前面位置就要变成黑色,这个有彩色
    带入对那些大型游戏很好,不那么孤单,看起来就非常有感觉,增加兴趣。

  • 相关阅读:
    devexpress GridView按条件给行号上色
    简答正则表达式的使用
    devexpress 给GridView添加行号
    C# Winfrom 简单的运用Timer控件
    C# 简单TCP协议
    Lucene全文检索-从零开始(3)
    Lucene全文检索-从零开始(2)
    Lucene全文检索-从零开始(1)
    js 高级编程前三章
    莫名的胸闷
  • 原文地址:https://www.cnblogs.com/chenxinxin/p/11042438.html
Copyright © 2020-2023  润新知