// This method calls other methods to load the stage. public void LoadStage() { NAudio.PlayFile(Area.maps[player.Stage][player.StageDepth].Music); scene.EraseLayers(); scene.ConsoleWriteImage(); scene.DisplayBackground(); scene.DisplayObjectsScene(); player.PrintObject(scene); player.PlayerDisplayed = false; scene.DisplayPlayerInfo(); scene.DisplayHealthBar(); }
// Prints and redraws the player to the screen. public void UpdatePlayerDisplay() { player.PrintObject(scene); scene.DisplayArea(player.Location[0] - 1, player.Location[1] + 3, player.Height, player.Width); if (!player.battleInit) { if (Area.maps[player.Stage][player.StageDepth].Boss != null) { Area.maps[player.Stage][player.StageDepth].Boss.PrintObject(scene); opponent = Area.maps[player.Stage][player.StageDepth].Boss; if (opponent.Music != null) { NAudio.PlayFile(opponent.Music); } player.battleInit = true; player.BattleMapXYZ[0] = player.Stage; player.BattleMapXYZ[1] = player.Location[1]; player.BattleMapXYZ[2] = player.Location[0]; player.BattleMapXYZ[3] = player.StageDepth; scene.DisplayObjectSceneLayer(player, ConsoleView.bkgLayer, false); scene.DisplayObjectSceneLayer(opponent, opponent.Layer); player.Location[1] = 10; player.Location[0] = floor; player.Animation = 0; UpdatePlayerDisplay(); scene.DisplayText("Battle Text", opponent.Name + " has beckoned you!", 36, 0, 8, 192, 8, 5); if (opponent.Music != null) { NAudio.PlayFile(opponent.Music); } else { NAudio.PlayFile(@"\TBQuestMusic\Standard Battle\encounter.mp3"); } scene.DisplayPlayerInfo(1, 0); scene.DisplayEnemyInfo(opponent.Level, opponent.Name); } if (Area.maps[player.Stage][player.StageDepth].Spawns.Count > 0) { int chance = 0; foreach (var mobSpawn in Area.maps[player.Stage][player.StageDepth].Spawns) { chance += mobSpawn._chance; } int i = 0; Random rng = new Random(); int rand = rng.Next(0, chance); while ((rand -= Area.maps[player.Stage][player.StageDepth].Spawns[i]._chance) >= 0) { i++; } if (Area.maps[player.Stage][player.StageDepth].Spawns[i]._mob != null) { Area.maps[player.Stage][player.StageDepth].Spawns[i]._mob.PrintObject(scene); opponent = new Enemy(Area.maps[player.Stage][player.StageDepth].Spawns[i]._mob); player.battleInit = true; player.BattleMapXYZ[0] = player.Stage; player.BattleMapXYZ[1] = player.Location[1]; player.BattleMapXYZ[2] = player.Location[0]; player.BattleMapXYZ[3] = player.StageDepth; scene.DisplayObjectSceneLayer(player, ConsoleView.bkgLayer, false); scene.DisplayObjectSceneLayer(opponent, opponent.Layer); player.Location[1] = 10; player.Location[0] = floor; player.Animation = 0; UpdatePlayerDisplay(); scene.DisplayText("Battle Text", "You've encountered " + opponent.Name + "!", 36, 0, 8, 192, 8, 5); NAudio.PlayFile(@"\TBQuestMusic\Standard Battle\encounter.mp3"); scene.DisplayPlayerInfo(1, 0); scene.DisplayEnemyInfo(opponent.Level, opponent.Name); } } } }
void ProgramLoop() { int count = 0; while (!Keyboard.IsKeyDown(Key.Escape) && gameLoop) { count++; scene.ClearInputBuffer(); Thread.Sleep(player.Speed); if (player.Health <= 0) { NAudio.PlayFile(@"\TBQuestMusic\Standard Battle\Sad Trio.mp3"); scene.GameOver(); break; } if (player.InventoryInit) { ManagePlayerInventory(); continue; } if (player.battleInit) { Random rng = new Random(); scene.DisplayHealthBar(1, 1); scene.DisplayEnemyHealthBar(opponent.Health, opponent.MaxHealth, scene._scene.GetLength(0) - (int)opponent.MaxHealth - 20); scene.DisplayObjectSceneLayer(opponent, opponent.Layer); if (player.Turn) { int input = scene.DisplayMenu(2, 50, 20, 50, 8, 5, "Attack Menu", "Attack", "Defend", "Items", "Run"); switch (input) { case 0: player.Damage = rng.Next(rng.Next(player.Attack), player.Attack) + 10; scene.DisplayText("Battle Text", "You attack " + opponent.Name + " for " + player.Damage + " damage!", 36, 0, 8, 192, 8, 5); opponent.Damage = rng.Next(rng.Next(opponent.Attack), opponent.Attack); opponent.Health -= player.Damage; break; case 1: scene.DisplayText("Battle Text", "You defend!", 36, 0, 8, 192, 8, 5); opponent.Damage = rng.Next(rng.Next(opponent.Attack), opponent.Attack) / 2; break; case 2: player.InventoryInit = true; opponent.Damage = rng.Next(rng.Next(opponent.Attack), opponent.Attack); scene.DisplayInventory(2, 27, 20, 50, 8, 5, "Inventory"); break; case 3: player.battleInit = false; NAudio.PlayFile(@"\TBQuestMusic\Standard Battle\Run Away.mp3"); scene.DisplayText("Battle Text", "You got away!", 36, 0, 8, 192, 8, 5); break; default: break; } if (!player.InventoryInit) { scene.DisplayAreaLayer(2, 50, 20, 50); } player.Turn = false; } else { scene.DisplayText("Battle Text", opponent.Name + " attacked you for " + opponent.Damage + " damage!", 36, 0, 8, 192, 8, 5); player.Health -= opponent.Damage; player.Turn = true; } if (!player.battleInit || opponent.Health <= 0 || player.Health <= 0) { scene.DisplayHealthBar(1, 1); scene.DisplayEnemyHealthBar(opponent.Health, opponent.MaxHealth, scene._scene.GetLength(0) - (int)opponent.MaxHealth - 20); if (opponent.Health <= 0) { player.Experience += opponent.Experience; player.Gold += opponent.Gold; UpdatePlayerLevel(); NAudio.PlayFile(@"\TBQuestMusic\Standard Battle\Champions_Are_Here.mp3"); scene.DisplayText("Battle Text", " Hey you won! You've earned " + opponent.Experience + " experience!", 36, 0, 8, 192, 8, 5); scene.DisplayText("Battle Text", " You've gained " + opponent.Gold + " gold!", 36, 0, 8, 192, 8, 5); if (opponent == Monsters.kingboss) { gameLoop = false; scene.GameWin(); } } if (gameLoop) { player.Turn = true; player.battleInit = false; Area.maps[player.Stage][player.StageDepth].Boss = null; player.Location[1] = player.BattleMapXYZ[1]; player.Location[0] = player.BattleMapXYZ[2]; LoadStage(); } } continue; } if (gameLoop) { KeyControls(); if (count % 100 == 0) { foreach (Object item in Area.maps[player.Stage][player.StageDepth].Objects) { if (item.Sprite.Count > 1) { scene.DisplayAreaLayer(item.Location[0], item.Location[1] + 2, item.Height, item.Width, item.GetObjectFrame()); } } player.PlayerDisplayed = false; } } } NAudio.KillAudio(); }