zoukankan      html  css  js  c++  java
  • 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里面完成的,起初对实验步骤流程不是特别清楚,但后来发现
    和前面的游戏差不多,绿色小球每移动位置,前面位置就要变成黑色,这个有彩色
    带入对那些大型游戏很好,不那么孤单,看起来就非常有感觉,增加兴趣。

  • 相关阅读:
    [C语言]数据类型与计算
    [C语言]变量VS常量
    [C语言]在命令行编译执行程序
    [cocos2d-x]游戏开发基础(图)
    [cocos2d-x]移动平台游戏开发(图)
    [cocos2d-x]认识游戏开发(图)
    [jQ/PHP]再谈使用JS数组储值的运用(提交PHP处理)
    [Nginx]Nginx的基本配置与优化1(完整配置示例与虚拟主机配置)
    [JS]如何理解JS中的类和对象
    [jPlayer]一分钟部署jPlayer
  • 原文地址:https://www.cnblogs.com/chenxinxin/p/11042438.html
Copyright © 2011-2022 走看看