我是靠谱客的博主 优雅泥猴桃,最近开发中收集的这篇文章主要介绍随机小球移动实验,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.实验描述

     使用EasyX随机生成10个半径起始位置的小球,随机设置速度,小球遇到边框反弹

二.代码实现

#include <graphics.h>
#include <conio.h>
#include <stdio.h>
//生成[min,max]之间的随机整数
int randBetweenMinMax(int min, int max)
{
	int r = rand() % (max - min + 1) + min;
	return r;
}
int main()
{
	int width = 800;                       //窗口长度
	int height = 600;                      //窗口宽度
	int xs[10];                            //小球x坐标
	int ys[10];                            //小球y坐标
	int rs[10];                            //小球半径
	int vys[10];                           //小球上下移动速度
	int vxs[10];                           //小球左右移动速度
	initgraph(width, height);              //窗口初始化,长800,高600
	//小球位置速度初始化
	setfillcolor(BLUE);//小球填充颜色蓝色
	setlinecolor(RED);//小球边框线颜色红色
	for (int i = 0; i < 10; i++)
	{
		xs[i] = randBetweenMinMax(30,width-30);
		ys[i] = randBetweenMinMax(30,height-30);            
		vxs[i] = randBetweenMinMax(-3,3);
		vys[i] = randBetweenMinMax(2,5);
		rs[i] = randBetweenMinMax(10,20);
	}
	//BeginBatchDraw();//清除所有绘图,直到FlushBatchDraw()将所有的绘图显示
	while(1) 
	{
		//根据速度,更新每个小球位置
		for(int i = 0;i < 10;i++)
		{
			ys[i] += vys[i];
			xs[i] += vxs[i];
			//小球碰到边界,对应速度反向
			if (ys[i] > height - rs[i] || ys[i] < rs[i])
				vys[i] = -vys[i];
			if (xs[i] > width - rs[i] || xs[i] < rs[i])
				vxs[i] = -vxs[i];
		}
		//重新显示每个小球
		cleardevice();                             //清屏
		for(int i=0;i<10;i++)
		{
			fillcircle(xs[i], ys[i], rs[i]);  //重新画小球
			BeginBatchDraw();
		}
		FlushBatchDraw();                         //批量绘制
		Sleep(10);                      //暂停10毫秒
	}

	return 0;
}

二.心得体会

     1.代码的可读性;

     2.一些反复出现的功能可以写一个函数,缩短代码同时便于阅读;

     3.需要绘制多个圆时,可以先使用BeginBatchDraw()不显示绘图过程,绘制完成后使用FlushBatchDraw()一次性画出所有圆,消除小球残影;

     4.数组的使用;

     5.使用函数时,函数的参数可以在开头定义变量,便于修改和理解函数的使用。

   

  

最后

以上就是优雅泥猴桃为你收集整理的随机小球移动实验的全部内容,希望文章能够帮你解决随机小球移动实验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部