void dump_dungeon(dungeon* d) { room* r; int h, w; printf("Dungeon<%p> {\n", d); for (h=0; h<d->height; ++h) { for(w=0; w<d->width; ++w) { r = &(d->rooms[(h*d->width)+w]); printf(" | %c%c%c%c", (r->n)?'N':'.', (r->s)?'S':'.', (r->e)?'E':'.', (r->w)?'W':'.'); } printf(" |\n"); } printf( "\n" "\tLocation: %d\n" "\tWidth: %d\n" "\tHeight: %d\n" "\tDiff: %d\n" "\tSpawn: %d\n" "\tEnd: %d\n" "}\n", d->location, d->width, d->height, d->difficulty, d->spawn_room, d->end_room ); dump_npc(&(d->player)); dump_room(*(d->cur_room)); }
void merge() { dump_room(); int i; for(i = 1; i <= num_room; ++i) { struct room_node* target = room_graph[i].begin; int my_size = room_size[i]; while(target != NULL) { int target_merge = room_size[target->id] + my_size; if(target_merge > max_merge) { printf("Merge: %d %d\n", i, target->id); max_merge = target_merge; memcpy(&merge_room, target, sizeof(struct room_node)); } else if(target_merge == max_merge) { if(room_is_greater(target, &merge_room)) { memcpy(&merge_room, target, sizeof(struct room_node)); } } target = target->next; } } }