// Move the player, and return a new level if applicable public LevelTransition MovePlayer(Player player, Constants.DIRECTION dir) { LevelTransition newLevel = null; Tuple <int, int> playerLoc = player.GetCoords(); char entity = Map[playerLoc.Item1, playerLoc.Item2]; int xToCheck = playerLoc.Item1; int yToCheck = playerLoc.Item2; switch (dir) { case Constants.DIRECTION.NORTH: xToCheck--; break; case Constants.DIRECTION.EAST: yToCheck++; break; case Constants.DIRECTION.SOUTH: xToCheck++; break; case Constants.DIRECTION.WEST: yToCheck--; break; } if (Map[xToCheck, yToCheck] == (char)Constants.MAP_CHARS.EMPTY) { Map[xToCheck, yToCheck] = entity; Map[playerLoc.Item1, playerLoc.Item2] = (char)Constants.MAP_CHARS.EMPTY; player.SetCoords(Tuple.Create(xToCheck, yToCheck)); MoveEnemies(player); RunModifiers(player); } else if (Map[xToCheck, yToCheck] == (char)Constants.MAP_CHARS.EXIT) { newLevel = Exits.Where(x => x.ExitLocation.Item1 == xToCheck && x.ExitLocation.Item2 == yToCheck).FirstOrDefault(); ResetCell(player.GetCoords()); } else if (Map[xToCheck, yToCheck] == (char)Constants.MAP_CHARS.ITEMBOX) { ItemBox item = ItemBoxs.Where(x => x.XCoord == xToCheck && x.YCoord == yToCheck).First(); if (item != null) { player.ConsumeItemBox(item); ItemBoxs.Remove(item); Map[playerLoc.Item1, playerLoc.Item2] = (char)Constants.MAP_CHARS.EMPTY; Map[xToCheck, yToCheck] = (char)Constants.MAP_CHARS.CHARACTER; player.SetCoords(Tuple.Create(xToCheck, yToCheck)); MoveEnemies(player); RunModifiers(player); } } return(newLevel); }
// Handle user input and transition to new level if needed public void HandleInput(ConsoleKeyInfo key) { LevelTransition newLevel = null; // Different user actions switch (key.Key) { case ConsoleKey.W: newLevel = CurrentLevel.MovePlayer(Player, Constants.DIRECTION.NORTH); break; case ConsoleKey.A: newLevel = CurrentLevel.MovePlayer(Player, Constants.DIRECTION.WEST); break; case ConsoleKey.S: newLevel = CurrentLevel.MovePlayer(Player, Constants.DIRECTION.SOUTH); break; case ConsoleKey.D: newLevel = CurrentLevel.MovePlayer(Player, Constants.DIRECTION.EAST); break; case ConsoleKey.Spacebar: Player.Attack(CurrentLevel); break; case ConsoleKey.Escape: DisplayMenu(); break; default: break; } if (newLevel != null) { TransitionToLevel(newLevel); } }
static void Main(string[] args) { Game game = new Game(); Weapon rustyScythe = new Weapon(Constants.RustyScytheName, Constants.RustyScytheDesc, Constants.RustyScytheDamage); game.RegisterWeapon(rustyScythe.Name, rustyScythe); Weapon mega = new Weapon(Constants.MegaScytheName, Constants.MegaScytheDesc, Constants.MegaScytheDamage); game.RegisterWeapon(mega.Name, mega); Weapon boxTest = new Weapon(Constants.BoxScytheName, Constants.BoxScytheDesc, Constants.BoxScytheDamage); game.RegisterWeapon(boxTest.Name, boxTest); HealingItem basicPotion = new HealingItem(1, Constants.BasicPotionDesc, false, Constants.BasicPotionName, (Player) => { Player.Heal(Constants.BasicPotionHeal); }); game.RegisterItem(basicPotion.Name, basicPotion); HealingItem weakenedPotion = new HealingItem(6, Constants.WeakenedPotionDesc, false, Constants.WeakenedPotionName, (Player) => { Player.Heal(Constants.WeakenedPotionHeal); }); game.RegisterItem(weakenedPotion.Name, weakenedPotion); HealingItem superPotion = new HealingItem(1, Constants.SuperPotionDesc, false, Constants.SuperPotionName, (Player) => { Player.Heal(Constants.SuperPotionHeal); }); game.RegisterItem(superPotion.Name, superPotion); KeyItem EntrywayDoorKey = new KeyItem(Constants.EntrywayKeyName, Constants.EntrywayKeyDesc); game.RegisterKeyItem(EntrywayDoorKey.Name, EntrywayDoorKey); KeyItem JaildoorKey = new KeyItem(Constants.JaildoorKeyName, Constants.JaildoorKeyDesc); game.RegisterKeyItem(JaildoorKey.Name, JaildoorKey); #region Level1 List <LevelTransition> levelOneExits = new List <LevelTransition>(); levelOneExits.Add(new LevelTransition(Constants.Level1Name, Constants.Level2Name, Tuple.Create(0, 5), Tuple.Create(1, 5), false)); List <Enemy> level1Enemies = new List <Enemy>(); level1Enemies.Add(new Enemy(10, 10, 0, 1, 1)); level1Enemies.Add(new Enemy(10, 10, 0, 1, 9)); List <LevelModifier> level1Mods = new List <LevelModifier>(); LevelModifier level1Mod = new LevelModifier("Clear All Enemies", false, (mod, player, level) => { if (level.Enemies.Where(x => x.Alive).ToList().Count <= 0) { LevelTransition exit = level.Exits.Where(x => x.LevelFrom == Constants.Level1Name).FirstOrDefault(); if (exit != null) { exit.ShouldDisplay = true; level.PlaceExits(); mod.Activated = true; } } }); level1Mods.Add(level1Mod); Level level1 = new Level(Constants.Level1Name, (char[, ])Constants.firstMap.Clone(), levelOneExits, enemies: level1Enemies, mods: level1Mods); game.AddLevel(level1.Name, level1); #endregion #region level2 List <LevelTransition> level2Exits = new List <LevelTransition>(); level2Exits.Add(new LevelTransition(Constants.Level2Name, Constants.Level1Name, Tuple.Create(0, 5), Tuple.Create(1, 5))); level2Exits.Add(new LevelTransition(Constants.Level2Name, Constants.Level3Name, Tuple.Create(10, 1), Tuple.Create(1, 5))); List <Enemy> level2Enemies = new List <Enemy>(); level2Enemies.Add(new Enemy(10, 5, 0, 9, 1)); List <ItemBox> level2Items = new List <ItemBox>(); level2Items.Add(new ItemBox(JaildoorKey, 1, 9)); List <LevelModifier> level2Mods = new List <LevelModifier>(); LevelModifier level2Mod = new LevelModifier("OpenCageDoor", false, (mod, player, level) => { if (player.Inventory.CheckIfKeyItemExists(Constants.JaildoorKeyName)) { level.ResetCell(Tuple.Create(7, 3)); mod.Activated = true; } }); level2Mods.Add(level2Mod); Level level2 = new Level(Constants.Level2Name, (char[, ])Constants.secondMap.Clone(), level2Exits, enemies: level2Enemies, items: level2Items, mods: level2Mods); game.AddLevel(level2.Name, level2); #endregion #region level3 List <LevelTransition> level3Exits = new List <LevelTransition>(); level3Exits.Add(new LevelTransition(Constants.Level3Name, Constants.Level2Name, Tuple.Create(0, 5), Tuple.Create(9, 1))); level3Exits.Add(new LevelTransition(Constants.Level3Name, Constants.Level4Name, Tuple.Create(10, 5), Tuple.Create(1, 5))); List <Enemy> level3Enemies = new List <Enemy>(); Enemy level3Enemy1 = new Enemy(10, 5, 5, 7, 3); level3Enemy1.Reward = new ItemBox(weakenedPotion); level3Enemies.Add(level3Enemy1); Enemy level3Enemy2 = new Enemy(10, 5, 5, 7, 7); level3Enemy2.Reward = new ItemBox(boxTest); level3Enemies.Add(level3Enemy2); Level level3 = new Level(Constants.Level3Name, (char[, ])Constants.thirdMap.Clone(), level3Exits, level3Enemies); game.AddLevel(level3.Name, level3); #endregion #region level4 List <LevelTransition> level4Exits = new List <LevelTransition>(); level4Exits.Add(new LevelTransition(Constants.Level4Name, Constants.Level3Name, Tuple.Create(0, 5), Tuple.Create(9, 5))); List <Enemy> level4Enemies = new List <Enemy>(); Enemy Boss = new Enemy(40, 15, 10, 9, 5); Boss.Reward = new ItemBox(mega); level4Enemies.Add(Boss); Level level4 = new Level(Constants.Level4Name, (char[, ])Constants.fourthMap, level4Exits, level4Enemies); game.AddLevel(level4.Name, level4); #endregion game.TransitionToLevel(new LevelTransition("none", Constants.Level1Name, null, Tuple.Create(9, 5))); game.Play(); }
// Move from one level to another public void TransitionToLevel(LevelTransition level) { CurrentLevel = Levels[level.LevelTo]; CurrentLevel.PlacePlayer(level.NewLocation, Player); }