Пример #1
0
        public void Awake()
        {
            int ballCounter = 0;

            for (int i = 0; i < Config.BOARD_WIDTH; i++)
            {
                for (int j = 0; j < Config.BOARD_HEIGHT; j++)
                {
                    if (i == 0 || i == 1 || i == 5 || i == 6)
                    {
                        if (j == 0 || j == 1)
                        {
                            j = 2;
                        }
                        else if (j == 5 || j == 6)
                        {
                            j = Config.BOARD_HEIGHT;
                            continue;
                        }
                    }

                    CoordInfo coordInfo = transform.GetChild(ballCounter).GetComponent <CoordInfo>();
                    ballCounter++;
                    if (coordInfo == null)
                    {
                        continue;
                    }
                    coordInfo.SetCoord(i, j);
                }
            }
        }
Пример #2
0
        private bool IsMoveValid(MoveDirection _direction, Type type)
        {
            CoordInfo ballCoord = new CoordInfo();

            if (type == typeof(Ball))
            {
                ballCoord.coord[0] = coordInfo.coord[0] +
                                     BallsManager.Instance.moveDirectionCoord.checkMoves[(int)_direction][0];
                ballCoord.coord[1] = coordInfo.coord[1] +
                                     BallsManager.Instance.moveDirectionCoord.checkMoves[(int)_direction][1];

                return(BallsManager.Instance.ballsLeft.Exists(x => x.coordInfo.coord[0] == ballCoord.coord[0] &&
                                                              x.coordInfo.coord[1] == ballCoord.coord[1]));
            }

            if (type == typeof(Pot))
            {
                ballCoord.coord[0] = coordInfo.coord[0] +
                                     BallsManager.Instance.moveDirectionCoord.checkMoves[(int)_direction][0] * 2;
                ballCoord.coord[1] = coordInfo.coord[1] +
                                     BallsManager.Instance.moveDirectionCoord.checkMoves[(int)_direction][1] * 2;

                Pot pot = PotManager.Instance.potsList.FirstOrDefault(x => x.coordInfo.coord[0] == ballCoord.coord[0] &&
                                                                      x.coordInfo.coord[1] == ballCoord.coord[1]);
                return(pot && pot.potState == PotState.Free);
            }

            return(false);
        }
Пример #3
0
        public bool CanSelectPot(CoordInfo _potCoord)
        {
            CoordInfo ballCoord = BallsManager.Instance.ballToMakeMove.coordInfo;

            return(CheckIfBetweenBalExist(ballCoord, _potCoord) &&
                   CheckIfPotIsInLine(ballCoord, _potCoord) &&
                   (Mathf.Abs((ballCoord.coord[0] + ballCoord.coord[1]) - (_potCoord.coord[0] + _potCoord.coord[1])) == 2));
        }
Пример #4
0
        private void SaveMove(CoordInfo _selectedBall, CoordInfo _betweenBall, CoordInfo _selectedPot)
        {
            MoveInfo moveInfo = new MoveInfo()
            {
                from    = new[] { _selectedBall.coord[0], _selectedBall.coord[1] },
                between = new[] { _betweenBall.coord[0], _betweenBall.coord[1] },
                to      = new[] { _selectedPot.coord[0], _selectedPot.coord[1] }
            };

            movesContainer.movesMade.Add(moveInfo);
        }
Пример #5
0
        public void MoveBallToCoord(Ball _ballToMove, CoordInfo _destinationCoord, Ball _betweenBall)
        {
            MoveDirection direction = FindMoveDirection(_ballToMove, _destinationCoord);

            _ballToMove.transform.position += directions[direction];
            PotManager.Instance.SetPotState(PotManager.Instance.FindPotByCoords(_ballToMove.coordInfo), PotState.Free);
            PotManager.Instance.SetPotState(PotManager.Instance.FindPotByCoords(_betweenBall.coordInfo), PotState.Free);
            PotManager.Instance.SetPotState(PotManager.Instance.FindPotByCoords(_destinationCoord), PotState.Occupied);
            SaveMove(_ballToMove.coordInfo, _betweenBall.coordInfo, _destinationCoord);
            _ballToMove.coordInfo.SetCoord(_destinationCoord);
            RemoveBall(_betweenBall);
            PotManager.Instance.OnUpdateScore();
        }
Пример #6
0
        private MoveDirection FindMoveDirection(Ball _ballToMove, CoordInfo _destinationCoord)
        {
            if (_ballToMove.coordInfo.coord[0] - _destinationCoord.coord[0] != 0)
            {
                return(_ballToMove.coordInfo.coord[0] - _destinationCoord.coord[0] > 0
                    ? MoveDirection.Up
                    : MoveDirection.Down);
            }
            if (_ballToMove.coordInfo.coord[1] - _destinationCoord.coord[1] != 0)
            {
                return(_ballToMove.coordInfo.coord[1] - _destinationCoord.coord[1] > 0
                    ? MoveDirection.Left
                    : MoveDirection.Right);
            }

            return(default);
Пример #7
0
        private bool CheckIfBetweenBalExist(CoordInfo _selectedBall, CoordInfo _potCoord)
        {
            int[] betweenCoord = new int[2];
            if (_selectedBall.coord[0] - _potCoord.coord[0] != 0)
            {
                betweenCoord[0] = _selectedBall.coord[0] + (_selectedBall.coord[0] - _potCoord.coord[0] > 0 ? -1:1);
                betweenCoord[1] = _selectedBall.coord[1];
            }
            if (_selectedBall.coord[1] - _potCoord.coord[1] != 0)
            {
                betweenCoord[0] = _selectedBall.coord[0];
                betweenCoord[1] = _selectedBall.coord[1] + (_selectedBall.coord[1] - _potCoord.coord[1] > 0 ? -1:1);
            }

            Ball betweenBall = BallsManager.Instance.ballsLeft.FirstOrDefault(x =>
                                                                              x.coordInfo.coord[0] == betweenCoord[0] &&
                                                                              x.coordInfo.coord[1] == betweenCoord[1]);

            return(BallsManager.Instance.ballsLeft.Contains(betweenBall));
        }
Пример #8
0
 private bool CheckIfPotIsInLine(CoordInfo _selectedBall, CoordInfo _potCoord)
 {
     return((_selectedBall.coord[0] - _potCoord.coord[0] == 0) || (_selectedBall.coord[1] - _potCoord.coord[1] == 0));
 }
Пример #9
0
 public void SetCoord(CoordInfo _coord)
 {
     coord[0] = _coord.coord[0];
     coord[1] = _coord.coord[1];
 }
Пример #10
0
 public Pot FindPotByCoords(CoordInfo _potCoords)
 {
     return(potsList.FirstOrDefault(x =>
                                    x.coordInfo.coord[0] == _potCoords.coord[0] && x.coordInfo.coord[1] == _potCoords.coord[1]));
 }
Пример #11
0
 private void Awake()
 {
     coordInfo = new CoordInfo();
 }