public void RoundEngine_RoundNextTurn_No_Characters_Should_Return_GameOver() { Engine.MonsterList.Clear(); // Arrange var Character = new CharacterModel { Speed = 20, Level = 1, CurrentHealth = 1, ExperienceTotal = 1, Name = "Characer", ListOrder = 1, }; // Add each model here to warm up and load it. Game.Helpers.DataSetsHelper.WarmUp(); Engine.CharacterList.Clear(); Engine.MonsterList.Add(new PlayerInfoModel(Character)); // Make the List Engine.PlayerList = Engine.MakePlayerList(); // Act var result = Engine.RoundNextTurn(); // Reset // Assert Assert.AreEqual(RoundEnum.GameOver, result); }
public void BattleEngine_GameOver_Round_1_Should_Pass() { /* * Test to have character lose battle in first round * * 1 Character * 1 HP * * 1 Monster * * Monster continually attacks Character until it dies * Game state should be game over * */ //Arrange // Add Characters Engine.MaxNumberCharacters = 1; // To See Level UP happening, a character needs to be close to the next level var Character = new CharacterModel { Level = 20, CurrentHealth = 1, MaxHealth = 0 }; Engine.CharacterList.Add(Character); Engine.MaxNumberMonsters = 1; Engine.StartBattle(false); var Monster = Engine.EntityList.Where(a => a.EntityType == EntityTypeEnum.Monster).FirstOrDefault(); var Player = Engine.EntityList.Where(a => a.Id == Character.Id).FirstOrDefault(); //Act while (Player.Alive) { Engine.TurnAsAttack(Monster, Player); } var result = Engine.RoundNextTurn(); //Reset Engine.MonsterList.Clear(); Engine.CharacterList.Clear(); Engine.EntityList.Clear(); Engine.MaxNumberMonsters = 6; //Assert Assert.AreEqual(RoundEnum.GameOver, result); }
public void RoundEngine_RoundNextTurn_No_Characters_Should_Return_GameOver() { // Arrange var Character = new CharacterModel { Speed = 20, Level = 1, CurrentHealth = 1, TotalExperience = 1, Name = "Character" }; var Monster = new MonsterModel { Speed = 20, Level = 1, CurrentHealth = 1, ExperienceGiven = 1, Name = "Monster", }; // Add each model here to warm up and load it. Game.Helpers.DataSetsHelper.WarmUp(); Engine.CharacterList.Clear(); // Don't add character to battle //Engine.CharacterList.Add(Character); Engine.MonsterList.Clear(); Engine.MonsterList.Add(Monster); // Make the List Engine.EntityList = Engine.MakeEntityList(); // Act var result = Engine.RoundNextTurn(); // Reset // Assert Assert.AreEqual(RoundEnum.GameOver, result); }
private bool _needsRefresh; // boolean for whether data is stale or not // Constructor: loads data and listens for broadcast from views public BattleViewModel() { Title = "Battle Begin"; // Initialize battle engine BattleEngine = new BattleEngine(); // Create observable collections SelectedCharacters = new ObservableCollection <Character>(); AvailableCharacters = new ObservableCollection <Character>(); SelectedMonsters = new ObservableCollection <Monster>(); availItems = new ObservableCollection <Item>(); // Load data command LoadDataCommand = new Command(async() => await ExecuteLoadDataCommand()); // Load the data ExecuteLoadDataCommand().GetAwaiter().GetResult(); // For adding Characters to party MessagingCenter.Subscribe <CharactersSelectPage, IList <Character> >(this, "AddData", (obj, data) => { SelectedCharacters.Clear(); BattleEngine.CharacterList = data.ToList <Character>(); foreach (var c in data) { SelectedCharacters.Add(c); } }); //Messages for adding a character to party MessagingCenter.Subscribe <CharactersSelectPage, Character>(this, "AddSelectedCharacter", async(obj, data) => { SelectedListAdd(data); }); // Messages for removing a character from the party MessagingCenter.Subscribe <CharactersSelectPage, Character>(this, "RemoveSelectedCharacter", async(obj, data) => { SelectedListRemove(data); }); //Messages to start new round MessagingCenter.Subscribe <BattleEngine, RoundEnum>(this, "NewRound", async(obj, data) => { BattleEngine.NewRound(); }); //Messages for round next turn MessagingCenter.Subscribe <BattlePage, RoundEnum>(this, "RoundNextTurn", async(obj, data) => { ExecuteLoadDataCommand().GetAwaiter().GetResult(); BattleEngine.RoundNextTurn(); }); // Messages to end battle MessagingCenter.Subscribe <BattlePage, RoundEnum>(this, "EndBattle", async(obj, data) => { BattleEngine.EndBattle(); }); }
// If UI is enabled, there will be popups that guide you through battle as you click the next turn button // If not, it will drop you straight to the result page public async void BattleEngineStart_Command(object sender, EventArgs e) { #if !EnableUI do { // If the round is over start a new one... if (RoundResult == RoundEnum.NewRound) { myBattleEngine.NewRound(); } PlayerInfo currentPlayer = myBattleEngine.GetNextPlayerInList(); // Check if character or monster if (currentPlayer.PlayerType == PlayerTypeEnum.Character) { string id = null; RoundResult = myBattleEngine.RoundNextTurn(id); } // else monster turn else { RoundResult = myBattleEngine.RoundNextTurn(); } Debug.WriteLine(myBattleEngine.TurnMessage); } while (RoundResult != RoundEnum.GameOver); #endif #if EnableUI if (RoundResult != RoundEnum.GameOver) { // If the round is over start a new one... if (RoundResult == RoundEnum.NewRound) { myBattleEngine.NewRound(); var answer = await DisplayAlert("New Round", "Begin", "Start", "Cancel"); if (answer) { await Navigation.PushAsync(new ManualBattlePage(myBattleEngine, RoundResult)); return; } } PlayerInfo currentPlayer = myBattleEngine.GetNextPlayerInList(); // Check if character or monster if (currentPlayer.PlayerType == PlayerTypeEnum.Character) { string id = null; var dataset = myBattleEngine.MonsterList.Where(a => a.Alive).ToList(); string[] names = new string[dataset.Count]; string[] IDs = new string[dataset.Count]; int ctr = 0; foreach (var data in dataset) { names[ctr] = data.Name; IDs[ctr] = data.Guid; ctr++; } var action = await DisplayActionSheet("Select Monster", null, null, names); ctr = 0; foreach (var data in dataset) { if (action == data.Name) { id = IDs[ctr]; break; } ctr++; } RoundResult = myBattleEngine.RoundNextTurn(id); } // else monster turn else { RoundResult = myBattleEngine.RoundNextTurn(); } var response = await DisplayAlert("Turn Result", myBattleEngine.TurnMessage, "Continue", "Quit"); if (!response) { await Navigation.PushAsync(new OpeningPage()); } } #endif if (RoundResult == RoundEnum.GameOver) { myBattleEngine.EndBattle(); string result = "Battle Ended" + " Total Experience :" + myBattleEngine.BattleScore.ExperienceGainedTotal + " Rounds :" + myBattleEngine.BattleScore.RoundCount + " Turns :" + myBattleEngine.BattleScore.TurnCount + " Monster Kills :" + myBattleEngine.BattleScore.MonstersKilledList; var answer = await DisplayAlert("Game Result", result, "Set Name", "Restart"); if (answer) { // Link to enter name await Navigation.PushAsync(new EditScorePage(new ScoreDetailViewModel(myBattleEngine.BattleScore))); } else { await Navigation.PushAsync(new OpeningPage()); } } }
/// <summary> /// Call to the engine for the NextRound to Happen /// </summary> public void RoundNextTurn() { BattleEngine.RoundNextTurn(); }