- 187
- 22
- CPU
- Ryzen 7 2700x
- Dissipatore
- Stock
- Scheda Madre
- Msi gaming plus max
- HDD
- Ssd 250gb + HDD 500gb + HDD 2tb
- RAM
- 16 gb Viper steel 3600mhz
- GPU
- Powercolor Radeon rx 580 8gb
- Monitor
- Samsung 24" curvo
- PSU
- Riotoro 500w
- Case
- Cooler master Masterbox mb511 nero
- OS
- Win 10
Salve, per l'università sto facendo un progetto in cui devo ricreare il gioco del monopoli digitalizzato, in java (un po' semplificato rispetto il gioco originale).
Sto avendo però difficoltà nella gestione dei round per ogni giocatore: la mia idea era quella di creare un'unica finestra di gioco su cui per ogni turno veniva reso visibile il pannello relativo al turno di quel giocatore per poi sparire quando il turno è finito per far comparire quello del giocatore successivo, solo che il pannello del turno non compare mai.
Da quello che ho potuto capire dopo vari tentativi, modifiche e debug, è che è come se venisse ignorato il metodo "setVisible()" per poi essere eseguito solo alla fine del metodo principale "startRounds()" nonostante stia nel mezzo, quindi il "while(round.isVisible())" manda in loop infinito il codice.
Se qualcuno può aiutarmi, dirmi dove sbaglio, come correggere, perchè sono giorni che sono bloccato e non posso andare avanti con il progetto senza risolvere questo problema.
Se serve il codice di altre classi o altri chiarimenti basta chiedere. Grazie in anticipo.
Ecco il codice:
Sto avendo però difficoltà nella gestione dei round per ogni giocatore: la mia idea era quella di creare un'unica finestra di gioco su cui per ogni turno veniva reso visibile il pannello relativo al turno di quel giocatore per poi sparire quando il turno è finito per far comparire quello del giocatore successivo, solo che il pannello del turno non compare mai.
Da quello che ho potuto capire dopo vari tentativi, modifiche e debug, è che è come se venisse ignorato il metodo "setVisible()" per poi essere eseguito solo alla fine del metodo principale "startRounds()" nonostante stia nel mezzo, quindi il "while(round.isVisible())" manda in loop infinito il codice.
Se qualcuno può aiutarmi, dirmi dove sbaglio, come correggere, perchè sono giorni che sono bloccato e non posso andare avanti con il progetto senza risolvere questo problema.
Se serve il codice di altre classi o altri chiarimenti basta chiedere. Grazie in anticipo.
Ecco il codice:
Java:
package it.unimol.monopoli.gui;
import java.awt.Dimension;
import java.io.IOException;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import it.unimol.monopoli.app.Contract;
import it.unimol.monopoli.app.Game;
import it.unimol.monopoli.app.Player;
public class GameFrame extends JFrame{
private List<Player> players;
private Game game;
public GameFrame(Game game) {
this.setTitle("Monopoli");
this.setMinimumSize(new Dimension(1000,1000));
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.game = game;
this.players = this.game.getPlayers();
}
public void startRounds() {
boolean exit = false;
do {
for (Player player : players) {
//problema:
if(player.getPrison() == false) {
RoundPanel round = new RoundPanel(player, game.getContracts());
this.add(round);
round.setVisible(true);
while(round.isVisible());
this.remove(round);
}
else {
RoundPrisonPanel roundPrison = new RoundPrisonPanel(player, game.getContracts());
this.add(roundPrison);
roundPrison.setVisible(true);
while(roundPrison.isVisible());
this.remove(roundPrison);
}
if(player.getMoney() <= 0) {
players.remove(player);
JOptionPane.showMessageDialog(
this,
"Il giocatore " + player.getName() + " è stato eliminato!",
"Eliminato",
JOptionPane.INFORMATION_MESSAGE
);
}
}
if(players.size() > 1) {
try {
game.saveGame();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int result = JOptionPane.showConfirmDialog(null, "Round finito, continuare? ");
if(result == 1)
exit = true;
}
} while(!exit && players.size() >= 1);
String winner = "";
if(players.size() == 1)
winner = players.get(0).getName();
else {
int max = 0;
for (Player player : players) {
if(player.getMoney() > max)
winner = player.getName();
}
}
JOptionPane.showMessageDialog(
this,
"Il vincitore è " + winner + "!",
"Game Over",
JOptionPane.INFORMATION_MESSAGE
);
}
}