Exemplo n.º 1
0
        /// <summary>
        /// Передвижение змейки
        /// </summary>
        private void _moveSnake()
        {
            _wasMove = true;

            //Потенциальная точка в игровом поле (где окажется голова змейки)
            MatrixIdModel newCoods = new MatrixIdModel()
            {
                x = (SnakeCoods[0].x + (int)MotionVector.x), y = (SnakeCoods[0].y + (int)MotionVector.y)
            };

            //Проверка потенциальной точки
            switch (GameMatrix[newCoods.x][newCoods.y].CellState)
            {
            case Initialize.EnumСell.Food:
                newCoods = _willEatFood(newCoods);
                break;

            case Initialize.EnumСell.Block:
                // Змейка врезалась и погибла
                StateController.ChangeState(StateController.EnumStateType.DieSnake);
                return;

            case Initialize.EnumСell.Teleport:
                // Змейка телепортировалась (край карты)
                newCoods = GameMatrix[newCoods.x][newCoods.y].TeleportPosition;
                break;
            }

            // Передвижение
            for (int i = 0; i < SnakeCoods.Count; i++)
            {
                var snakePartGO = GameMatrix[SnakeCoods[i].x][SnakeCoods[i].y].CellGO;
                // Перемещаем часть змейки
                snakePartGO.transform.position               = GameMatrix[newCoods.x][newCoods.y].Position;
                GameMatrix[newCoods.x][newCoods.y].CellGO    = snakePartGO;
                GameMatrix[newCoods.x][newCoods.y].CellState = Initialize.EnumСell.Block;
                // Очищаем освободившеюся часть
                GameMatrix[SnakeCoods[i].x][SnakeCoods[i].y].CellGO    = null;
                GameMatrix[SnakeCoods[i].x][SnakeCoods[i].y].CellState = Initialize.EnumСell.Empty;
                var currentCood = newCoods;
                // Изменяем потенциальную точку
                newCoods = SnakeCoods[i];
                // Изменяем координаты змейки
                SnakeCoods[i] = currentCood;
            }

            // Змейка сьела фрукт и должна вырости
            if (GameMatrix[newCoods.x][newCoods.y].Ate)
            {
                GameMatrix[newCoods.x][newCoods.y].Ate = false;
                StateController.StartSnakeState.CreateSnakePoint(newCoods);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Создание части змейки
        /// </summary>
        /// <param name="coods"></param>
        /// <param name="head"></param>
        public void CreateSnakePoint(MatrixIdModel coods, bool head = false)
        {
            GameObject newGO = (head ? new GameObject("SnakeHead") : new GameObject("SnakeBody"));

            newGO.AddComponent <Image>().color             = (head ? Color.yellow : Color.white);
            newGO.GetComponent <RectTransform>().sizeDelta = SnakePartSize;
            newGO.transform.SetParent(TSnakeParent);
            newGO.transform.position = StateController.MoveSnakeState.GameMatrix[(int)coods.x][(int)coods.y].Position;
            StateController.MoveSnakeState.GameMatrix[coods.x][coods.y].CellGO    = newGO;
            StateController.MoveSnakeState.GameMatrix[coods.x][coods.y].CellState = Initialize.EnumСell.Block;
            StateController.MoveSnakeState.SnakeCoods.Add(new MatrixIdModel()
            {
                x = coods.x, y = coods.y
            });
        }
Exemplo n.º 3
0
        /// <summary>
        /// Поедание "фрукта"
        /// </summary>
        /// <param name="coordinates"></param>
        /// <returns> возвращаем возможно изменённый newCoods </returns>
        private MatrixIdModel _willEatFood(MatrixIdModel coordinates)
        {
            bool willReturn = (GameMatrix[coordinates.x][coordinates.y].Food == Initialize.EnumFood.SwitchFood);

            StateController.EatSnakeState.EatedFoodCood = coordinates;
            StateController.ChangeState(StateController.EnumStateType.EatSnake);
            //Если фрукт был - switch, изменяем потенциальную точку
            if (willReturn)
            {
                coordinates = new MatrixIdModel()
                {
                    x = (SnakeCoods[0].x + (int)MotionVector.x), y = (SnakeCoods[0].y + (int)MotionVector.y)
                };
            }
            return(coordinates);
        }