编程环境:Visual Stdio2022 插件:EasyX
创建框架
窗口中的大小可以自己根据喜好而定
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<time.h> //可以用于打乱数字顺序
int main() {
initgraph(800, 600); //设置窗口大小
setbkcolor(WHITE); //背景颜色设置成白色
cleardevice(); //刷新屏幕,不然还是黑的
_getch(); //一直获取输入,可以让窗口一直固定
closegraph(); //关闭设置
}
随机出现的圆点
先学习一下如何产生随机数
srand(time(0)); // 先打乱数字的顺序,不然后面产生的随机数一直只有一个
rand()%100; //表示在100以内产生一个随机数,若没有srand(time(0))每次都是41
rand()%100+50; //表示在50~100以内产生随机数
先尝试产生以下图片中的效果
代码参考:
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<time.h>
int main() {
initgraph(800, 600);
setbkcolor(WHITE);
cleardevice();
srand(time(0)); //打乱顺序
int x, y, r, num = 0; //圆的坐标x,y;半径r,num为圆的个数
while(1) { //一直绘制圆点
x = rand() % 800;
y = rand() % 600;
r = rand() % 50 + 8; //半径在8~50以内随机大小
setlinecolor(BLACK); //边框设置成黑色
setfillcolor(RGB(255, 0, 0)); //填充颜色设置成红色,理解两种不同的设置颜色的方式
fillcircle(x, y, r); //绘制实心圆点,不设置颜色默认是白色
Sleep(100); //延迟一下,看得见出现过程
}
_getch();
closegraph();
}
颜色单词要用大写,也可以用计算机三原色RGB
RGB(0,0,0)为黑色,RGB(255,255,255) 为白色
可以自己尝试多种颜色
不重叠的圆
1、需要用数组来存储新增的圆
int cx[1000], cy[1000], cr[1000];
2、计算两个圆的距离
根据坐标求解两个点之间的距离可以用
dist=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)
和半径之间比较,计算半径:dr=(r1-r2)*(r1-r2)
若dist<dr 说明两个圆有重叠部分
代码参考:
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<time.h>
int main() {
initgraph(800, 600);
setbkcolor(WHITE);
cleardevice();
srand(time(0));
int x,y,r, num = 0;
int cx[1000], cy[1000], cr[1000]; //存储新增的圆位置和半径
int i; //先定义一个i
while(1){
bool yesok = 0; //判断是否有重叠,按有重叠处理
while (yesok == 0) { //无线循环是为了直到新的圆位置没有重叠为止
x = rand() % 800;
y = rand() % 600;
r = rand() % 100 + 8;
for ( i = 0; i < num; i++) { //遍历已经存在的圆的坐标位置和半径
float dist = (cx[i] - x) * (cx[i] - x) + (cy[i] - y) * (cy[i] - y);
float dr = (cr[i] +r) * (cr[i] + r);
if (dist < dr) break; //存在相交,跳出循环,继续产生随机值
}
if (i == num) yesok = 1; //直到遍历完了已存在的所有圆,设置yesok=1,就跳出了while
}
cx[num] = x; //在数组中新增圆的坐标位置
cy[num] = y;
cr[num] = r;
setlinecolor(BLACK);
setfillcolor(RGB(255, 0, 0));
fillcircle(x, y, r);
num++; //个数加一
Sleep(100);
}
_getch();
closegraph();
}
以此可以实现基本的见缝插圆的效果了
最后:弄个随机颜色
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<time.h>
int main() {
initgraph(800, 600);
setbkcolor(WHITE);
cleardevice();
srand(time(0));
int x,y,r, num = 0;
int cx[1000], cy[1000], cr[1000]; //存储新增的圆位置和半径
int i;
while(1){
bool yesok = 0;
while (yesok == 0) {
x = rand() % 800;
y = rand() % 600;
r = rand() % 100 + 8;
for ( i = 0; i < num; i++) {
float dist = (cx[i] - x) * (cx[i] - x) + (cy[i] - y) * (cy[i] - y);
float dr = (cr[i] +r) * (cr[i] + r);
if (dist < dr) break; //不相交
}
if (i == num) yesok = 1; //排除第一个圆的情况,不然就挑不出循环
}
cx[num] = x;
cy[num] = y;
cr[num] = r;
//随机颜色
int red = rand() % 255;
int green= rand() % 255;
int blue= rand() % 255;
setlinecolor(BLACK);
setfillcolor(RGB(red,green,blue)); //颜色参数修改
fillcircle(x, y, r);
num++;
Sleep(100);
}
_getch();
closegraph();
}
来吧,展示:
学废了吗?