public GameEngine(IGameFactory factory, IScreenPrinter printer, IHeroPrinter heroPrint, IFightMode fightMode, ICollisionDetector detect, ICommandSelection commandSelection) { this.factory = factory ?? throw new ArgumentNullException(); this.printer = printer ?? throw new ArgumentNullException(); this.heroPrint = heroPrint ?? throw new ArgumentNullException(); this.fightMode = fightMode ?? throw new ArgumentNullException(); this.detect = detect ?? throw new ArgumentNullException(); this.commandSelection = commandSelection ?? throw new ArgumentNullException(); this.Factory.HeroFactory(); this.printer.Logger.SetSize(); }
public void Fight(IHero hero, IEnemy enemy, IConsoleLogger logger, IHeroPrinter heroPrint) { hero.FightMonster += new EventHandler(OnFightedMonster); hero.OnFightMonster(); var message = "You engage a " + enemy.GetType().Name + "!!!"; var heroType = hero.GetType().Name; if (heroType == "Hunter") { heroPrint.PrintHunterFightMesssage(hero, enemy, logger); } else if (heroType == "Warrior") { heroPrint.PrintWarriorFightMesssage(hero, enemy, logger); } else if (heroType == "Mage") { heroPrint.PrintMageFightMesssage(hero, enemy, logger); } }
public void ReadCommands(IHero hero, IMap map, IGameFactory factory, IConsoleLogger logger, IHeroPrinter heroprint, IFightMode mode, ICollisionDetector detect, IHeroCoordinates coord) { bool happyend = false; string currentLine = ""; string message = GlobalMessages.JourneyMessage; IEnemy enemy; while (hero.Hp > 0 && !happyend) { logger.Clear(); Console.BackgroundColor = (ConsoleColor)hero.HeroColor; logger.Write(message); Console.ResetColor(); logger.Write(hero.ToString()); logger.Write(coord.ToString()); logger.Write(GlobalMessages.ChooseMessage); logger.Write(" 1 = " + detect.GuideMessage(detect.CheckCollisions(hero.PositionX, hero.PositionY - 1, map))); logger.Write(" 2 = " + detect.GuideMessage(detect.CheckCollisions(hero.PositionX, hero.PositionY + 1, map))); logger.Write(" 3 = " + detect.GuideMessage(detect.CheckCollisions(hero.PositionX - 1, hero.PositionY, map))); logger.Write(" 4 = " + detect.GuideMessage(detect.CheckCollisions(hero.PositionX + 1, hero.PositionY, map))); logger.Write(GlobalMessages.EnterMessage); currentLine = logger.Read(); switch (currentLine) { case "1": if (detect.CheckCollisions(hero.PositionX, hero.PositionY - 1, map) == 'x') { message = GlobalMessages.EscapeMessage; break; } else if (detect.CheckCollisions(hero.PositionX, hero.PositionY - 1, map) == '@') { message = GlobalMessages.ClimbRockMessage; hero.Hp -= 1; } else if (detect.CheckCollisions(hero.PositionX, hero.PositionY - 1, map) == '1') { enemy = factory.CreateMonster(); mode.Fight(hero, enemy, logger, heroprint); message = GlobalMessages.DeadMonsterMessage; hero.Move(1); map.FirstMap[hero.PositionX, hero.PositionY] = '-'; } else if (detect.CheckCollisions(hero.PositionX, hero.PositionY - 1, map) == '2') { enemy = factory.CreateBossMonster(); mode.Fight(hero, enemy, logger, heroprint); message = GlobalMessages.DeadMonsterMessage; hero.Move(1); map.FirstMap[hero.PositionX, hero.PositionY] = '-'; } else { hero.Move(1); message = GlobalMessages.LeftMessage; } break; case "2": if (detect.CheckCollisions(hero.PositionX, hero.PositionY + 1, map) == 'x') { message = GlobalMessages.EscapeMessage; break; } else if (detect.CheckCollisions(hero.PositionX, hero.PositionY + 1, map) == '@') { message = GlobalMessages.ClimbRockMessage; hero.Hp -= 1; } else if (detect.CheckCollisions(hero.PositionX, hero.PositionY + 1, map) == '1') { enemy = factory.CreateMonster(); mode.Fight(hero, enemy, logger, heroprint); message = GlobalMessages.DeadMonsterMessage; hero.Move(2); map.FirstMap[hero.PositionX, hero.PositionY] = '-'; } else if (detect.CheckCollisions(hero.PositionX, hero.PositionY + 1, map) == '2') { enemy = factory.CreateBossMonster(); mode.Fight(hero, enemy, logger, heroprint); message = GlobalMessages.DeadMonsterMessage; hero.Move(2); map.FirstMap[hero.PositionX, hero.PositionY] = '-'; } else { hero.Move(2); message = GlobalMessages.RightMessage; } break; case "3": if (detect.CheckCollisions(hero.PositionX - 1, hero.PositionY, map) == 'x') { message = GlobalMessages.EscapeMessage; break; } else if (detect.CheckCollisions(hero.PositionX - 1, hero.PositionY, map) == '@') { message = GlobalMessages.ClimbRockMessage; hero.Hp -= 1; } else if (detect.CheckCollisions(hero.PositionX - 1, hero.PositionY, map) == '1') { enemy = factory.CreateMonster(); mode.Fight(hero, enemy, logger, heroprint); message = GlobalMessages.DeadMonsterMessage; hero.Move(3); map.FirstMap[hero.PositionX, hero.PositionY] = '-'; } else if (detect.CheckCollisions(hero.PositionX - 1, hero.PositionY, map) == '2') { enemy = factory.CreateBossMonster(); mode.Fight(hero, enemy, logger, heroprint); message = GlobalMessages.DeadMonsterMessage; hero.Move(3); map.FirstMap[hero.PositionX, hero.PositionY] = '-'; } else { hero.Move(3); message = GlobalMessages.UpMessage; } break; case "4": if (detect.CheckCollisions(hero.PositionX + 1, hero.PositionY, map) == 'x') { message = GlobalMessages.EscapeMessage; happyend = true; break; } else if (detect.CheckCollisions(hero.PositionX + 1, hero.PositionY, map) == '@') { message = GlobalMessages.ClimbRockMessage; hero.Hp -= 1; } else if (detect.CheckCollisions(hero.PositionX + 1, hero.PositionY, map) == '1') { enemy = factory.CreateMonster(); mode.Fight(hero, enemy, logger, heroprint); message = GlobalMessages.DeadMonsterMessage; hero.Move(4); map.FirstMap[hero.PositionX, hero.PositionY] = '-'; } else if (detect.CheckCollisions(hero.PositionX + 1, hero.PositionY, map) == '2') { enemy = factory.CreateBossMonster(); mode.Fight(hero, enemy, logger, heroprint); message = GlobalMessages.DeadMonsterMessage; hero.Move(4); map.FirstMap[hero.PositionX, hero.PositionY] = '-'; } else { hero.Move(4); message = GlobalMessages.DownMessage; } break; default: message = GlobalMessages.WrongInputMessage; break; } } logger.Clear(); if (happyend) { logger.Write(GlobalMessages.EscapeMessage); System.Threading.Thread.Sleep(1000); logger.Write(GlobalMessages.EscapeMessageFun); } else { logger.Write(GlobalMessages.DeadGameMessage); System.Threading.Thread.Sleep(1000); logger.Write(GlobalMessages.DeadGameMessageFun); } logger.Write(GlobalMessages.GameOverMessage); }