/// <summary> /// Goes to the next level after reaching the exit /// </summary> /// <param name="level">Gets level number</param> /// <param name="print">Gets Renderer class to print</param> private void LevelUp(Level level, Renderer print) { //Adds 1 to the level number level.LevelNum++; //Prints a message to the screen once player exits. print.GetGameActions(); //Redraws the game's map and Sets new positions for // the player and exit save.GetSave(level.LevelNum, "continue"); CreateMap(); // Prints "loading" bar level.CreateLevel(map); for (int i = 0; i < 58; i++) { Thread.Sleep(25); print.Dot(); } }
/// <summary> /// Executes the main gameloop /// </summary> internal void RunGame() { // Instances / Variables // Level level = new Level(); Renderer print = new Renderer(); Input input = new Input(); map = new Map[rows, columns]; HighScoreManager highScore = new HighScoreManager(); string playerInput = ""; string turn = ""; bool firstTurnCheck = true; bool levelUp = false; gameOver = false; //////////////////////////////////////////////////////////////////// // MAIN MENU /////////////////////////////////////////////////////// // Runs Menu Loop until user inputs 1 or 5 if (!LoadedGame) { do { //Prints the Title Card print.Introduction(); //Prints a blank line print.BlankLine(); // Prints Initial Menu print.PrintMenu(); // Gets user Input playerInput = input.MenuOptions(); if (playerInput == "1") { break; } //Breaks the loop and quits the game if (playerInput == "5") { break; } } while (true); } else { print.WelcomeBack(); } //////////////////////////////////////////////////////////////////// // NEW GAME //////////////////////////////////////////////////////// // Run Game after player inputs 1 if (playerInput == "1" || LoadedGame == true) { // if (LoadedGame) //Creates all squares and pieces of the game CreateMap(); // Generates the map and its elements level.CreateLevel(map); // MAIN GAME LOOP ////////////////////////////////////////////// while (gameOver == false) { // ON LEVEL UP ///////////////////////////////////////////// if (levelUp) { print.BlankLine(); // Creates new level elements LevelUp(level, print); print.PrintGameActions(); levelUp = false; firstTurnCheck = true; } else { print.PrintGameActions(); } // LEVEL GAME LOOP ///////////////////////////////////////// while (levelUp == false && level.player.IsAlive) { // If player has no moves left, it's gameover if (NoRemainingMoves(level.player)) { print.NoMoves(); level.player.Die(); } // Resets player's Movement per turn level.player.MovementReset(); // Player's turn until he moves twice or dies/////////// while (level.player.Movement > 0 && level.player.IsAlive) { //Used to print Player in the game's screen turn = "Player"; //Prints all the game's information in the screen print.Map(map, level.PowerUps, level.Enemies, level.player, turn, level.LevelNum, firstTurnCheck); // Ends threading on render firstTurnCheck = false; //Asks the user for input to move the player input.GetPosition(level, map, print); //Checks if the player's in a square with a Power-Up //and picks it up, printing a message on screen. foreach (PowerUp powerUp in level.PowerUps) { if (PowerUpPosition(level.player, powerUp)) { if (!powerUp.Picked) { level.player.PickPowerUp(map, powerUp); print.GetGameActions(powerUp); } } } if (level.player.Walked) { level.player.MovementDamage(); } // Checks if the player has reached the exit if (map[level.player.Row, level.player.Column]. IsExit) { map[level.player.Row, level.player.Column]. Free("exit"); if (level.player.IsAlive) { levelUp = true; break; } } else { //Prints list of the game's actions print.PrintGameActions(); } } // Enemy Turn ////////////////////////////////////////// //Checks if the player is alive and hasn't //finished the level if (level.player.IsAlive && levelUp == false) { // Prints the map, moves enemy, prints the map foreach (Enemy enemy in level.Enemies) { // level.SetEnemyMoveNum(); //Used to print Enemy in the game's screen turn = "Enemy"; // Prints all the game's information print.Map(map, level.PowerUps, level.Enemies, level.player, turn, level.LevelNum, firstTurnCheck); // Checks if the player is in a square with a //Power-Up and blocks the square if (map[enemy.Row, enemy.Column].IsPowerUp) { map[enemy.Row, enemy.Column]. Free("enemy_power_up"); } else { // If the enemy moves to an empty position map[enemy.Row, enemy.Column].Free("enemy"); } //Delays the game for the Enemys movement Thread.Sleep(500); // Moves the enemy, occupies the position // and prints and prints it enemy.Move(level.player, 1, map); map[enemy.Row, enemy.Column].Occupy("enemy"); print.Map(map, level.PowerUps, level.Enemies, level.player, turn, level.LevelNum, firstTurnCheck); } // Player gets damage if the he's 1 square distance foreach (Enemy enemy in level.Enemies) { if (DamagePosition(level.player, enemy)) { level.player.TakeDamage(enemy); print.GetGameActions(enemy); } } // Prints actions list print.PrintGameActions(); } } // Checks if the player is dead and closes the game loop if (!level.player.IsAlive) { //Prints the last round information print.Map(map, level.PowerUps, level.Enemies, level.player, turn, level.LevelNum, firstTurnCheck); //Prints a goodbye message if (level.player.HasLeft == false) { print.GoodBye(); } else { print.LeftBye(); } // Saves score if (!(ForceExit)) { highScore.SaveScore(level.LevelNum); } Quit(); } } } }