在网上搜索后,我没有找到答案来帮助我。 我的课程在C。
我有一个项目列表(例如:37 a,22 b,29 c,13 d,19 e,2 f和0 g)我必须将所有这些项目随机放在地图上(在我的情况下) ,int [height] [lenght] [7])。 我想用rand来放置物品并循环直到整个物品被放置但是它使用了太多的时间和资源。
有没有办法轻松妥善地放置它们?
这是我的代码:
/* allocates the tab in order to place the ressources/items */
void create_map(t_world *world)
{
unsigned int x;
unsigned int y;
x = 0;
world->map = xmalloc(world->height * sizeof(int**));
while (x < world->height)
{
y = 0;
world->map[x] = xmalloc(world->lenght * sizeof(int*));
while (y < world->lenght)
{
world->map[x][y] = xmalloc(7 * sizeof(int));
bzero(world->map[x][y], 7);
++y;
}
++x;
}
}
/* base defining the number of required item */
t_elevation elevation_tab[] =
{
{1, {0, 1, 0, 0, 0, 0, 0} },
{2, {0, 1, 1, 1, 0, 0, 0} },
{2, {0, 2, 0, 1, 0, 2, 0} },
{4, {0, 1, 1, 2, 0, 1, 0} },
{4, {0, 1, 2, 1, 3, 0, 0} },
{6, {0, 1, 2, 3, 0, 1, 0} },
{6, {0, 2, 2, 2, 2, 2, 1} }
};
/* calculates the number of item required */
unsigned int *calc_elevation(t_world *world)
{
unsigned int i;
unsigned int pos;
unsigned int *tab;
i = 0;
tab = xmalloc(7 * sizeof(int));
bzero(tab, 7);
while (i < 7)
{
pos = 0;
while (pos < 7)
{
tab[pos] += (world->population /
elevation_tab[i].required_players +
world->population %
elevation_tab[i].required_players) *
(elevation_tab[i].required_ressources[pos]);
++pos;
}
++i;
}
return (tab);
}
void place_ressources(t_world *world, unsigned int *ressources)
{
//here is my missing code
}
/*First called function*/
void create_world(t_param *params, t_world *world)
{
unsigned int *ressources_needed;
world->lenght = params->lenght;
world->height = params->height;
world->population = params->team_size * 2;
create_map(world);
ressources_needed = calc_elevation(world);
place_ressources(world, ressources_needed);
show_map(world);
world->players = NULL;
free(ressources_needed);
}
世界是由用户决定的具有高度和长度的特定大小的网格。网格的每个案例都有一个int [7]传递每个项目的数量。所以我可以在同一个案例中放置多个项目。
答案 0 :(得分:0)
我可以想出两种可能的方法来解决这个问题,但它取决于需要处理多少项目。
我想到的第一件事是类似于如何在计算机程序中洗牌的解决方案。取第一个元素,随机生成x,y坐标。获取下一个元素并生成x,y坐标。如果那里没有项目,则将项目放在该位置,否则生成新的x,y坐标。继续这个以放置所有元素。
我能想到的另一件事是,如果你能以某种方式跟踪使用了哪些世界瓷砖,那么随机生成的坐标不会重复。
您的世界对象是3d数组的事实是指数级增加的计算。这绝对必要吗?当然,我真的不知道你的程序的具体上下文是什么