public override void SnakeTick(World world) { Vector2I oldPosition = Position; Move(); direction = Direction; CheckCollision(world); world.AddBody(new SnakeBody(Game, Factory, oldPosition)); }
public virtual void SnakeTick(World world) { }
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(); }
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(); } } } }