Salve a tutti!
Mi aiutate a capire cosa c'è che non va nel mio programma? In pratica il mio problema è che quando finisco una partita e voglio farne un'altra mi appare subito il JOptionPane con scritto che non ho colpito abbastanza bersagli.
1° parte Prova10codice:import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.lang.*; import java.util.*; import java.util.Formatter; class InfoFile{ private Formatter output; private Giocatore Player; InfoFile(Giocatore newPlayer){ Player = newPlayer; } public boolean ApriPerScrivere(){ try{ output = new Formatter(Player.getNome()); } catch(SecurityException securityException) { System.err.println( "Nessun accesso alla scrittura di questo file."); } catch(FileNotFoundException filesNotFoundException) { System.err.println( "Errore durante la creazione del file." ); } return (output != null); } public void ScriviSuFile(int k){ try{ ApriPerScrivere(); String testo = ""; Player.setPoints(Player.getPoints()+k); output.format("%d",Player.getPoints()); ChiudiFileScritto(); } catch(FormatterClosedException formatterClosedException){ System.err.println( "Errore durante la scrittura del file." ); return; } } public void ChiudiFileScritto(){ if (output != null) output.close(); } private Scanner input; public boolean ApriPerLeggere(){ try{ input = new Scanner(new File(Player.getNome())); } catch(FileNotFoundException exception){ System.err.println("Errore durante l'apertura del file."); } return(input != null); } public int Leggi(){ try{ ApriPerLeggere(); System.out.printf("%d", Player.getPoints()); ChiudiFileLetto(); } catch(NoSuchElementException elementException){ System.err.println( "File con struttura errata." ); input.close(); } catch(IllegalStateException stateException){ System.err.println( "Errore durante la lettura del file." ); } return Player.getPoints(); } public void ChiudiFileLetto() { if ( input != null ) input.close(); } }
codice:import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.Timer; import java.util.ArrayList; import java.awt.Component; import java.awt.Color; import java.awt.Graphics2D; import java.io.*; public class Prova10 extends JPanel{ public static void main(String [] args){ JFrame finestra = new MyFrame(); finestra.setVisible(true); finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } class MyFrame extends JFrame{ final int X = 530; final int Y = 530; private int schermoW, schermoH; private int MaxBersagli = 10; private GiocoPanel myGioco; private DatiPanel myDati; private int Stage, Obiettivi, Punti, Points; private double G = 40, raggio; public int Colpiti = 0; private Giocatore Player = new Giocatore(); private String NomeGiocatore; public Giocatore getGiocatore(){ return Player; } public MyFrame(){ Dimension schermo = Toolkit.getDefaultToolkit().getScreenSize(); schermoH = schermo.height; schermoW = schermo.width; setTitle("Shoot At It"); setResizable(false); setLocation( schermoW/2-250, schermoH/2-250); setSize(X,Y); JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); myGioco = new GiocoPanel(); myDati = new DatiPanel(1,0,0); myDati.setStage(1); myDati.setObiettivi(0); myDati.setPunti(0); myDati.refreshDati(); mainPanel.add(myGioco, BorderLayout.CENTER); mainPanel.add(myDati, BorderLayout.SOUTH); add(mainPanel); } class GiocoPanel extends JPanel implements MouseListener, MouseMotionListener{ Dimension myGioco = new Dimension(0, 0); Color myColor = new Color(22, 43, 86); //COLORE PANNELLO MYGIOCO; private Timer t,t1; private int tempo1 = 3000; private ArrayList<Bersaglio> bersagli; private ArrayList<Bersaglio> ElementiDaRimuovere; double x,y; private int creati; private double velocita = 2; InfoFile datiPlayer = new InfoFile(Player); File F = new File(Player.getNome()); public GiocoPanel(){ setPreferredSize(myGioco); setBackground(myColor); setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); MaxBersagli = 10; creati = 0; String NomePlayer = JOptionPane.showInputDialog("Inserisci il tuo nome"); Player.setNome(NomePlayer); if(F.exists()){ int Puntivecchi = datiPlayer.Leggi(); JOptionPane.showMessageDialog(null, "Vecchio Punteggio: "+Puntivecchi, "", JOptionPane.INFORMATION_MESSAGE); } else{ JOptionPane.showMessageDialog(null, "Benvenuto in Shoot-At-It "+Player.getNome()+"!\nLo scopo del gioco e' colpire piu' bersagli possibili.\nPer superare uno stage devi colpirne almeno 6.\nBuona partita!", "Benvenuto", JOptionPane.INFORMATION_MESSAGE ); } Genera(); t = new Timer(20, new ActionListener(){ public void actionPerformed(ActionEvent event){ if(bersagli != null){ for(int i=0; i<bersagli.size(); i++){ ((Bersaglio)(bersagli.get(i))).move(); if(Bordi(i)){ bersagli.remove(i); } repaint(); } } if(bersagli.size() == 0 && creati == MaxBersagli){ if(Colpiti < 6){ t.stop(); t1.stop(); int text = 0; if(F.exists()){ datiPlayer.ScriviSuFile(Player.getPoints()); text = datiPlayer.Leggi(); } else{ datiPlayer.ScriviSuFile(0); text=datiPlayer.Leggi(); } String controllo = ("Non hai colpito abbastanza bersagli!\nStage: "+Stage+ "\nObiettivi: "+Obiettivi+"\nPunti: "+Punti+"\nVuoi rigiocare?"); int risp = JOptionPane.showConfirmDialog(null, controllo, "Game Over", JOptionPane.YES_NO_OPTION ); if(risp == JOptionPane.YES_OPTION){ creati = 0; Stage = 1; Obiettivi = 0; Punti = 0; Points = 0; Colpiti = 0; velocita = 2; tempo1 = 3000; String NomePlayer1 = JOptionPane.showInputDialog("Inserisci il tuo nome"); Player = new Giocatore(); Player.setNome(NomePlayer1); t.start(); t1.start(); Genera(); myDati.refreshDati(); }else{ if(risp == JOptionPane.CLOSED_OPTION||risp == JOptionPane.NO_OPTION){ JOptionPane.showMessageDialog(null,"GAME OVER"); System.exit(0); } } }else{ Stage += 1; creati = 0; tempo1 -= 20; G -= 2.5 ; Obiettivi = 0; Colpiti = 0; velocita += 0.3; myDati.refreshDati(); Genera(); } } repaint(); } }); t.start(); t1.start(); addMouseListener(this); addMouseMotionListener(this); } public void Genera(){ bersagli = new ArrayList<Bersaglio>(); t1 = new Timer(tempo1, new ActionListener(){ public void actionPerformed(ActionEvent event){ if(creati<MaxBersagli){ bersagli.add(new Bersaglio(0,0)); ((Bersaglio)bersagli.get(bersagli.size()-1)).setSpeed(velocita); // Velocità Bersagli ((Bersaglio)(bersagli.get(bersagli.size()-1))).setCentro(CentroRandom()); creati++; } } }); t1.start(); } public Point2D CentroRandom(){ Point2D punto = new Point2D.Double(150,150); switch((int)Math.round(Math.random()*7+1)){ case 1: punto = new Point2D.Double(-30,-30); ((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(1,1); break; case 2: punto = new Point2D.Double(0,30+NRandom()); ((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(1,0); break; case 3: punto = new Point2D.Double(30+NRandom(),0); ((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(0,1); break; case 4: punto = new Point2D.Double(530,530); ((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(-1,-1); break; case 5: punto = new Point2D.Double(520,0); ((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(-1,1); break; case 6: punto = new Point2D.Double(-15,520); ((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(1,-1); break; case 7: punto = new Point2D.Double(30+NRandom(),485); ((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(0,-1); break; case 8: punto = new Point2D.Double(530,30+NRandom()); ((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(-1,0); break; } return punto; } public int NRandom(){ int nrand = (int)(Math.round((Math.random())*300+1)); return nrand; } public boolean Bordi(int i){ boolean controllo = false; if(bersagli.get(i).getCentro().getX() > 530+45) controllo = true; if(bersagli.get(i).getCentro().getX() < -45) controllo = true; if(bersagli.get(i).getCentro().getY() > 530+45) controllo = true; if(bersagli.get(i).getCentro().getY() < -45) controllo = true; return controllo; }

Rispondi quotando