private void MainLoop(object sender, EventArgs e) { CheckEffects(); DidAlreadySnakeMoved = false; Snake.Move(); if (CanShowWalls) { foreach (var obstacle in Obstacles) { Snake.DidHitAWall(obstacle.AsRectangle); } } if (!Snake.IsAlive) { Stop(); return; } foreach (var food in Food) { if (Snake.TryToEat(food.AsRectangle)) { SoundManager.PlaySound(Soundtrack.Pop); Snake.ExtendBody(); switch (food.Type) { case FoodType.Normal: food.NewPosition(Snake); Score = ScoreMultiplier; QuestManager.TrySaveToXp(User, ScoreMultiplier); break; case FoodType.Gold: Food.Remove(food); Score = ScoreMultiplier; QuestManager.TrySaveToXp(User, ScoreMultiplier); FoodModel.ChangeFoodColor(Food, Brushes.Gold); DoubleScoreEffect(10); break; case FoodType.Special: Food.Remove(food); Score = ScoreMultiplier * 2; QuestManager.TrySaveToXp(User, ScoreMultiplier * 2); SpecialEffect(10); break; } _scoreTextBlock.Text = Score.ToString(); for (int i = 0; i < Settings.FoodSpawnRate - 1; i++) { FoodModel newFood = new FoodModel(); newFood.NewPosition(Snake); Food.Add(newFood); } FoodModel.ChanceOtherFoodToAppear(Food, Snake); break; } } Update(); }
private void SetDeffaultSettings() { if (FastMoveEffectTimer >= 0) { Settings.Speed /= 2; } if (SlowMoveEffectTimer >= 0) { Settings.Speed *= 2; } DispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, Settings.Speed); DoubleScoreEffectTimer = -1; FastMoveEffectTimer = -1; SlowMoveEffectTimer = -1; ScoreMultiplier = 1; FoodModel.ChangeFoodColor(Food, Brushes.Red); FoodModel.IsGoldenFoodShown = false; FoodModel.IsSpecialFoodShown = false; _scoreTextBlock.Text = "0"; _timeTextBlock.Text = "00:00"; _area.Background = Settings.Background; _area.Opacity = 1; HideAreaTextBlocks(); score = 0; Timer = new DateTime(); Snake = new SnakeModel(Settings.BodyColor, Settings.HeadColor); switch (Settings.Difficulty) { case Difficulties.Easy: Snake.CanTeleport = true; CanShowWalls = false; break; case Difficulties.Normal: Snake.CanTeleport = false; CanShowWalls = false; break; case Difficulties.Hard: Snake.CanTeleport = false; CanShowWalls = true; CreateWalls(); FoodModel.Walls = Obstacles; break; case Difficulties.Python: Snake.CanTeleport = false; CanShowWalls = true; CreateWalls(); FoodModel.Walls = Obstacles; Snake.Starve = 60; break; } for (int i = Settings.FoodSpawnCount; i > 0; i--) { FoodModel food = new FoodModel(); food.NewPosition(Snake); Food.Add(food); } _pauseTextBlock.Text = "\uf04c"; }