int main(int argc, char* argv[]) { char* fileName; int errLevel; gridCell_t** dungeonGrid; room_t* rooms; int roomCount; // parse arguments int save = 0; int load = 0; for (int i = 0; i < argc; i++) { if (strcmp(argv[1], "--save") == 0) { save = 1; } else if (strcmp(argv[1], "--load") == 0) { load = 1; } else { showUsage(argv[0]); return 0; } } // load or generate dungeon if (load) { fileName = dungeonFileName(); errLevel = loadDungeon(&dungeonGrid, &roomCount, &rooms, fileName); free(fileName); if (errLevel) { printf("Failed to load the dungeon. Read error %d\n", errLevel); return -1; } populateRooms(dungeonGrid, rooms, roomCount); } else { roomCount = generateDungeon(&dungeonGrid, &rooms); if (roomCount < 0) { printf("Failed to allocate memory for the dungeon grid.\n"); return roomCount; } } // print dungeon printRooms(roomCount, rooms); printGrid(dungeonGrid); // save dungeon if (save) { fileName = dungeonFileName(); errLevel = saveDungeon(dungeonGrid, roomCount, rooms, fileName); free(fileName); if (errLevel) { printf("Failed to save the dungeon. Save error %d\n", errLevel); return -1; } } // Clean up free2DGrid(dungeonGrid, HEIGHT); free(rooms); return 0; }
void Game::checkHP() { if (player->getHp() <= 0) { playing = false; player->setHP(player->getMaxHP()); Utils::LoadPlayer(name, player); generateDungeon(size, difficulty); dungeon->loadLevel(1); player->setCurrentRoom(dungeon->getFirstRoom()); dungeon->getFirstRoom()->Visited(); playing = true; startGame(); } }
Game::Game() { Utils::PrintLine("This story is all about you. What was your name again?"); name = Utils::ReadString(); player = new Player(name); Utils::LoadPlayer(name, player); playing = true; Utils::PrintLine("What kind of dungeon do you want? small(4-6), medium(8-10) or large(12-14)? Info: Typo's or nothing will make a medium dungeon"); size = Utils::ReadString(); Utils::PrintLine("What difficulty do you want? normal, hard or insane"); difficulty = Utils::ReadString(); generateDungeon(size, difficulty); dungeon->loadLevel(1); player->setCurrentRoom(dungeon->getFirstRoom()); dungeon->getFirstRoom()->Visited(); startGame(); }
int main(int argc, char* argv[]) { int errLevel; dungeon_t dungeon; int numMonSpecified = 0; //init random unsigned int seed; seed = (unsigned int)time(NULL); //1453848819; srand(seed); printf("Seed: %d\n", seed); // parse arguments int save = 0; int load = 0; for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "--save") == 0) { save = 1; } else if (strcmp(argv[i], "--load") == 0) { load = 1; } else if (strcmp(argv[i], "--nummon") == 0) { if (i + 1 >= argc) { showUsage(argv[0]); return 0; } dungeon.monsterCount = atoi(argv[++i]); numMonSpecified = 1; } else { showUsage(argv[0]); return 0; } } if (!numMonSpecified) { dungeon.monsterCount = rand() % (42 / 2); } // load or generate dungeon if (load) { errLevel = loadDungeon(&dungeon, dungeonFileName()); if (errLevel) { printf("Failed to load the dungeon. Read error %d\n", errLevel); return -1; } populateRooms(dungeon); } else { errLevel = generateDungeon(&dungeon); if (errLevel) { printf("Failed to allocate memory for the dungeon grid.\n"); return errLevel; } } pathMallocDistGrid(&dungeon.tunnelingDist); pathMallocDistGrid(&dungeon.nontunnelingDist); // save dungeon if (save) { errLevel = saveDungeon(dungeon, dungeonFileName()); if (errLevel) { printf("Failed to save the dungeon. Save error %d\n", errLevel); return -1; } } // make calculations pathTunneling(&dungeon); pathNontunneling(&dungeon); // print dungeon initTerminal(); printDungeon(&dungeon); // do move PC_action userAction = actionMovement; while (dungeon.PC.alive && dungeon.monsterCount > 1 && userAction != actionSave) { int PCTurn = turnIsPC(&dungeon); if (PCTurn) { printDungeon(&dungeon); userAction = turnDoPC(&dungeon); switch (userAction) { case actionStairsUp: case actionStairsDn: // Destroy old dungeon pathFreeDistGrid(dungeon.nontunnelingDist); pathFreeDistGrid(dungeon.tunnelingDist); destroyDungeon(dungeon); dungeon.monsterCount--; // PC was counted as a "monster". He must be removed for reinitialisation. // Build new dungeon errLevel = generateDungeon(&dungeon); if (errLevel) { endwin(); printf("Failed to allocate memory for the dungeon grid.\n"); return errLevel; } pathMallocDistGrid(&dungeon.tunnelingDist); pathMallocDistGrid(&dungeon.nontunnelingDist); pathTunneling(&dungeon); pathNontunneling(&dungeon); break; case actionListMonsters: monsterList(&dungeon); break; default: break; } } else { turnDo(&dungeon); } } screenClearRow(0); if (userAction == actionSave) { mvprintw(0, 0, "Game saved (haha, not really!). Press any key to exit."); } else if (!dungeon.PC.alive) { mvprintw(0, 0, "You died! Press any key to exit."); } else { mvprintw(0, 0, "Yay! You defeated all the monsters. Press any key to exit."); } // Clean up getch(); // "press any key" endwin(); pathFreeDistGrid(dungeon.nontunnelingDist); pathFreeDistGrid(dungeon.tunnelingDist); destroyDungeon(dungeon); return 0; }