我是靠谱客的博主 优雅泥猴桃,这篇文章主要介绍随机小球移动实验,现在分享给大家,希望可以做个参考。

一.实验描述

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

二.代码实现

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#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.使用函数时,函数的参数可以在开头定义变量,便于修改和理解函数的使用。

   

  

最后

以上就是优雅泥猴桃最近收集整理的关于随机小球移动实验的全部内容,更多相关随机小球移动实验内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部