2012-06-11 5 views
1

웹을 통해 검색 한 후 도움이되는 답변을 찾지 못했습니다. 내 프로그램이 C 언어입니다.무작위로 항목을지도에 배치하는 방법은 무엇입니까?

나는 목록 (예 : 37a, 22b, 29c, 13d, 19e, 2f 및 0g)이 있으며, 항목을지도에 표시합니다 (필자의 경우 int [height] [lenght] [7]). 나는 항목을 배치하고 전체 항목을 배치 할 때까지 루프를 사용한다고 생각했지만 너무 많은 시간과 자원을 사용합니다.

쉽고 올바르게 배치 할 수있는 방법이 있습니까?

/* 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); 
} 

세계는 heigth와 아이폰에 사용하여 사용자에 의해 결정 특정 크기의 격자이다

여기 내 코드입니다. 그리드의 각 경우에는 각 항목의 양을 전달하는 int [7]가 있습니다. 그래서 같은 케이스에 여러 항목을 배치 할 수 있습니다.

+0

당신은 지금까지 어떤 코드를 가지고 있니? – Eregrith

+1

높이와 길이는 무엇입니까? 왜이 시간이 오래 걸리나요? 이미 점령 된 사각형에 물건을 두는 것을 피해야합니까? 그렇다면, 어떻게 할 것입니까? –

+0

소식이 수정되었습니다. 감사합니다 – ss814

답변

0

이 문제를 해결할 수있는 2 가지 방법을 생각할 수 있지만 얼마나 많은 항목을 처리해야하는지에 달려 있습니다.

내가 제일 먼저 생각한 것은 컴퓨터 프로그램에서 카드 더미를 섞는 방법과 비슷한 해결책이었습니다. 첫 번째 요소를 가져 와서 x, y 좌표를 임의로 생성합니다. 다음 요소를 가져 와서 x, y 좌표를 생성하십시오. 거기에 항목이 없으면 항목을 해당 위치에 놓고 그렇지 않으면 새로운 x, y 좌표를 생성합니다. 배치 할 모든 요소에 대해이 작업을 계속하십시오.

내가 생각할 수있는 또 다른 점은 어떻게 세계 타일이 사용되었는지 추적 할 수 있다면 무작위로 생성 된 좌표가 중복되지 않는다는 것입니다.

월드 개체가 3D 배열이라는 사실은 기하 급수적으로 증가하는 계산입니다. 꼭 필요한가요? 내가 당신의 프로그램이 어떤 문맥을 위해 디자인되고 있는지 정확히 알지 못한다.

+0

데크 아이디어를 주셔서 감사합니다. 나는 최종 코드를 게시하기 위해 다시 올 것이다. 나는이 질문에 답할 수 있다고 생각한다. 모두에게 감사드립니다. – ss814

관련 문제