怎样用easyx使一个圆作随机运动

热血打工人 2017-12-25 08:12:59
#include "graphics.h"
#include <stdlib.h>
#include <time.h>
int huaquan()
{

for(;;)
{
srand(time(NULL));
int x=rand()%640;
srand(time(NULL));
int y=rand()%480;
srand(time(NULL));
int dir = rand()%4;

setfillcolor(BLACK);
setlinestyle(PS_ENDCAP_FLAT, 3);


switch(dir)
{
case 0:
x-=100;
break;
case 1:
y-=100;
break;
case 2:
x+=100;
break;
case 3:
y+=100;
break;
}
fillcircle(x,y,30);

//cleardevice();

}
return 0;
}
int main(int argc, char* argv[])
{
initgraph(640, 480);
huaquan();
closegraph();
return 0;
}

还有 发生碰撞的需求。
...全文
596 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
destory27 2017-12-27
  • 打赏
  • 举报
回复
引用 7 楼 u011583120 的回复:
[quote=引用 6 楼 destory27 的回复:]
#include <graphics.h>
#include <stdio.h>
#include <conio.h>

void q_move(int x, int y, int r)
{

	for (; x + r/2 <= 640; x += 5) {
		setcolor(RED);
		circle(x, y, r);
		setfillcolor(RED);
		fillcircle(x, y, r);
		Sleep(10);
		setcolor(BLACK);
		circle(x, y, r);
		setfillcolor(BLACK);
		fillcircle(x, y, r);

	}


	return;
}

void kb_cir_mov(void)
{
	initgraph(640, 480);

	setcolor(RED);
	const int r = 20;
	int x = 320;
	int y = 240;
	circle(x, y, r);
	setfillcolor(RED);
	fillcircle(x, y, r);
	setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 6);
	line(x, y + r, x, y + r + 20);
	line(x, y + r, x - 20, y + 35);
	line(x, y + r, x + 20, y + 35);
	line(x, y + r + 20, x - 20, y + 70);
	line(x, y + r + 20, x + 20, y + 70);

	char c = 0;

	while (c != 27) {
		if (kbhit()) {
			c = getch();
			switch (c) {
				case 'w': {
					setcolor(BLACK);
					circle(x, y, r);
					setfillcolor(BLACK);
					fillcircle(x, y, r);
					setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 6);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

					if (y - r <= 0) {
						setcolor(RED);
						circle(x, y, r);
						setfillcolor(RED);
						fillcircle(x, y, r);
						line(x, y + r, x, y + r + 20);
						line(x, y + r, x - 20, y + 35);
						line(x, y + r, x + 20, y + 35);
						line(x, y + r + 20, x - 20, y + 70);
						line(x, y + r + 20, x + 20, y + 70);
						break;
					}
					y -= 20;
					setcolor(RED);
					circle(x, y, r);
					setfillcolor(RED);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

				}break;

				case 's': {
					setcolor(BLACK);
					circle(x, y, r);
					setfillcolor(BLACK);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

					if (y + r + 70 >= 480) {
						setcolor(RED);
						circle(x, y, r);
						setfillcolor(RED);
						fillcircle(x, y, r);
						line(x, y + r, x, y + r + 20);
						line(x, y + r, x - 20, y + 35);
						line(x, y + r, x + 20, y + 35);
						line(x, y + r + 20, x - 20, y + 70);
						line(x, y + r + 20, x + 20, y + 70);
						break;
					}
					y += 20;
					setcolor(RED);
					circle(x, y, r);
					setfillcolor(RED);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

				}break;
				case 'a': {
					setcolor(BLACK);
					circle(x, y, r);
					setfillcolor(BLACK);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

					if (x - 35 <= 0) {
						setcolor(RED);
						circle(x, y, r);
						setfillcolor(RED);
						fillcircle(x, y, r);
						line(x, y + r, x, y + r + 20);
						line(x, y + r, x - 20, y + 35);
						line(x, y + r, x + 20, y + 35);
						line(x, y + r + 20, x - 20, y + 70);
						line(x, y + r + 20, x + 20, y + 70);
						break;
					}
					x -= 20;
					setcolor(RED);
					circle(x, y, r);
					setfillcolor(RED);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);
				}break;

				case 'd': {
					setcolor(BLACK);
					circle(x, y, r);
					setfillcolor(BLACK);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

					if (x + 35 >= 640){
						setcolor(RED);
						circle(x, y, r);
						setfillcolor(RED);
						fillcircle(x, y, r);
						line(x, y + r, x, y + r + 20);
						line(x, y + r, x - 20, y + 35);
						line(x, y + r, x + 20, y + 35);
						line(x, y + r + 20, x - 20, y + 70);
						line(x, y + r + 20, x + 20, y + 70);
						break;
					
					}
					x += 20;
					setcolor(RED);
					circle(x, y, r);
					setfillcolor(RED);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);
				}break;

				case 'q': {
					/*	
					circle(x + 23, y, 5);
					setfillcolor(RED);
					fillcircle(x + 23, y, 5);
					*/
					q_move(x + 28, y, 5);

				}break;


				default:continue;
					
			}
		}

	}

	closegraph();


	return;
}

int main(void)
{
	kb_cir_mov();

	return 0;
}
值得学习[/quote] 结贴吧
热血打工人 2017-12-27
  • 打赏
  • 举报
回复
引用 6 楼 destory27 的回复:
#include <graphics.h>
#include <stdio.h>
#include <conio.h>

void q_move(int x, int y, int r)
{

	for (; x + r/2 <= 640; x += 5) {
		setcolor(RED);
		circle(x, y, r);
		setfillcolor(RED);
		fillcircle(x, y, r);
		Sleep(10);
		setcolor(BLACK);
		circle(x, y, r);
		setfillcolor(BLACK);
		fillcircle(x, y, r);

	}


	return;
}

void kb_cir_mov(void)
{
	initgraph(640, 480);

	setcolor(RED);
	const int r = 20;
	int x = 320;
	int y = 240;
	circle(x, y, r);
	setfillcolor(RED);
	fillcircle(x, y, r);
	setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 6);
	line(x, y + r, x, y + r + 20);
	line(x, y + r, x - 20, y + 35);
	line(x, y + r, x + 20, y + 35);
	line(x, y + r + 20, x - 20, y + 70);
	line(x, y + r + 20, x + 20, y + 70);

	char c = 0;

	while (c != 27) {
		if (kbhit()) {
			c = getch();
			switch (c) {
				case 'w': {
					setcolor(BLACK);
					circle(x, y, r);
					setfillcolor(BLACK);
					fillcircle(x, y, r);
					setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 6);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

					if (y - r <= 0) {
						setcolor(RED);
						circle(x, y, r);
						setfillcolor(RED);
						fillcircle(x, y, r);
						line(x, y + r, x, y + r + 20);
						line(x, y + r, x - 20, y + 35);
						line(x, y + r, x + 20, y + 35);
						line(x, y + r + 20, x - 20, y + 70);
						line(x, y + r + 20, x + 20, y + 70);
						break;
					}
					y -= 20;
					setcolor(RED);
					circle(x, y, r);
					setfillcolor(RED);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

				}break;

				case 's': {
					setcolor(BLACK);
					circle(x, y, r);
					setfillcolor(BLACK);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

					if (y + r + 70 >= 480) {
						setcolor(RED);
						circle(x, y, r);
						setfillcolor(RED);
						fillcircle(x, y, r);
						line(x, y + r, x, y + r + 20);
						line(x, y + r, x - 20, y + 35);
						line(x, y + r, x + 20, y + 35);
						line(x, y + r + 20, x - 20, y + 70);
						line(x, y + r + 20, x + 20, y + 70);
						break;
					}
					y += 20;
					setcolor(RED);
					circle(x, y, r);
					setfillcolor(RED);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

				}break;
				case 'a': {
					setcolor(BLACK);
					circle(x, y, r);
					setfillcolor(BLACK);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

					if (x - 35 <= 0) {
						setcolor(RED);
						circle(x, y, r);
						setfillcolor(RED);
						fillcircle(x, y, r);
						line(x, y + r, x, y + r + 20);
						line(x, y + r, x - 20, y + 35);
						line(x, y + r, x + 20, y + 35);
						line(x, y + r + 20, x - 20, y + 70);
						line(x, y + r + 20, x + 20, y + 70);
						break;
					}
					x -= 20;
					setcolor(RED);
					circle(x, y, r);
					setfillcolor(RED);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);
				}break;

				case 'd': {
					setcolor(BLACK);
					circle(x, y, r);
					setfillcolor(BLACK);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

					if (x + 35 >= 640){
						setcolor(RED);
						circle(x, y, r);
						setfillcolor(RED);
						fillcircle(x, y, r);
						line(x, y + r, x, y + r + 20);
						line(x, y + r, x - 20, y + 35);
						line(x, y + r, x + 20, y + 35);
						line(x, y + r + 20, x - 20, y + 70);
						line(x, y + r + 20, x + 20, y + 70);
						break;
					
					}
					x += 20;
					setcolor(RED);
					circle(x, y, r);
					setfillcolor(RED);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);
				}break;

				case 'q': {
					/*	
					circle(x + 23, y, 5);
					setfillcolor(RED);
					fillcircle(x + 23, y, 5);
					*/
					q_move(x + 28, y, 5);

				}break;


				default:continue;
					
			}
		}

	}

	closegraph();


	return;
}

int main(void)
{
	kb_cir_mov();

	return 0;
}
值得学习
destory27 2017-12-26
  • 打赏
  • 举报
回复
#include <graphics.h>
#include <stdio.h>
#include <conio.h>

void q_move(int x, int y, int r)
{

	for (; x + r/2 <= 640; x += 5) {
		setcolor(RED);
		circle(x, y, r);
		setfillcolor(RED);
		fillcircle(x, y, r);
		Sleep(10);
		setcolor(BLACK);
		circle(x, y, r);
		setfillcolor(BLACK);
		fillcircle(x, y, r);

	}


	return;
}

void kb_cir_mov(void)
{
	initgraph(640, 480);

	setcolor(RED);
	const int r = 20;
	int x = 320;
	int y = 240;
	circle(x, y, r);
	setfillcolor(RED);
	fillcircle(x, y, r);
	setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 6);
	line(x, y + r, x, y + r + 20);
	line(x, y + r, x - 20, y + 35);
	line(x, y + r, x + 20, y + 35);
	line(x, y + r + 20, x - 20, y + 70);
	line(x, y + r + 20, x + 20, y + 70);

	char c = 0;

	while (c != 27) {
		if (kbhit()) {
			c = getch();
			switch (c) {
				case 'w': {
					setcolor(BLACK);
					circle(x, y, r);
					setfillcolor(BLACK);
					fillcircle(x, y, r);
					setlinestyle(PS_SOLID | PS_ENDCAP_SQUARE, 6);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

					if (y - r <= 0) {
						setcolor(RED);
						circle(x, y, r);
						setfillcolor(RED);
						fillcircle(x, y, r);
						line(x, y + r, x, y + r + 20);
						line(x, y + r, x - 20, y + 35);
						line(x, y + r, x + 20, y + 35);
						line(x, y + r + 20, x - 20, y + 70);
						line(x, y + r + 20, x + 20, y + 70);
						break;
					}
					y -= 20;
					setcolor(RED);
					circle(x, y, r);
					setfillcolor(RED);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

				}break;

				case 's': {
					setcolor(BLACK);
					circle(x, y, r);
					setfillcolor(BLACK);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

					if (y + r + 70 >= 480) {
						setcolor(RED);
						circle(x, y, r);
						setfillcolor(RED);
						fillcircle(x, y, r);
						line(x, y + r, x, y + r + 20);
						line(x, y + r, x - 20, y + 35);
						line(x, y + r, x + 20, y + 35);
						line(x, y + r + 20, x - 20, y + 70);
						line(x, y + r + 20, x + 20, y + 70);
						break;
					}
					y += 20;
					setcolor(RED);
					circle(x, y, r);
					setfillcolor(RED);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

				}break;
				case 'a': {
					setcolor(BLACK);
					circle(x, y, r);
					setfillcolor(BLACK);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

					if (x - 35 <= 0) {
						setcolor(RED);
						circle(x, y, r);
						setfillcolor(RED);
						fillcircle(x, y, r);
						line(x, y + r, x, y + r + 20);
						line(x, y + r, x - 20, y + 35);
						line(x, y + r, x + 20, y + 35);
						line(x, y + r + 20, x - 20, y + 70);
						line(x, y + r + 20, x + 20, y + 70);
						break;
					}
					x -= 20;
					setcolor(RED);
					circle(x, y, r);
					setfillcolor(RED);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);
				}break;

				case 'd': {
					setcolor(BLACK);
					circle(x, y, r);
					setfillcolor(BLACK);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);

					if (x + 35 >= 640){
						setcolor(RED);
						circle(x, y, r);
						setfillcolor(RED);
						fillcircle(x, y, r);
						line(x, y + r, x, y + r + 20);
						line(x, y + r, x - 20, y + 35);
						line(x, y + r, x + 20, y + 35);
						line(x, y + r + 20, x - 20, y + 70);
						line(x, y + r + 20, x + 20, y + 70);
						break;
					
					}
					x += 20;
					setcolor(RED);
					circle(x, y, r);
					setfillcolor(RED);
					fillcircle(x, y, r);
					line(x, y + r, x, y + r + 20);
					line(x, y + r, x - 20, y + 35);
					line(x, y + r, x + 20, y + 35);
					line(x, y + r + 20, x - 20, y + 70);
					line(x, y + r + 20, x + 20, y + 70);
				}break;

				case 'q': {
					/*	
					circle(x + 23, y, 5);
					setfillcolor(RED);
					fillcircle(x + 23, y, 5);
					*/
					q_move(x + 28, y, 5);

				}break;


				default:continue;
					
			}
		}

	}

	closegraph();


	return;
}

int main(void)
{
	kb_cir_mov();

	return 0;
}
ooolinux 2017-12-26
  • 打赏
  • 举报
回复
圆心坐标x,y,程序循环中每次产生随机数dx,dy(正负对称分布),新的圆心坐标为x+dx,y+dy,超出边界的时候处理一下,比如超过的部分减(反弹)回来。
赵4老师 2017-12-26
  • 打赏
  • 举报
回复
百度搜相关关键字。
热血打工人 2017-12-26
  • 打赏
  • 举报
回复
现在这个圆的运动是有规律的,请大佬指点一下。
热血打工人 2017-12-25
  • 打赏
  • 举报
回复
目前这代码只能展示一个圆。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧