//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); } } } } }
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); }
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); } }
/// <summary> /// Clone matrix field. /// </summary> /// <returns>Matrix field.</returns> public ChessPiece[,] CloneMatrix() { return((ChessPiece[, ])_sourceArray.Clone()); }
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; }