Ejemplo n.º 1
0
        public override void SnakeTick(World world)
        {
            Vector2I oldPosition = Position;
            Move();
            direction = Direction;

            CheckCollision(world);
            world.AddBody(new SnakeBody(Game, Factory, oldPosition));
        }
Ejemplo n.º 2
0
Archivo: Field.cs Proyecto: K0bin/Snake
 public virtual void SnakeTick(World world)
 {
 }
Ejemplo n.º 3
0
Archivo: Game.cs Proyecto: K0bin/Snake
        public void Start()
        {
            Score = 0;
            Rules = new GameRules()
            {
                Duration = 32,
                SnakeStartPosition = new Vector2I(6, 6),
                WorldSize = new Vector2I(8, 8),
                IsDegenerativeSpeedEnabled = true,
                DegenerativeSpeed = 1.1f,
                DegenerativeSpeedMax = 128
            };

            world = new World(this, factory, Rules);

            watch.Start();
        }
Ejemplo n.º 4
0
        private void CheckCollision(World world)
        {
            if (world.Blocks != null)
            {
                for (int i = 0; i < world.Blocks.Count; i++)
                {
                    if (world.Blocks[i] != null && Position == world.Blocks[i].Position)
                    {
                        Game.Loose();
                        return;
                    }
                }
            }

            if (world.Bodies != null)
            {
                for (int i = 0; i < world.Bodies.Count; i++)
                {
                    if (world.Bodies[i] != null && Position == world.Bodies[i].Position)
                    {
                        Game.Loose();
                        return;
                    }
                }
            }

            if (world.Treat != null && Position == world.Treat.Position)
            {
                if (Game.Rules.Exponential)
                    Game.Score *= 2;
                else
                    Game.Score++;

                Random random = new Random();
                Vector2I newPosition = new Vector2I(random.Next(1, Game.Rules.WorldSize.X - 1), random.Next(1, Game.Rules.WorldSize.Y - 1));
                world.Treat = new Treat(Game, Factory, newPosition);

                if (Game.Rules.SpeedPowerupScore != 0 && Game.Score % Game.Rules.SpeedPowerupScore == 0 && Game.Rules.SpeedPowerupEnabled)
                {
                    random = new Random(Game.Score);
                    world.AddSpeedPowerup(new SpeedPowerup(Game, Factory, new Vector2I(random.Next(1, Game.Rules.WorldSize.X - 1), random.Next(1, Game.Rules.WorldSize.Y - 1))));
                }

                if (Game.Rules.ClearPowerupScore != 0 && Game.Score % Game.Rules.ClearPowerupScore == 0 && Game.Rules.ClearPowerupEnabled)
                {
                    random = new Random(Game.Score);
                    world.AddClearPowerup(new ClearPowerup(Game, Factory, new Vector2I(random.Next(1, Game.Rules.WorldSize.X - 1), random.Next(1, Game.Rules.WorldSize.Y - 1))));
                }

                if(Game.Rules.IsDegenerativeSpeedEnabled)
                {
                    GameRules rules = Game.Rules;
                    rules.Duration = Math.Min((int)(rules.Duration * 1.2f), Game.Rules.DegenerativeSpeedMax);
                    Game.Rules = rules;
                }
            }

            if (world.SpeedPowerups != null)
            {
                for (int i = 0; i < world.SpeedPowerups.Count; i++)
                {
                    if (world.SpeedPowerups[i] != null && Position == world.SpeedPowerups[i].Position)
                    {
                        world.RemoveSpeedPowerup(i);
                        GameRules rules = Game.Rules;
                        rules.Duration /= 2;
                        Game.Rules = rules;
                    }
                }
            }

            if (world.ClearPowerups != null)
            {
                for (int i = 0; i < world.ClearPowerups.Count; i++)
                {
                    if (world.ClearPowerups[i] != null && Position == world.ClearPowerups[i].Position)
                    {
                        world.RemoveClearPowerup(i);
                        world.ClearBodies();
                    }
                }
            }
        }