public bool CollidesCharacterWithTreasure(MainCharacter character) { int pos = 0; bool collided = false; while (pos < Treasures.Count && !collided) { if (character.CollidesWith(Treasures[pos], XMap, YMap)) { collided = true; Treasures.RemoveAt(pos); } pos++; } return(collided); }
public override void Show() { short oldX, oldY, oldXMap, oldYMap; byte currentLevel = 1; bool gameOver = false; character.MoveTo((short)(level.Start.X - level.XMap), (short)(level.Start.Y - level.YMap)); audio.PlayMusic(0, -1); var timer = new Timer(this.DecreaseEnergy, null, 1000, 1000); do { // 1. Draw everything hardware.ClearScreen(); hardware.DrawSprite(level.Floor, 0, 0, level.XMap, level.YMap, GameController.SCREEN_WIDTH, GameController.SCREEN_HEIGHT); foreach (Wall wall in level.Walls) { hardware.DrawSprite(Sprite.SpriteSheet, (short)(wall.X - level.XMap), (short)(wall.Y - level.YMap), wall.SpriteX, wall.SpriteY, Sprite.SPRITE_WIDTH, Sprite.SPRITE_HEIGHT); } foreach (Treasure t in level.Treasures) { hardware.DrawSprite(Sprite.SpriteSheet, (short)(t.X - level.XMap), (short)(t.Y - level.YMap), t.SpriteX, t.SpriteY, Sprite.SPRITE_WIDTH, Sprite.SPRITE_HEIGHT); } hardware.DrawSprite(Sprite.SpriteSheet, character.X, character.Y, character.SpriteX, character.SpriteY, Sprite.SPRITE_WIDTH, Sprite.SPRITE_HEIGHT); hardware.DrawSprite(Sprite.SpriteSheet, (short)(level.Exit.X - level.XMap), (short)(level.Exit.Y - level.YMap), level.Exit.SpriteX, level.Exit.SpriteY, Sprite.SPRITE_WIDTH, Sprite.SPRITE_HEIGHT); hardware.ClearBottom(); hardware.DrawLine(0, 500, 800, 500, 255, 255, 0, 255); hardware.WriteText(textEnergy, 5, 550); hardware.WriteText(textPoints, 600, 550); hardware.UpdateScreen(); // 2. Move character from keyboard input oldX = character.X; oldY = character.Y; oldXMap = level.XMap; oldYMap = level.YMap; moveCharacter(); // 3. Move enemies and objects // 4. Check collisions and update game state if (character.CollidesWith(level.Walls, level.XMap, level.YMap)) { character.X = oldX; character.Y = oldY; level.XMap = oldXMap; level.YMap = oldYMap; } if (character.CollidesWith(level.Exit, level.XMap, level.YMap)) { currentLevel++; if (File.Exists("levels/level" + currentLevel + ".txt")) { level = new Level("levels/level" + currentLevel + ".txt"); character.MoveTo((short)(level.Start.X - level.XMap), (short)(level.Start.Y - level.YMap)); } else { gameOver = true; } } if (level.CollidesCharacterWithTreasure(character)) { character.Points = (ushort)(character.Points + Treasure.TREASURE_SCORE); updatePoints(); } if (character.Energy <= 0) { gameOver = true; } // 5. Pause game //Thread.Sleep(5); } while (!gameOver && !hardware.IsKeyPressed(Hardware.KEY_ESC)); audio.StopMusic(); timer.Dispose(); }