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…
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
TelmaSofia
já enviei… muito obrigada…
Sami_Koivu
Olá,
O problema é nesse trecho de código:
publicvoidplay(){playerIndex=0;while(!myModel.gameOver()){IPlayerp=myPlayers[playerIndex];playerIndex=1-playerIndex;myModel.makeMove(p);}Strings="Empate!";if(myModel.isWin(myModel.getBoard(),'X')){this.myScore=newScore(this.myPlayers[1]);myScore.updateScore();s="GANHOU O X";}elseif(myModel.isWin(myModel.getBoard(),'O')){this.myScore=newScore(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:
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
TelmaSofia
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:
publicvoidplay(){playerIndex=0;while(true){IPlayerp=myPlayers[playerIndex];playerIndex=1-playerIndex;myModel.makeMove(p);if(myModel.gameOver()){Strings="Empate!";if(myModel.isWin(myModel.getBoard(),'X')){this.myScore=newScore(this.myPlayers[1]);myScore.updateScore();s="GANHOU O X";}elseif(myModel.isWin(myModel.getBoard(),'O')){this.myScore=newScore(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.