继续请教各位专家吸尘机器人C语言题目
题目要求是这样:有一个吸尘机器人在一个已经生成好的地图里进行吸尘工作(地图由多个正方的单位格子组成,地图的X和Y轴的长度或者说是格子数由编程者输入,地图在生成的时候会随机在此地图上出现1-20个障碍物),地图上的灰尘位置也是随机的但是灰尘的数量和一个变量Y有关(比如Y=1表示地图上每个格子都有灰尘,如果Y=4则是每4个格子会随机出现1个有灰尘的格子)而且同时还会和另一个变量X有关(X表示在机器人做了N个‘动作’所消耗的时间,经过这段时间会有一个新的灰尘随机出现在机器人走过的格子中),机器人带有扫描仪可以预先扫描到障碍物和灰尘的位置以便选择最近的灰尘和最捷径的路线。机器人有一个电池容量为C,机器人每做一个‘动作’就会消耗掉一个单位的电量(通俗点就是一格电),机器人的‘动作’包括‘走一个格子’、‘吸一个灰尘’或是‘旋转一次’(例如:如果机器人在一个格子里做了走、吸、转三个动作也就代表在一个格子里它消耗个三格电)。地图的起始点也是随机生成的(会出现在地图的任何一个格子上),在地图的起始点有一个充电器,机器人要在没电之前返回起始点进行充电,充电的时间为CT,充满电后机器人将继续执行吸尘工作。如果在没电之前机器人未能返回起始点进行充电程序将结束。此外机器人的储灰囊也是有容量限制的,容量为S,一旦储灰囊满程序将自动结束。程序开始之前会为机器人定义一个总的模拟动作的数量T如果在完成T个动作后程序将自动结束(也就是说:“T-走的数-吸的数-转的数==0”程序结束)。最后题目要求要在屏幕上显示机器人行走的步数和旋转的次数。我在编程遇到的最大问题就是不知道如何编写机器人在随机生成的障碍物前如何绕开障碍物还要保持最捷径的路径。之前在“espier”的帮助下地图生成的基本程序已经完成,之后我做出地图生成和主程序的PAP,希望各位大人们能帮忙解决下障碍物无法正常显示坐标的问题,和机器人遇到特殊障碍物时该如何实现保持最近距离的情况下绕开障碍物。附件中有PAP和特殊障碍物演示图。此程序为“espier”编写的地图生成程序(问题是障碍物无法正常显示坐标):
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
#define N 10000
main()
{
int y0, x0, a, b, c[N], d[N], e, f, i, x, y;
printf("智能机器启动中\n\n");
v:srand((int)time(0));
printf("请输入 x 和 y 绘制地图:\n");
scanf("%d %d", &x, &y);
printf("绘制中\n");
sleep(3);
i = x * y;e=0;
for (y0 = 1; y0 <= y; y0++)
{
printf("\n");
for (x0 = 1; x0 <= x; x0++)
{
printf(" [%d,%d]", x0, y0);
e += 1;
c[e] = (x0 - 1) * y + y0;
}
}
printf("\n正在赋值随机数据...\n");
sleep(3);
for (a = 1; a <= 20; a++)
{
d[a] =(int)(rand() % i);
printf(" %d ", d[a]);
for (b = 1; b <= i; b++)
{
if (d[a] == c[b])
c[b] = 0;
else
break;
}
}f=0;
for (y0 = 1; y0 <= y; y0++)
{
printf("\n");
for (x0 = 1; x0 <= x; x0++)
{
f += 1;
if (c[f] == 0)
printf("石");
else
printf(" [%d,%d]", x0, y0);
}
}
sleep(3);
printf("\n正在分析地图坐标...\n");
sleep(3);
for (a = 1; a <= i; a++)
printf("%d ", c[a]);
printf("\n");
goto v;
}
roboter.pdf
(119.41 KB)
地图生成.pdf
(72.09 KB)
[ 本帖最后由 sodimi 于 2014-11-23 19:26 编辑 ]