Bug num projecto

9 respostas
T

aloha…
Eu estou a fazer um tic tac toe e estou com um problema… tenho um botão new game que ao carregar a meio de um jogo ele volta ao inicio e dá para continuar a jogar… mas se o jogo acabar… houver empate ou vitória de algum dos jogadores… ao carregar ele não deixa mais jogar…
É complicado estar a postar aqui o código visto que é imenso… agradecia é se alguém pudesse dar uma olhada… eu mandava o código…

Desde já o meu muito obrigada a todos…

9 Respostas

danieldestro

Onde pegou este código?

T

Sou eu que estou a fazer

danieldestro

Olha este Tic-TaC-Toe que eu fiz e tente aproveitar o código:
http://javadavelha.dev.java.net

Jogo da Velha = Tic Tac Toe

Sami_Koivu

Bom, se você quer mandar para mim (por ex, via email, através da botão email no meu perfil), fique a vontade, posso dar uma olhada. Se conseguimos encontrar o problema, talvez podemos compartilhar aquele parte do código com a comunidade.

[]s,
Sami

T

já enviei… muito obrigada…

Sami_Koivu

Olá,

O problema é nesse trecho de código:

public void play() {
		playerIndex = 0;
		while (!myModel.gameOver()) {
			IPlayer p = myPlayers[playerIndex];
			playerIndex = 1 - playerIndex;
			myModel.makeMove(p);
		}
		String s = "Empate!";
		if (myModel.isWin(myModel.getBoard(), 'X')) {
			this.myScore = new Score(this.myPlayers[1]);
			myScore.updateScore();
			s = "GANHOU O X";
		} else if (myModel.isWin(myModel.getBoard(), 'O')) {
			this.myScore = new Score(this.myPlayers[1]);
			myScore.updateGame();
			s = "GANHOU O O";
		}
		javax.swing.JOptionPane.showMessageDialog(null, "Game Over " + s);
	}

Quando o jogo acabar (num empate ou vitória) a execução sai desse loop:

while (!myModel.gameOver()) {
			IPlayer p = myPlayers[playerIndex];
			playerIndex = 1 - playerIndex;
			myModel.makeMove(p);
		}

E nunca volta mais. Então, você poderia criar um loop na classe GaloMain onde você chama o método play, ou mesmo dentro do método play.

Dá para entender a minha explicação?

[]s,
Sami

T

Como eu posso resolver isso ? Eu percebi mais ou menos… e percebi o porque… tinha que alterar o while né ? Como eu alteraria isso ?

Isto deve-se ao gameOver() ser sempre true a partir dali né ? Como é que eu poderia alterar o gameOver() ?

Sami_Koivu

Na verdade você tem mil jeitos de resolver isso. O difícil é saber qual deles usar.

Você poderia mudar o método play par ser assim:

public void play() {
		playerIndex = 0;
		while (true) {
			IPlayer p = myPlayers[playerIndex];
			playerIndex = 1 - playerIndex;
			myModel.makeMove(p);
			if (myModel.gameOver()) {
				String s = "Empate!";
				if (myModel.isWin(myModel.getBoard(), 'X')) {
					this.myScore = new Score(this.myPlayers[1]);
					myScore.updateScore();
					s = "GANHOU O X";
				} else if (myModel.isWin(myModel.getBoard(), 'O')) {
					this.myScore = new Score(this.myPlayers[1]);
					myScore.updateGame();
					s = "GANHOU O O";
				}
				javax.swing.JOptionPane.showMessageDialog(null, "Game Over " + s);
				myModel.getBoard().reset();
			}
		}
	}

Mas isso não resolve todas as problemas. Dái, você deveria adicionar lógica para que o computador e o jogador humano não podem jogar quando o método “gameOver” retorna true.

[]s,
Sami

T

Muito obrigada… você tem sido impecável…

Criado 7 de julho de 2006
Ultima resposta 10 de jul. de 2006
Respostas 9
Participantes 3