/// <summary> /// Moves a piece from the given space to the other space /// </summary> /// <param name="moveTo"> Space on board where the player is going to move their piece </param> /// <param name="moveFrom"> Space on board where the player is moving from </param> public void movePiece(SpaceClass moveTo, SpaceClass moveFrom, ref bool capturedPiece) { moveTo.setPiece(moveFrom.getPiece()); moveFrom.pieceNull(); capturedPiece = false; //Takes away from the correct player's pieceCount if a capture happened if (capturedSpace != null) { capturedSpace.pieceNull(); if (curPlayer == DriverForm.p1) { DriverForm.p2.lostPiece(false); capturedPiece = true; } else if (curPlayer == DriverForm.p2) { DriverForm.p1.lostPiece(false); capturedPiece = true; } } }
/// <summary> /// Determines if where the player clicked is a valid end location /// for a movement. /// </summary> /// <param name="moveTo"> Space on board where the player is going to move their piece </param> /// <param name="moveFrom"> Space on board where the player is moving from </param> /// <param name="curPlayer"> The player currently moving their piece </param> /// <returns></returns> public Boolean isValidMove(SpaceClass moveTo, SpaceClass moveFrom) { capturedSpace = null; jumpedSpace = null; if (moveTo.hasPiece()) //Cant move to a space with a piece on it { return(false); } else if (!moveFrom.getPiece().getIsKing()) //Non-king move { //These 2 else ifs are to prevent the pieces from going backwards if (curPlayer == DriverForm.p1 && moveTo.getRow() < moveFrom.getRow()) { return(false); } else if (curPlayer == DriverForm.p2 && moveTo.getRow() > moveFrom.getRow()) { return(false); } //This would be a valid "slide" move else if ((Math.Abs(moveTo.getRow() - moveFrom.getRow()) == 1) && (Math.Abs(moveTo.getCol() - moveFrom.getCol()) == 1)) { return(true); } //This would be a valid "jump" move else if ((Math.Abs(moveTo.getRow() - moveFrom.getRow()) == 2) && (Math.Abs(moveTo.getCol() - moveFrom.getCol()) == 2)) { if (curPlayer == DriverForm.p1) { if (moveTo.getCol() < moveFrom.getCol()) { jumpedSpace = hiddenBoard[moveTo.getRow() - 1, moveTo.getCol() + 1]; } else if (moveTo.getCol() > moveFrom.getCol()) { jumpedSpace = hiddenBoard[moveTo.getRow() - 1, moveTo.getCol() - 1]; } if (jumpedSpace.hasPiece() && jumpedSpace.getPiece().getPlayer() == DriverForm.p2) { capturedSpace = jumpedSpace; return(true); } } else if (curPlayer == DriverForm.p2) { if (moveTo.getCol() < moveFrom.getCol()) { jumpedSpace = hiddenBoard[moveTo.getRow() + 1, moveTo.getCol() + 1]; } else if (moveTo.getCol() > moveFrom.getCol()) { jumpedSpace = hiddenBoard[moveTo.getRow() + 1, moveTo.getCol() - 1]; } if (jumpedSpace.hasPiece() && jumpedSpace.getPiece().getPlayer() == DriverForm.p1) { capturedSpace = jumpedSpace; return(true); } } } //End jump move } //End non-king move else if (moveFrom.getPiece().getIsKing()) //king move { //Slide move if ((Math.Abs(moveTo.getRow() - moveFrom.getRow()) == 1) && (Math.Abs(moveTo.getCol() - moveFrom.getCol()) == 1)) { return(true); } //Jump move else if ((Math.Abs(moveTo.getRow() - moveFrom.getRow()) == 2) && (Math.Abs(moveTo.getCol() - moveFrom.getCol()) == 2)) { if (moveTo.getCol() < moveFrom.getCol() && moveTo.getRow() < moveFrom.getRow()) { jumpedSpace = hiddenBoard[moveTo.getRow() + 1, moveTo.getCol() + 1]; } else if (moveTo.getCol() > moveFrom.getCol() && moveTo.getRow() > moveFrom.getRow()) { jumpedSpace = hiddenBoard[moveTo.getRow() - 1, moveTo.getCol() - 1]; } else if (moveTo.getCol() > moveFrom.getCol() && moveTo.getRow() < moveFrom.getRow()) { jumpedSpace = hiddenBoard[moveTo.getRow() + 1, moveTo.getCol() - 1]; } else if (moveTo.getCol() < moveFrom.getCol() && moveTo.getRow() > moveFrom.getRow()) { jumpedSpace = hiddenBoard[moveTo.getRow() - 1, moveTo.getCol() + 1]; } if (curPlayer == DriverForm.p1) { if (jumpedSpace.hasPiece() && jumpedSpace.getPiece().getPlayer() == DriverForm.p2) { capturedSpace = jumpedSpace; return(true); } } else if (curPlayer == DriverForm.p2) { if (jumpedSpace.hasPiece() && jumpedSpace.getPiece().getPlayer() == DriverForm.p1) { capturedSpace = jumpedSpace; return(true); } } } //End jump move } //End king move return(false); }