Ejemplo n.º 1
0
        // Пытается переместить игрока в указанном направлении
        public void Move(CubiconDirection direction)
        {
            // Если мы не находимся в состоянии игры, то ничего не делаем
            if (state != CubiconGameState.PLAYING)
            {
                return;
            }

            int movementX = 0;
            int movementY = 0;

            switch (direction)
            {
            case CubiconDirection.DOWN:
                movementX = 0;
                movementY = 1;
                break;

            case CubiconDirection.UP:
                movementX = 0;
                movementY = -1;
                break;

            case CubiconDirection.LEFT:
                movementX = -1;
                movementY = 0;
                break;

            case CubiconDirection.RIGHT:
                movementX = 1;
                movementY = 0;
                break;
            }

            int blockX = CurrentLevel.PlayerCol + movementX;
            int blockY = CurrentLevel.PlayerRow + movementY;

            if (!CurrentLevel.IsCellIndexesCorrect(blockY, blockX))
            {
                return;
            }

            CubiconCell player = CurrentLevel[CurrentLevel.PlayerRow, CurrentLevel.PlayerCol];
            CubiconCell block  = CurrentLevel[blockY, blockX];

            if (CurrentLevel[blockY, blockX].State == CubiconCellState.EMPTY)
            {
                // Выполняем перемещение
                block.State  = player.State;
                player.State = CubiconCellState.EMPTY;
            }
            else if (IsCellMovable(CurrentLevel[blockY, blockX]))
            {
                int targetX = blockX + movementX;
                int targetY = blockY + movementY;

                if (!CurrentLevel.IsCellIndexesCorrect(targetY, targetX) ||
                    CurrentLevel[targetY, targetX].State != CubiconCellState.EMPTY)
                {
                    return;
                }

                CubiconCell target = CurrentLevel[targetY, targetX];

                // Выполняем перемещение
                target.State = block.State;
                block.State  = player.State;
                player.State = CubiconCellState.EMPTY;
            }

            if (CurrentLevel[blockY, blockX].State != CubiconCellState.BORDER)
            {
                CurrentLevel.PlayerCol = blockX;
                CurrentLevel.PlayerRow = blockY;
            }

            UpdateGameState();
        }
Ejemplo n.º 2
0
 private bool CheckNeighbor(int row, int col, CubiconCellState state)
 {
     return(CurrentLevel.IsCellIndexesCorrect(row, col) &&
            IsCellMovable(CurrentLevel[row, col]) &&
            CurrentLevel[row, col].State == state);
 }