Example #1
0
    //public ChessBoardSim(ChessPiece[,] boardLayout, int turnNumber, ChessPiece piece, int[]moveLoc)
    public ChessBoardSim(ChessPiece[,] boardLayout, int turnNumber)
    {
        this.boardLayout = (ChessPiece[, ])boardLayout.Clone();
        this.turnNumber  = turnNumber;
        ChessPiece temp;

        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                temp = boardLayout[i, j];
                if (temp != null)
                {
                    if (temp.isWhite)
                    {
                        whitePiecesRemaining.Add(temp);
                    }
                    else
                    {
                        blackPiecesRemaining.Add(temp);
                    }
                }
            }
        }
    }
Example #2
0
    private ChessBoardSim SimulateBoard(ChessPiece piece, int[] newPositionCoords)
    {
        ChessBoardSim simBoard = new ChessBoardSim((ChessPiece[, ])boardLayout.Clone(), turnNumber);

        simBoard.MovePiece(piece, newPositionCoords[0], newPositionCoords[1], true);
        Debug.Log(whitePiecesRemaining.Count + " " + blackPiecesRemaining.Count);
        Debug.Log(simBoard.whitePiecesRemaining.Count + " " + simBoard.blackPiecesRemaining.Count);
        return(simBoard);
    }
Example #3
0
        private void AddMove(List <Point> availableActions, Point fromPoint, Point toPoint, bool ignoreCheck = false)
        {
            bool kingInCheck = false;

            if (!ignoreCheck)
            {
                ChessPiece movingPiece = boardArray[fromPoint.x, fromPoint.y];
                ChessPiece[,] boardArrayBackup = (ChessPiece[, ])boardArray.Clone();
                ActionPiece(fromPoint, toPoint, true);
                kingInCheck = KingInCheck(movingPiece.Player);
                boardArray  = boardArrayBackup;
            }

            if (ignoreCheck || !kingInCheck)
            {
                availableActions.Add(toPoint);
            }
        }
Example #4
0
 /// <summary>
 /// Clone matrix field.
 /// </summary>
 /// <returns>Matrix field.</returns>
 public ChessPiece[,] CloneMatrix()
 {
     return((ChessPiece[, ])_sourceArray.Clone());
 }
Example #5
0
    public void TryMove(int startX, int startY, int endX, int endY)
    {
        startDrag     = new Vector2(startX, startY);
        selectedPiece = pieces[startX, startY];
        bool invalidMove = false;

        if (isRed == isRedTurn)
        {
            selectedPiece.transform.position = originalPosition;
        }
        if (endX >= 0 && endX < 10 && endY >= 0 && endY < 9 && selectedPiece != null)
        {
            if (isValidMove(startX, startY, endX, endY, selectedPiece.Type))
            {
                if (!GeneralChecked(isRedTurn))
                {
                    MovePiece(selectedPiece, endX, endY);
                    moveCompleted = true;
                    isRedTurn     = !isRedTurn;
                    return;
                }
                else
                {
                    ChessPiece[,] copyBoard = (ChessPiece[, ])pieces.Clone();
                    Vector2 originalgeneralRedPos  = new Vector2(generalRedPos.x, generalRedPos.y);
                    Vector2 originalgeneralBluePos = new Vector2(generalBluePos.x, generalBluePos.y);
                    Vector2 removePos      = new Vector2(-1, -1);
                    bool    removePosIsRed = false;
                    if (!isRedTurn)
                    {
                        for (int i = 0; i < bluePiecesPos.Count; i++)
                        {
                            if (bluePiecesPos[i].x == startX && bluePiecesPos[i].y == startY)
                            {
                                if (bluePiecesPos[i].x == generalBluePos.x && bluePiecesPos[i].y == generalBluePos.y)
                                {
                                    generalBluePos = new Vector2(endX, endY);
                                }
                                if (pieces[endX, endY] != null)
                                {
                                    removePos      = new Vector2(endX, endY);
                                    removePosIsRed = pieces[endX, endY].GetRed();
                                    RemovePiece(pieces[endX, endY].GetRed(), endX, endY);
                                }
                                bluePiecesPos[i]       = new Vector2(endX, endY);
                                pieces[endX, endY]     = selectedPiece;
                                pieces[startX, startY] = null;
                            }
                        }
                    }
                    else
                    {
                        for (int i = 0; i < redPiecesPos.Count; i++)
                        {
                            if (redPiecesPos[i].x == startX && redPiecesPos[i].y == startY)
                            {
                                if (redPiecesPos[i].x == generalRedPos.x && redPiecesPos[i].y == generalRedPos.y)
                                {
                                    generalRedPos = new Vector2(endX, endY);
                                }
                                if (pieces[endX, endY] != null)
                                {
                                    removePos      = new Vector2(endX, endY);
                                    removePosIsRed = pieces[endX, endY].GetRed();
                                    RemovePiece(pieces[endX, endY].GetRed(), endX, endY);
                                }
                                redPiecesPos[i]        = new Vector2(endX, endY);
                                pieces[endX, endY]     = selectedPiece;
                                pieces[startX, startY] = null;
                            }
                        }
                    }
                    bool isGeneralChecked = GeneralChecked(isRedTurn);

                    if (removePos.x != -1 && removePos.y != -1)
                    {
                        if (removePosIsRed)
                        {
                            redPiecesPos.Add(removePos);
                        }
                        else
                        {
                            bluePiecesPos.Add(removePos);
                        }
                    }

                    if (isRedTurn)
                    {
                        for (int i = 0; i < redPiecesPos.Count; i++)
                        {
                            if (redPiecesPos[i].x == endX && redPiecesPos[i].y == endY)
                            {
                                redPiecesPos[i] = new Vector2(startX, startY);
                            }
                        }
                    }
                    else
                    {
                        for (int i = 0; i < bluePiecesPos.Count; i++)
                        {
                            if (bluePiecesPos[i].x == endX && bluePiecesPos[i].y == endY)
                            {
                                bluePiecesPos[i] = new Vector2(startX, startY);
                            }
                        }
                    }
                    pieces = copyBoard;
                    if (isGeneralChecked)
                    {
                        generalAlpha = 1;
                        GeneralCheckedText.GetComponent <TextMesh>().color = new Color(0f, 0f, 0f, generalAlpha);
                        moveCompleted  = false;
                        generalBluePos = originalgeneralBluePos;
                        generalRedPos  = originalgeneralRedPos;
                        return;
                    }
                    else
                    {
                        generalBluePos = originalgeneralBluePos;
                        generalRedPos  = originalgeneralRedPos;
                        MovePiece(selectedPiece, endX, endY);
                        moveCompleted = true;
                        isRedTurn     = !isRedTurn;
                        return;
                    }
                }
            }
            else
            {
                invalidMove = true;
            }
        }
        else
        {
            invalidMove = true;
        }
        if (invalidMove)
        {
            invalidAlpha = 1;
            invalidMoveText.GetComponent <TextMesh>().color = new Color(0f, 0f, 0f, invalidAlpha);
        }
        moveCompleted = false;
    }