Ejemplo n.º 1
0
 public void SetPosition(Vector3 pos, DotBehaviour dotB)
 {
     // if (moving)
     // return;
     targetPosition = pos;
     StartCoroutine(MoveB());
 }
Ejemplo n.º 2
0
 void UpdateAndSetThreeInRow(DotBehaviour dot, int index1, int index2)
 {
     if (dot.IsSamePlayer(Dots[dot.DotIndex + index1]) && dot.IsSamePlayer(Dots[dot.DotIndex + index2]))
     {
         Dots[dot.DotIndex - index1].HasThreeInRow = true;
         Dots[dot.DotIndex - index2].HasThreeInRow = true;
         dot.HasThreeInRow = true;
     }
 }
Ejemplo n.º 3
0
    internal void RegisterDot(int dotIndex, DotBehaviour dot)
    {
        Dots[dotIndex] = dot;

        if (!Dots.Any(p => p == null))
        {
            ResetGame();
        }
    }
Ejemplo n.º 4
0
 private void Start()
 {
     dotBehaviour = transform.parent.GetComponent <DotBehaviour>();
 }
Ejemplo n.º 5
0
 internal bool IsSamePlayer(DotBehaviour other)
 {
     return(CurrentMode == Mode.IsPlayer && CurrentMode == other.CurrentMode && isWhite == other.isWhite);
 }
Ejemplo n.º 6
0
    public void UpdateDots(DotBehaviour currentDot, bool DoSwitchPlayer)
    {
        var oldHasThreeInRow = currentDot.HasThreeInRow;

        foreach (var dot in Dots)
        {
            dot.HasThreeInRow = false;
        }

        for (var i = 1; i < Dots.Length; i += 2)
        {
            var dot = Dots[i];

            var CircleIndex = dot.DotIndex % 8;

            if (CircleIndex == 7)
            {
                UpdateAndSetThreeInRow(dot, -7, -1);
            }
            else
            {
                UpdateAndSetThreeInRow(dot, -1, 1);
            }
        }

        for (var i = 9; i <= 15; i += 2)
        {
            var dot = Dots[i];

            UpdateAndSetThreeInRow(dot, -8, 8);
        }

        if (DoSwitchPlayer && !oldHasThreeInRow && currentDot.HasThreeInRow)
        {
            foreach (var dot in Dots)
            {
                dot.MyCanSelect = dot.CurrentMode == DotBehaviour.Mode.IsPlayer &&
                                  dot.isWhite != currentDot.isWhite &&
                                  !dot.HasThreeInRow;
            }

            return;
        }

        if (DoSwitchPlayer)
        {
            IsCurrentPlayerWhite = !IsCurrentPlayerWhite;
            CurrentlySelectedDot = null;
            foreach (var dot in Dots)
            {
                dot.CurrentScaleSin = 0.0F;
            }
        }


        var DotsLeftCurrentPlayer = IsCurrentPlayerWhite ? DotsLeftWhite : DotsLeftBlack;

        if (DotsLeftToPlay > 0)
        {
            // Put new anywhere free
            foreach (var dot in Dots)
            {
                dot.MyCanSelect = dot.CurrentMode == DotBehaviour.Mode.NotUsed;
            }
        }
        else if (CurrentlySelectedDot == null)
        {
            // Select dot to move
            foreach (var dot in Dots)
            {
                dot.MyCanSelect = dot.IsCurrentColor;
            }

            // Second select dot to move check
            foreach (var dot in Dots.Where(p => p.MyCanSelect))
            {
                dot.MyCanSelect = dot.canTouch.Select(p => this.Dots[p])
                                  .Any(p => p.CurrentMode == DotBehaviour.Mode.NotUsed);
            }
        }
        else
        {
            // Select where to place selected dot
            if (DotsLeftCurrentPlayer > 3)
            {
                // Select dot to move
                foreach (var dot in Dots)
                {
                    dot.MyCanSelect = false;
                }

                foreach (var i in CurrentlySelectedDot.canTouch)
                {
                    var dot = Dots[i];
                    dot.MyCanSelect = dot.CurrentMode == DotBehaviour.Mode.NotUsed;
                }
            }
            else if (DotsLeftCurrentPlayer == 3)
            {
                // Select dot to move
                foreach (var dot in Dots)
                {
                    dot.MyCanSelect = dot.CurrentMode == DotBehaviour.Mode.NotUsed;
                }
            }
        }

        // Check if no moves is available
        if (!Dots.Any(p => p.MyCanSelect))
        {
            if (++noPossibleMoveCounter == 1)
            {
                UpdateDots(currentDot, true);
            }
            else if (noPossibleMoveCounter > 1)
            {
                SetGameOver();
            }
        }
        else
        {
            noPossibleMoveCounter = 0;
        }

        // Check if game over
        if (DotsLeftToPlay == 0 && (DotsLeftWhite < 3 || DotsLeftBlack < 3))
        {
            SetGameOver();
        }
    }