随机小球移动实验

一.实验描述

     使用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.使用函数时,函数的参数可以在开头定义变量,便于修改和理解函数的使用。

   

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值