public void play() {

		this.initialize(this.p1, this.p2);

		Location attempt;
		int currentPlayer = 1;

		// repeat until game ends (method will return)
		while (true) {

			if (this.moveAvailable(currentPlayer)) {

				this.output.println(this.board.toString());
				this.output.println("Player " + currentPlayer + ": Your Turn");

				if (currentPlayer == 1) {
					attempt = p1.placeTile(false);
				} else {
					attempt = p2.placeTile(false);
				}

				// repeat until valid move supplied
				boolean retry = false;
				do {
					if (this.isValid(attempt, currentPlayer)) {
						this.executeMove(attempt, currentPlayer);

						if (currentPlayer == 1) {
							p2.setResult(attempt);
						} else {
							p1.setResult(attempt);
						}

						retry = false;

					} else {

						retry = true;
						if (currentPlayer == 1) {
							attempt = p1.placeTile(true);
						} else {
							attempt = p2.placeTile(true);
						}
					}
				} while (retry);

				// if other player has move available, prompt to make another
				// move
			} else if (this.moveAvailable(currentPlayer % 2 + 1)) {
				this.output.println("Player " + currentPlayer
						+ " has no legal Moves.");

				if (currentPlayer == 1) {
					p2.setResult(null);
				} else {
					p1.setResult(null);
				}

			} else {
				// game is over with no legal moves left
				this.output.println(this.board.toString());
				this.output.println("GAME OVER!");
				this.scoreGame();

				break;
			}
			// switch players and continue
			currentPlayer = (currentPlayer % 2) + 1;
		}
	}