Esempio n. 1
0
        private void CheckEffects()
        {
            if (DoubleScoreEffectTimer >= 0)
            {
                if (DoubleScoreEffectTimer == 0)
                {
                    ScoreMultiplier             = 1;
                    FoodModel.IsGoldenFoodShown = false;
                    FoodModel.ChangeFoodColor(Food, Brushes.Red);
                }
                DoubleScoreEffectTimer--;
            }
            else if (FastMoveEffectTimer >= 0)
            {
                if (FastMoveEffectTimer == 0)
                {
                    Settings.Speed              /= 2;
                    DispatcherTimer.Interval     = new TimeSpan(0, 0, 0, 0, Settings.Speed);
                    FoodModel.IsSpecialFoodShown = false;

                    SoundManager.ChangeBGMSpeed(1);
                }
                FastMoveEffectTimer--;
            }
            else if (SlowMoveEffectTimer >= 0)
            {
                if (SlowMoveEffectTimer == 0)
                {
                    Settings.Speed              *= 2;
                    DispatcherTimer.Interval     = new TimeSpan(0, 0, 0, 0, Settings.Speed);
                    FoodModel.IsSpecialFoodShown = false;

                    SoundManager.ChangeBGMSpeed(1);
                }
                SlowMoveEffectTimer--;
            }
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
        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";
        }