예제 #1
0
파일: Level.cs 프로젝트: GuiPast/Gauntlet
        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);
        }
예제 #2
0
        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();
        }