/// <summary> /// This method creates a movement pattern based on the passed in location /// </summary> /// <param name="addX"></param> /// <param name="addY"></param> /// <returns></returns> protected GameMaster.Move moveCreator(int addX, int addY) { GameMaster.Move m = new GameMaster.Move(); m.OldLocation = locationIndices; m.MovedPiece = GameMaster.pieceBoard[(int)locationIndices.x, (int)locationIndices.y]; m.NewLocation = new Vector2(locationIndices.x + addX, locationIndices.y + addY); if (m.NewLocation.x != -1) { m.TakenPiece = GameMaster.pieceBoard[(int)m.NewLocation.x, (int)m.NewLocation.y]; } return(m); }
public bool kingInCheck() { List <GameMaster.Move> possibleMoves = new List <GameMaster.Move>(); GameMaster.Move m = new GameMaster.Move(); m.OldLocation = locationIndices; m.MovedPiece = GameMaster.pieceBoard[(int)locationIndices.x, (int)locationIndices.y]; //forward x position for (int forwardX = (int)locationIndices.x + 1; forwardX <= 7; forwardX++) { if (GameMaster.pieceBoard[forwardX, (int)locationIndices.y] != null) { if (GameMaster.pieceBoard[forwardX, (int)locationIndices.y].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2(forwardX, locationIndices.y); m.TakenPiece = null; possibleMoves.Add(m); } break; } else { m.NewLocation = new Vector2(forwardX, locationIndices.y); m.TakenPiece = null; possibleMoves.Add(m); } } for (int backwardX = (int)locationIndices.x - 1; backwardX >= 0; backwardX--) { if (GameMaster.pieceBoard[backwardX, (int)locationIndices.y] != null) { if (GameMaster.pieceBoard[backwardX, (int)locationIndices.y].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2(backwardX, locationIndices.y); m.TakenPiece = null; possibleMoves.Add(m); } break; } else { m.NewLocation = new Vector2(backwardX, locationIndices.y); m.TakenPiece = null; possibleMoves.Add(m); } } for (int leftX = (int)locationIndices.y + 1; leftX <= 7; leftX++) { if (GameMaster.pieceBoard[(int)locationIndices.x, leftX] != null) { if (GameMaster.pieceBoard[(int)locationIndices.x, leftX].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2((int)locationIndices.x, leftX); m.TakenPiece = null; possibleMoves.Add(m); } break; } else { m.NewLocation = new Vector2((int)locationIndices.x, leftX); m.TakenPiece = null; possibleMoves.Add(m); } } for (int rightX = (int)locationIndices.y - 1; rightX >= 0; rightX--) { if (GameMaster.pieceBoard[(int)locationIndices.x, rightX] != null) { if (GameMaster.pieceBoard[(int)locationIndices.x, rightX].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2((int)locationIndices.x, rightX); m.TakenPiece = null; possibleMoves.Add(m); } break; } else { m.NewLocation = new Vector2((int)locationIndices.x, rightX); m.TakenPiece = null; possibleMoves.Add(m); } } m = moveCreator(1, 1); for (int rightDiagonalUp = 1; rightDiagonalUp < 8; rightDiagonalUp++) { if (!((int)locationIndices.x + rightDiagonalUp < 8) || !((int)locationIndices.y + rightDiagonalUp < 8)) { break; } if (GameMaster.pieceBoard[(int)locationIndices.x + rightDiagonalUp, (int)locationIndices.y + rightDiagonalUp] == null) { possibleMoves.Add(moveCreator(rightDiagonalUp, rightDiagonalUp)); } else if (GameMaster.pieceBoard[(int)locationIndices.x + rightDiagonalUp, (int)locationIndices.y + rightDiagonalUp].GetComponent <Piece>().color != color) { possibleMoves.Add(moveCreator(rightDiagonalUp, rightDiagonalUp)); break; } else { // if(GameMaster.debugMode) print(GameMaster.pieceBoard[(int)locationIndices.x + rightDiagonalUp, (int)locationIndices.y + rightDiagonalUp].GetComponent<Piece>().type); break; } } for (int leftDiagonalUp = 1; leftDiagonalUp < 8; leftDiagonalUp++) { if (!((int)locationIndices.x + leftDiagonalUp < 8) || !((int)locationIndices.y - leftDiagonalUp >= 0)) { break; } if (GameMaster.pieceBoard[(int)locationIndices.x + leftDiagonalUp, (int)locationIndices.y - leftDiagonalUp] == null) { possibleMoves.Add(moveCreator(leftDiagonalUp, -leftDiagonalUp)); } else if (GameMaster.pieceBoard[(int)locationIndices.x + leftDiagonalUp, (int)locationIndices.y - leftDiagonalUp].GetComponent <Piece>().color != color) { possibleMoves.Add(moveCreator(leftDiagonalUp, -leftDiagonalUp)); break; } else { break; } } for (int rightDiagonalDown = 1; rightDiagonalDown < 8; rightDiagonalDown++) { if (!((int)locationIndices.x - rightDiagonalDown >= 0) || !((int)locationIndices.y + rightDiagonalDown < 8)) { break; } if (GameMaster.pieceBoard[(int)locationIndices.x - rightDiagonalDown, (int)locationIndices.y + rightDiagonalDown] == null) { possibleMoves.Add(moveCreator(-rightDiagonalDown, rightDiagonalDown)); } else if (GameMaster.pieceBoard[(int)locationIndices.x - rightDiagonalDown, (int)locationIndices.y + rightDiagonalDown].GetComponent <Piece>().color != color) { possibleMoves.Add(moveCreator(-rightDiagonalDown, rightDiagonalDown)); break; } else { break; } } for (int leftDiagonalDown = 1; leftDiagonalDown < 8; leftDiagonalDown++) { if (!((int)locationIndices.x - leftDiagonalDown >= 0) || !((int)locationIndices.y - leftDiagonalDown >= 0)) { break; } if (GameMaster.pieceBoard[(int)locationIndices.x - leftDiagonalDown, (int)locationIndices.y - leftDiagonalDown] == null) { possibleMoves.Add(moveCreator(-leftDiagonalDown, -leftDiagonalDown)); } else if (GameMaster.pieceBoard[(int)locationIndices.x - leftDiagonalDown, (int)locationIndices.y - leftDiagonalDown].GetComponent <Piece>().color != color) { possibleMoves.Add(moveCreator(-leftDiagonalDown, -leftDiagonalDown)); break; } else { break; } } List <GameMaster.Move> possibleCheck = new List <GameMaster.Move>(); for (int i = 0; i < possibleMoves.Count; i++) { //if this condition is true then that piece cannot cause check if (possibleMoves[i].TakenPiece != null && possibleMoves[i].TakenPiece.GetComponent <Piece>().color != color) { //if(GameMaster.debugMode) print("Possible check: " + possibleMoves[i].TakenPiece); possibleCheck.Add(possibleMoves[i]); } } for (int i = 0; i < possibleCheck.Count; i++) { for (int j = 0; j < possibleCheck[i].TakenPiece.GetComponent <Piece>().validMoves.Count; j++) { possibleCheck[i].TakenPiece.GetComponent <Piece>().findAllValidMoves(); // possibleCheck[i].TakenPiece.GetComponent<Piece>().colorValidMoves(); if (possibleCheck[i].TakenPiece.GetComponent <Piece>().validMoves[j].TakenPiece == this.gameObject) { if (GameMaster.debugModeLevel >= (int)logLevel.MED) { print("IN CHECK!"); } return(true); } } } return(false); }
public override void findAllValidMoves() { validMoves.Clear(); int colorDirection = color == pieceColor.White ? 1 : -1; //this would indicate getting a new piece in the pawn's place. if ((int)locationIndices.x > 6 || (int)locationIndices.x < 1) { } //this would indicate any other position on the board (a-h 2-7) else { GameMaster.Move m = new GameMaster.Move(); m.OldLocation = locationIndices; m.MovedPiece = GameMaster.pieceBoard[(int)locationIndices.x, (int)locationIndices.y]; // if(GameMaster.debugMode) print("Checking [" + (locationIndices.x + colorForPiece) + ", " + locationIndices.y + "]"); if (GameMaster.pieceBoard[(int)locationIndices.x + colorDirection, (int)locationIndices.y] == null) { m.NewLocation = new Vector2((int)locationIndices.x + colorDirection, (int)locationIndices.y); m.TakenPiece = GameMaster.pieceBoard[(int)locationIndices.x + colorDirection, (int)locationIndices.y]; validMoves.Add(m); } if (firstMove) { if (GameMaster.pieceBoard[(int)locationIndices.x + colorDirection * 2, (int)locationIndices.y] == null) { m.NewLocation = new Vector2((int)locationIndices.x + colorDirection * 2, (int)locationIndices.y); m.TakenPiece = GameMaster.pieceBoard[(int)locationIndices.x + colorDirection * 2, (int)locationIndices.y]; validMoves.Add(m); } } if ((int)locationIndices.y > 0) { // if(GameMaster.debugMode) print("Checking [" + (locationIndices.x + colorForPiece) + ", " + (locationIndices.y - 1) + "]"); if (GameMaster.pieceBoard[(int)locationIndices.x + colorDirection, (int)locationIndices.y - 1] != null) { if (GameMaster.pieceBoard[(int)locationIndices.x + colorDirection, (int)locationIndices.y - 1].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2((int)locationIndices.x + colorDirection, (int)locationIndices.y - 1); m.TakenPiece = GameMaster.pieceBoard[(int)locationIndices.x + colorDirection, (int)locationIndices.y - 1]; validMoves.Add(m); } } } // if(GameMaster.debugMode) print("Checking [" + (locationIndices.x + colorForPiece) + ", " + (locationIndices.y + 1) + "]"); if ((int)locationIndices.y < 7) { if (GameMaster.pieceBoard[(int)locationIndices.x + colorDirection, (int)locationIndices.y + 1] != null) { if (GameMaster.pieceBoard[(int)locationIndices.x + colorDirection, (int)locationIndices.y + 1].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2((int)locationIndices.x + colorDirection, (int)locationIndices.y + 1); m.TakenPiece = GameMaster.pieceBoard[(int)locationIndices.x + colorDirection, (int)locationIndices.y + 1]; validMoves.Add(m); } } } } // colorValidMoves(); }
//CURRENTLY DIRECT COPIED FROM ROOK AND BISHOP public override void findAllValidMoves() { validMoves.Clear(); GameMaster.Move m = new GameMaster.Move(); m.OldLocation = locationIndices; m.MovedPiece = GameMaster.pieceBoard[(int)locationIndices.x, (int)locationIndices.y]; //forward x position for (int forwardX = (int)locationIndices.x + 1; forwardX <= 7; forwardX++) { if (GameMaster.pieceBoard[forwardX, (int)locationIndices.y] != null) { if (GameMaster.pieceBoard[forwardX, (int)locationIndices.y].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2(forwardX, locationIndices.y); m.TakenPiece = null; validMoves.Add(m); } break; } else { m.NewLocation = new Vector2(forwardX, locationIndices.y); m.TakenPiece = null; validMoves.Add(m); } } for (int backwardX = (int)locationIndices.x - 1; backwardX >= 0; backwardX--) { if (GameMaster.pieceBoard[backwardX, (int)locationIndices.y] != null) { if (GameMaster.pieceBoard[backwardX, (int)locationIndices.y].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2(backwardX, locationIndices.y); m.TakenPiece = null; validMoves.Add(m); } break; } else { m.NewLocation = new Vector2(backwardX, locationIndices.y); m.TakenPiece = null; validMoves.Add(m); } } for (int leftX = (int)locationIndices.y + 1; leftX <= 7; leftX++) { if (GameMaster.pieceBoard[(int)locationIndices.x, leftX] != null) { if (GameMaster.pieceBoard[(int)locationIndices.x, leftX].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2((int)locationIndices.x, leftX); m.TakenPiece = null; validMoves.Add(m); } break; } else { m.NewLocation = new Vector2((int)locationIndices.x, leftX); m.TakenPiece = null; validMoves.Add(m); } } for (int rightX = (int)locationIndices.y - 1; rightX >= 0; rightX--) { if (GameMaster.pieceBoard[(int)locationIndices.x, rightX] != null) { if (GameMaster.pieceBoard[(int)locationIndices.x, rightX].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2((int)locationIndices.x, rightX); m.TakenPiece = null; validMoves.Add(m); } break; } else { m.NewLocation = new Vector2((int)locationIndices.x, rightX); m.TakenPiece = null; validMoves.Add(m); } } m = moveCreator(1, 1); List <GameMaster.Move> possibleMoves = new List <GameMaster.Move>(); for (int rightDiagonalUp = 1; rightDiagonalUp < 8; rightDiagonalUp++) { if (!((int)locationIndices.x + rightDiagonalUp < 8) || !((int)locationIndices.y + rightDiagonalUp < 8)) { break; } if (GameMaster.pieceBoard[(int)locationIndices.x + rightDiagonalUp, (int)locationIndices.y + rightDiagonalUp] == null) { possibleMoves.Add(moveCreator(rightDiagonalUp, rightDiagonalUp)); } else if (GameMaster.pieceBoard[(int)locationIndices.x + rightDiagonalUp, (int)locationIndices.y + rightDiagonalUp].GetComponent <Piece>().color != color) { possibleMoves.Add(moveCreator(rightDiagonalUp, rightDiagonalUp)); break; } else { // if(GameMaster.debugMode) print(GameMaster.pieceBoard[(int)locationIndices.x + rightDiagonalUp, (int)locationIndices.y + rightDiagonalUp].GetComponent<Piece>().type); break; } } for (int leftDiagonalUp = 1; leftDiagonalUp < 8; leftDiagonalUp++) { if (!((int)locationIndices.x + leftDiagonalUp < 8) || !((int)locationIndices.y - leftDiagonalUp >= 0)) { break; } if (GameMaster.pieceBoard[(int)locationIndices.x + leftDiagonalUp, (int)locationIndices.y - leftDiagonalUp] == null) { possibleMoves.Add(moveCreator(leftDiagonalUp, -leftDiagonalUp)); } else if (GameMaster.pieceBoard[(int)locationIndices.x + leftDiagonalUp, (int)locationIndices.y - leftDiagonalUp].GetComponent <Piece>().color != color) { possibleMoves.Add(moveCreator(leftDiagonalUp, -leftDiagonalUp)); break; } else { break; } } for (int rightDiagonalDown = 1; rightDiagonalDown < 8; rightDiagonalDown++) { if (!((int)locationIndices.x - rightDiagonalDown >= 0) || !((int)locationIndices.y + rightDiagonalDown < 8)) { break; } if (GameMaster.pieceBoard[(int)locationIndices.x - rightDiagonalDown, (int)locationIndices.y + rightDiagonalDown] == null) { possibleMoves.Add(moveCreator(-rightDiagonalDown, rightDiagonalDown)); } else if (GameMaster.pieceBoard[(int)locationIndices.x - rightDiagonalDown, (int)locationIndices.y + rightDiagonalDown].GetComponent <Piece>().color != color) { possibleMoves.Add(moveCreator(-rightDiagonalDown, rightDiagonalDown)); break; } else { break; } } for (int leftDiagonalDown = 1; leftDiagonalDown < 8; leftDiagonalDown++) { if (!((int)locationIndices.x - leftDiagonalDown >= 0) || !((int)locationIndices.y - leftDiagonalDown >= 0)) { break; } if (GameMaster.pieceBoard[(int)locationIndices.x - leftDiagonalDown, (int)locationIndices.y - leftDiagonalDown] == null) { possibleMoves.Add(moveCreator(-leftDiagonalDown, -leftDiagonalDown)); } else if (GameMaster.pieceBoard[(int)locationIndices.x - leftDiagonalDown, (int)locationIndices.y - leftDiagonalDown].GetComponent <Piece>().color != color) { possibleMoves.Add(moveCreator(-leftDiagonalDown, -leftDiagonalDown)); break; } else { break; } } for (int i = 0; i < possibleMoves.Count; i++) { if (!possibleMoves[i].NewLocation.Equals(new Vector2(-1, -1))) { if (possibleMoves[i].TakenPiece != null && possibleMoves[i].TakenPiece.GetComponent <Piece>().color != color) { validMoves.Add(possibleMoves[i]); } else if (possibleMoves[i].TakenPiece == null) { validMoves.Add(possibleMoves[i]); } } } // colorValidMoves(); }
public override void findAllValidMoves() { validMoves.Clear(); GameMaster.Move m = new GameMaster.Move(); m.OldLocation = locationIndices; m.MovedPiece = GameMaster.pieceBoard[(int)locationIndices.x, (int)locationIndices.y]; //forward x position for (int forwardX = (int)locationIndices.x + 1; forwardX <= 7; forwardX++) { if (GameMaster.pieceBoard[forwardX, (int)locationIndices.y] != null) { if (GameMaster.pieceBoard[forwardX, (int)locationIndices.y].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2(forwardX, locationIndices.y); m.TakenPiece = null; validMoves.Add(m); } break; } else { m.NewLocation = new Vector2(forwardX, locationIndices.y); m.TakenPiece = null; validMoves.Add(m); } } for (int backwardX = (int)locationIndices.x - 1; backwardX >= 0; backwardX--) { if (GameMaster.pieceBoard[backwardX, (int)locationIndices.y] != null) { if (GameMaster.pieceBoard[backwardX, (int)locationIndices.y].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2(backwardX, locationIndices.y); m.TakenPiece = null; validMoves.Add(m); } break; } else { m.NewLocation = new Vector2(backwardX, locationIndices.y); m.TakenPiece = null; validMoves.Add(m); } } for (int leftX = (int)locationIndices.y + 1; leftX <= 7; leftX++) { if (GameMaster.pieceBoard[(int)locationIndices.x, leftX] != null) { if (GameMaster.pieceBoard[(int)locationIndices.x, leftX].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2((int)locationIndices.x, leftX); m.TakenPiece = null; validMoves.Add(m); } break; } else { m.NewLocation = new Vector2((int)locationIndices.x, leftX); m.TakenPiece = null; validMoves.Add(m); } } for (int rightX = (int)locationIndices.y - 1; rightX >= 0; rightX--) { if (GameMaster.pieceBoard[(int)locationIndices.x, rightX] != null) { if (GameMaster.pieceBoard[(int)locationIndices.x, rightX].GetComponent <Piece>().color != color) { m.NewLocation = new Vector2((int)locationIndices.x, rightX); m.TakenPiece = null; validMoves.Add(m); } break; } else { m.NewLocation = new Vector2((int)locationIndices.x, rightX); m.TakenPiece = null; validMoves.Add(m); } } // colorValidMoves(); }