Ejemplo n.º 1
0
    void GameUpdate()
    {
        if (is_paused_)
        {
            return;
        }

        if (Input.GetKeyDown(KeyCode.Escape) && !is_game_over_)
        {
            Pause();
        }

        Vector3 euler_angle = camera_pan_.transform.localEulerAngles;

        if (euler_angle.y < view_y_)
        {
            euler_angle.y += 100 * Time.deltaTime;
            if (euler_angle.y > view_y_)
            {
                euler_angle.y = view_y_;
            }

            camera_pan_.transform.localEulerAngles = euler_angle;
        }
        if (euler_angle.y > view_y_)
        {
            euler_angle.y -= 100 * Time.deltaTime;
            if (euler_angle.y < view_y_)
            {
                euler_angle.y = view_y_;
            }

            camera_pan_.transform.localEulerAngles = euler_angle;
        }

        bool busy  = false;
        int  score = 0;

        if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow))
        {
            if (mul < 3f)
            {
                mul += 0.02f;
            }
        }
        else
        {
            if (mul > 1f)
            {
                mul -= 0.1f;
            }
        }


        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                Landmarks landmarks = landmarks_map_[i, j];

                landmarks.merged_ = false;

                if (alpha_timer_ > 1.5)
                {
                    landmarks.SetAlpha(0f);
                }
                else
                {
                    landmarks.SetAlpha(1f);
                }

                foreach (Landmark landmark in landmarks.landmark_list_)
                {
                    landmark.Move(mul);
                }

                if (!landmarks.Busy() && landmarks.landmark_list_.Count > 1)
                {
                    int level = (int)Mathf.Log(landmarks.Level(), 2);
                    landmarks.UpgradeLandmark(CreateLandmark(level));
                }

                score += landmarks.Level() * 5;

                busy = busy || landmarks.Busy();
            }
        }

        if (score > score_)
        {
            score_       = score;
            Score.score_ = score_;
        }

        if (busy)
        {
            return;
        }

        alpha_timer_ += Time.deltaTime;

        if (is_game_over_)
        {
            if (!ui_game_over_.activeInHierarchy)
            {
                UIOffAll();
                ui_game_over_.SetActive(true);
                return;
            }

            if (Input.anyKeyDown)
            {
                SceneManager.LoadScene(0);
            }
            return;
        }

        if (new_turn_)
        {
            new_turn_ = false;

            List <Landmarks> empty_landmarks = new List <Landmarks>();
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    Landmarks landmarks = landmarks_map_[i, j];

                    if (landmarks.Empty())
                    {
                        empty_landmarks.Add(landmarks);
                    }
                }
            }

            float max_step = 0;
            for (int i = 0; i < highest_level_; i++)
            {
                max_step += i * i * i;
            }

            float value = Random.value;
            float step  = 0;
            int   level = 1;
            for (int i = 0; i < highest_level_; i++)
            {
                step += i * i * i;
                if (value <= step / max_step)
                {
                    level = highest_level_ - i;
                    break;
                }
            }

            empty_landmarks[Random.Range(0, empty_landmarks.Count)].AddLandmark(CreateLandmark(level));

            if (empty_landmarks.Count <= 1)
            {
                for (int i = 0; i < 4; i++)
                {
                    for (int j = 0; j < 3; j++)
                    {
                        Landmarks landmark = landmarks_map_[i, j];
                        Landmarks next     = landmarks_map_[i, j + 1];
                        if (landmark.Level() == next.Level())
                        {
                            return;
                        }
                    }

                    for (int j = 3; j > 0; j--)
                    {
                        Landmarks landmark = landmarks_map_[i, j];
                        Landmarks next     = landmarks_map_[i, j - 1];
                        if (landmark.Level() == next.Level())
                        {
                            return;
                        }
                    }
                }

                for (int j = 0; j < 4; j++)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        Landmarks landmark = landmarks_map_[i, j];
                        Landmarks next     = landmarks_map_[i + 1, j];
                        if (landmark.Level() == next.Level())
                        {
                            return;
                        }
                    }

                    for (int i = 3; i > 0; i--)
                    {
                        Landmarks landmark = landmarks_map_[i, j];
                        Landmarks next     = landmarks_map_[i - 1, j];
                        if (landmark.Level() == next.Level())
                        {
                            return;
                        }
                    }
                }

                is_game_over_ = true;
                return;
            }
            return;
        }

        int dir = -1;

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            dir = 0;
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            dir = 1;
        }
        else if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            dir = 2;
        }
        else if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            dir = 3;
        }


        if (dir == 0)
        {
            for (int i = 0; i < 4; i++)
            {
                for (int j = 2; j >= 0; j--)
                {
                    Landmarks landmarks = landmarks_map_[i, j];
                    if (landmarks.Empty())
                    {
                        continue;
                    }

                    Landmarks next = landmarks_map_[i, j + 1];
                    if (next.Empty() || next.Level() == landmarks.Level())
                    {
                        if (next.Level() == landmarks.Level())
                        {
                            if (landmarks.merged_ || next.merged_)
                            {
                                continue;
                            }
                            else
                            {
                                landmarks.merged_ = true;
                            }
                        }

                        landmarks.MoveLandmarks(next);
                        new_turn_    = true;
                        alpha_timer_ = 0;
                        j            = 3;
                    }
                }
            }
        }
        else if (dir == 1)
        {
            for (int i = 0; i < 4; i++)
            {
                for (int j = 1; j < 4; j++)
                {
                    Landmarks landmarks = landmarks_map_[i, j];
                    if (landmarks.Empty())
                    {
                        continue;
                    }

                    Landmarks next = landmarks_map_[i, j - 1];
                    if (next.Empty() || next.Level() == landmarks.Level())
                    {
                        if (next.Level() == landmarks.Level())
                        {
                            if (landmarks.merged_ || next.merged_)
                            {
                                continue;
                            }
                            else
                            {
                                landmarks.merged_ = true;
                            }
                        }

                        landmarks.MoveLandmarks(next);
                        new_turn_    = true;
                        alpha_timer_ = 0;
                        j            = 0;
                    }
                }
            }
        }
        else if (dir == 2)
        {
            for (int j = 0; j < 4; j++)
            {
                for (int i = 1; i < 4; i++)
                {
                    Landmarks landmarks = landmarks_map_[i, j];
                    if (landmarks.Empty())
                    {
                        continue;
                    }

                    Landmarks next = landmarks_map_[i - 1, j];
                    if (next.Empty() || next.Level() == landmarks.Level())
                    {
                        if (next.Level() == landmarks.Level())
                        {
                            if (landmarks.merged_ || next.merged_)
                            {
                                continue;
                            }
                            else
                            {
                                landmarks.merged_ = true;
                            }
                        }

                        landmarks.MoveLandmarks(next);
                        new_turn_    = true;
                        alpha_timer_ = 0;
                        i            = 0;
                    }
                }
            }
        }
        else if (dir == 3)
        {
            for (int j = 0; j < 4; j++)
            {
                for (int i = 2; i >= 0; i--)
                {
                    Landmarks landmarks = landmarks_map_[i, j];
                    if (landmarks.Empty())
                    {
                        continue;
                    }

                    Landmarks next = landmarks_map_[i + 1, j];
                    if (next.Empty() || next.Level() == landmarks.Level())
                    {
                        if (next.Level() == landmarks.Level())
                        {
                            if (landmarks.merged_ || next.merged_)
                            {
                                continue;
                            }
                            else
                            {
                                landmarks.merged_ = true;
                            }
                        }

                        landmarks.MoveLandmarks(next);
                        new_turn_    = true;
                        alpha_timer_ = 0;
                        i            = 3;
                    }
                }
            }
        }
    }