zoukankan      html  css  js  c++  java
  • C语言第四次实验报告

    第四次实验报告

    一·实验项目名称: 多球反弹

    二·实验项目功能描述:

    (1)实现多个小球
    (2)实现多个小球碰壁会反弹
    (3)实现小球之间碰撞反弹

    三· 项目模块结构介绍

    #define High 480
    #define Width 640
    #define BallNum 15      //定义小球个数和游戏尺寸
    
    //对小球的输入
     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;
    	}
    
    //制造黑色的球,为了小球移动到该位置恢复到黑色
    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]<=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]=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里面完成的,起初对实验步骤流程不是特别清楚,但后来发现
    和前面的游戏差不多,绿色小球每移动位置,前面位置就要变成黑色,这个有彩色
    带入对那些大型游戏很好,不那么孤单,看起来就非常有感觉,增加兴趣。

  • 相关阅读:
    Python爬虫入门教程 53-100 Python3爬虫获取三亚天气做旅游参照
    计算机大专学历,2019如何应届毕业薪水过万!
    Python爬虫入门教程 52-100 Python3爬虫获取博客园文章定时发送到邮箱
    Python爬虫入门教程 51-100 Python3爬虫通过m3u8文件下载ts视频-Python爬虫6操作
    Python爬虫入门教程 50-100 Python3爬虫爬取VIP视频-Python爬虫6操作
    nvm-windows
    如何进行 IIS Log 分析
    常用 Jenkins 配置
    Jenkins 插件安装问题
    常用 SQL Server 脚本
  • 原文地址:https://www.cnblogs.com/djhxxx/p/11042404.html
Copyright © 2011-2022 走看看