public boolean move(GameBlock srcPiece, GameBlock destPiece) {
		// If game over, move isn't made
		if (gameOver) {
			return false;
		}
		// Add copy of this game state to the history collection.
		gameHistory.add(this.copy());
		for (MoveData md : availableMoves) {
			// Loop through available moves
			// If the source block and destination block match, swap their data.
			if (md.getSrcPiece().equals(srcPiece)
					&& md.getDestPiece().equals(destPiece)) {
				// Swap an occupied block with empty block
				gameBoard.swapPiece(srcPiece, destPiece);
				// If move involved a jump then
				if (md.getJumpedPiece() != null) {
					// Decrement appropriate count
					if (md.getJumpedPiece().getOccupant() == BlockOccupant.PLAYER) {
						pieceCount_P1--;
					} else if (md.getJumpedPiece().getOccupant() == BlockOccupant.PLAYER2) {
						pieceCount_P2--;
					}
					// Remove the jumped piece
					gameBoard.eliminatePiece(md.getJumpedPiece());
					// If the jump can be continued, set the continuedJumpPiece
					// to source.
					if (isContJump(srcPiece, destPiece)) {
						continueJumpPiece = srcPiece;
					} else {
						continueJumpPiece = null;
					}
				}

				// If a jump can be continued, check the game state without
				// rotating turns.
				if (continueJumpPiece != null) {
					checkGameState(false);
				} else {
					// Check game state, rotate turns.
					checkGameState(true);
				}
				return true;
			}
		}
		// If move isn't available, remove the last history entry, and return
		// false.
		gameHistory.remove(gameHistory.size() - 1);
		return false;
	}