public override void Show() { short oldX, oldY, oldXMap, oldYMap; DateTime timeStampFromLastShot = DateTime.Now; DateTime timeStampFromLastScoreIncrement = DateTime.Now; DateTime timeStampFromLastDamage = DateTime.Now; map.BackGround.MoveTo(0, 0); audio.PlayMusic(0, -1); gameOver = false; isFalling = false; isJumping = true; verticalSpeed = 100.0f; horizontalSpeed = 0.0f; movement_increment = 1.2f + mainCharacter.STEP_LENGHT; do { if ((DateTime.Now - timeStampFromLastScoreIncrement).TotalMilliseconds > 1000) { timeStampFromLastScoreIncrement = DateTime.Now; UpdatePoints(); } //1.-Draw_EveryThing //TO DO hardware.ClearScreen(); hardware.DrawImageMap(map.BackGround, map.XMap, map.YMap); foreach (Wall wall in map.Walls) { hardware.DrawImageMap(wall.SpriteImage, map.XMap, map.YMap); } foreach (Platform platform in map.Platforms) { hardware.DrawImageMap(platform.SpriteImage, map.XMap, map.YMap); } foreach (DangerousFloor spikes in map.DangerousFloors) { hardware.DrawImageMap(spikes.SpriteImage, map.XMap, map.YMap); } foreach (Ladder ladder in map.Ladders) { hardware.DrawImageMap(ladder.SpriteImage, map.XMap, map.YMap); } foreach (Enemy enemy in map.Enemy) { enemy.SpriteImage.MoveTo(enemy.X, enemy.Y); hardware.DrawImageMap(enemy.SpriteImage, map.XMap, map.YMap); } mainCharacter.SpriteImage.MoveTo(mainCharacter.X, mainCharacter.Y); hardware.DrawImageMap(mainCharacter.SpriteImage, map.XMap, map.YMap); foreach (Weapon w in mainCharacter.Weapons) { hardware.DrawImageMap(w.SpriteImage, map.XMap, map.YMap); } foreach (Enemy Enemy in Enemies) { Enemy.SpriteImage.MoveTo(Enemy.X, Enemy.Y); hardware.DrawImageMap(Enemy.SpriteImage, map.XMap, map.YMap); } hardware.UpdateScreen(); //2.-Move_Character_from_keyboard_input oldX = mainCharacter.X; oldY = mainCharacter.Y; oldXMap = map.XMap; oldYMap = map.YMap; MoveCharacter(); if (hardware.IsKeyPressed(Hardware.KEY_C) || Hardware.JoystickPressed(2)) { if ((DateTime.Now - timeStampFromLastShot).TotalMilliseconds > SHOT_INTERVAL) { timeStampFromLastShot = DateTime.Now; mainCharacter.AddWeapon(); } if (mainCharacter.Weapons.Count > 7) { mainCharacter.RemoveWeapon(0); } } //TO DO //3.-Move_Enemies_And_Objects MoveEnemy(ref timeStampFromLastDamage); MoveWeapon(); //TO DO //4-.Check_Colisions_AndUpdateGameState isFalling = !isJumping; map.CollideWeaponsWithWalls(mainCharacter); short points = map.CollideWeaponsWithEnemies(mainCharacter); if (points > 0) { mainCharacter.Points += points; } foreach (Platform platforms in map.Platforms) { if (mainCharacter.IsOver(platforms.SpriteImage)) { mainCharacter.MoveTo(mainCharacter.X, (short) (platforms.SpriteImage.Y - mainCharacter.SPRITE_HEIGHT)); isFalling = false; isJumping = false; } } foreach (Wall walls in map.Walls) { if (mainCharacter.IsOver(walls.SpriteImage)) { mainCharacter.MoveTo(mainCharacter.X, (short) (walls.SpriteImage.Y - mainCharacter.SPRITE_HEIGHT)); isFalling = false; isJumping = false; } else if (mainCharacter.CollidesWithImage(walls.SpriteImage)) { mainCharacter.X = oldX; mainCharacter.Y = oldY; map.XMap = oldXMap; map.YMap = oldYMap; mainCharacter.MoveTo(mainCharacter.X, mainCharacter.Y); isFalling = false; isJumping = false; } } foreach (DangerousFloor spikes in map.DangerousFloors) { if (mainCharacter.CollidesWithImage(spikes.SpriteImage)) { mainCharacter.Lives = 0; } } foreach (Ladder ladder in map.Ladders) { if (mainCharacter.CollidesWithImage(ladder.SpriteImage) && hardware.IsKeyPressed(Hardware.KEY_UP)) { mainCharacter.Y -= 2; isFalling = false; } } foreach (Enemy Enemy in Enemies) { oldX = Enemy.X; oldY = Enemy.Y; foreach (Platform platforms in map.Platforms) { if (Enemy.IsOver(platforms.SpriteImage)) { Enemy.MoveTo(Enemy.X, (short) (platforms.SpriteImage.Y - Enemy.SPRITE_HEIGHT)); isFalling = false; isJumping = false; } } if (Enemy.Y >= floorPosition - mainCharacter.SPRITE_HEIGHT) { Enemy.MoveTo(Enemy.X, (short) (floorPosition - Enemy.SPRITE_HEIGHT)); isFalling = false; isJumping = false; } foreach (Wall walls in map.Walls) { if (Enemy.IsOver(walls.SpriteImage)) { Enemy.MoveTo(Enemy.X, (short) (walls.SpriteImage.Y - Enemy.SPRITE_HEIGHT)); } else if (Enemy.CollidesWithImage(walls.SpriteImage)) { Enemy.X = oldX; Enemy.Y = oldY; map.XMap = oldXMap; map.YMap = oldYMap; Enemy.MoveTo(Enemy.X, Enemy.Y); } } } if (mainCharacter.CollidesWith(map.Exit)) { gameOver = true; } //5.-Puse_Game //TO DO if (hardware.IsKeyPressed(Hardware.KEY_ESC) || keyPressed == Hardware.KEY_ESC) { gameOver = true; } if (mainCharacter.Lives <= 0) { gameOver = true; } } while (!gameOver); audio.StopMusic(); Save(); }
private static void Main() { ConsoleSettings.PrepareConsole(); KeyboardInterface keyboard = new KeyboardInterface(); Opponent enemy = new Opponent(new MatrixCoords(3, 3), new char[, ] { { '@' } }, null); ConsoleRenderer renderer = new ConsoleRenderer(ConsoleSettings.ConsoleHeight, ConsoleSettings.ConsoleWidth); IList <WorldObject> map = MapParser.ParseMap("../../WorldMaps/map.txt"); GameEngine.GameEngine gameEngine = new GameEngine.GameEngine(renderer, keyboard); int heroChosen = 0; Console.WriteLine("Please select your Hero: \nPress 1 for Mage\nPress 2 for Thief\nPress 3 for Warrior"); // validates hero choice and let's player choose correctly do { try { heroChosen = int.Parse(Console.ReadLine()); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine("Please choose 1, 2 or 3"); } } while (!true || heroChosen < 1 || heroChosen > 3); Console.Clear(); // TODO implement interface for the choice of type of character MainCharacter hero = HeroChoice(heroChosen); hero.AddWeapon(new Knife("Steel knife") { MinDmg = 20, MaxDmg = 30 }); //hero.AddWeapon(new Knife("mnogo qk knife") { MaxDmg = 30, MinDmg = 20 }); gameEngine.AddObject(hero); gameEngine.AddObject(enemy); Opponent newOpponent = new Opponent(new MatrixCoords(2, 35), new char[, ] { { '@' } }, new BattleAxe("Battle Axe")); Opponent newOpponent2 = new Opponent(new MatrixCoords(7, 30), new char[, ] { { '@' } }, new Knife("Steel knife")); Opponent newOpponent3 = new Opponent(new MatrixCoords(10, 10), new char[, ] { { '@' } }, new BattleAxe("Battle Axe")); Opponent newOpponent4 = new Opponent(new MatrixCoords(15, 15), new char[, ] { { '@' } }, new BattleAxe("Battle Axe")); gameEngine.AddObject(newOpponent); gameEngine.AddObject(newOpponent2); gameEngine.AddObject(newOpponent3); gameEngine.AddObject(newOpponent4); foreach (var item in map) { gameEngine.AddObject(item); } keyboard.OnDownPressed += (sender, eventInfo) => { hero.Move(Direction.Down); }; keyboard.OnLeftPressed += (sender, eventInfo) => { hero.Move(Direction.Left); }; keyboard.OnRightPressed += (sender, eventInfo) => { hero.Move(Direction.Right); }; keyboard.OnUpPressed += (sender, eventInfo) => { hero.Move(Direction.Top); }; keyboard.onPotionPressed += (sencer, eventInfo) => { hero.Health += 5; }; gameEngine.Run(); }