Ciao a tutti
ho appena terminato il mio programma di memory ma quando vado a farlo eseguire mi visualizza tutta una schermata nera senza farmi vedere le carte! Per testare ho inserito dei System.out.println per verificare l'effettivo funzionamento e tutto sembra andare..secondo me c'è un errore nel paint..però non riesco a capire se sia lì o altrove..qualcuno potrebbe darmi una mano?? grazie milleecco il codice:
Carta
Mazzocodice:package memory; import java.awt.Image; import java.awt.Toolkit; public class Carta { static final int VISIBILE = 1; static final int COPERTA = 0; static final int RIMOSSA = -1; private short stato; private short tipo; private Image immagine; private Image retro; public Carta(short simbolo){ tipo = simbolo; caricaImmagine(simbolo); stato = Carta.COPERTA; } public Image Immagine(){ if (stato == Carta.VISIBILE) return immagine; else if(stato == Carta.COPERTA) return retro; else return null; } public void volta(){ if (stato == Carta.VISIBILE) stato = Carta.COPERTA; else if(stato == Carta.COPERTA) stato = Carta.VISIBILE; } public void rimuovi(){ stato = Carta.RIMOSSA; } public void caricaImmagine(int n){ Toolkit kit = Toolkit.getDefaultToolkit(); immagine = kit.getImage("D:/carta"+n+".jpg"); retro = kit.getImage("D:/carta_retro.jpg"); System.out.println("caricata" + n); } public int simbolo() { return tipo; } public boolean Uguale(Carta compara) { if (compara.simbolo() == tipo) return true; else return false; } public boolean Rimossa() { if (stato == Carta.RIMOSSA) return true; else return false; } public boolean Visibile(){ if(stato == Carta.VISIBILE) return true; else return false; } }
Viewcodice:package memory; import java.util.ArrayList; import java.util.Collections; /** * * @author Nicolò */ public class Mazzo { private ArrayList<Carta> mazzo; private Carta carte[]; public Mazzo(){ carte = new Carta[16]; mazzo = new ArrayList<Carta>(16); mescola(); } public void mescola(){ int i = 0; for(int j = 0; j < 2; j++) for(short p = 1; p <= 8; p++){ carte[i] = new Carta(p); mazzo.add(i, carte[i]); i++; } Collections.shuffle(mazzo); } public Carta Carta(int i){ return mazzo.get(i); } }
Maincodice:package memory; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.MediaTracker; /** * * @author Nicolò */ public class View extends JPanel implements MouseListener { private final Mazzo mazzo; private BufferedImage immagine; private Graphics pittore; private JFrame frame; private MediaTracker segugio; private int preselezionata; /** * Viene richiamato ogni volta che un componetne grafico * viene aggiornato. */ @Override public void update(Graphics g) { paint(g); } public View (Mazzo m){ mazzo = m; segugio = new MediaTracker(this); immagine = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB); pittore = immagine.getGraphics(); this.addMouseListener(this); frame = new JFrame("Memory 1.0 - Nicolò Torreggiani"); frame.setBounds(20, 20, 400, 420); frame.setResizable(false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(null); frame.add(this); frame.setVisible(true); preselezionata = -1; Segui(); } @Override public void paint(Graphics g) { int i = 0; for (int x = 0; x < 4; x++){ for(int y = 0; y < 4; y++){ System.out.println("carta " + i + "\nx = " + x + "\ny = " + y + "\ntipo: " + mazzo.Carta(i).simbolo()); g.drawImage(mazzo.Carta(i).Immagine(), x*100, y*100, null); i++; } } g.drawImage(immagine, 0, 0, null); } public void Segui(){ for(int i = 0; i < 16; i++) segugio.addImage(mazzo.Carta(i).Immagine(), i); try{ segugio.waitForAll(); } catch(Exception e){} } public void mouseClicked(MouseEvent e) {} public void mousePressed(MouseEvent e) { int indice; int x, y; x = e.getX() / 100; y = e.getY() / 100; indice = 4 * x + y; System.out.println("Premuta " + indice); // Controllo che non sia stata rimossa if(!mazzo.Carta(indice).Rimossa()) { // Controllo che sia la prima carte selezionata if(preselezionata == -1) { System.out.println("Preselezione"); preselezionata = indice; mazzo.Carta(indice).volta(); } else{ // Controllo che non sia la stessa carta if(preselezionata == indice){ System.out.println("E' la stessa carta"); preselezionata = -1; mazzo.Carta(indice).volta(); } else { // Controllo che le due carte siano dello stesso tipo if(mazzo.Carta(preselezionata).Uguale(mazzo.Carta(indice))){ System.out.println("Uguali"); mazzo.Carta(preselezionata).rimuovi(); mazzo.Carta(indice).rimuovi(); preselezionata = -1; } else{ System.out.println("Diverse"); mazzo.Carta(preselezionata).volta(); mazzo.Carta(indice).volta(); preselezionata = -1; } } } } } public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} }
codice:package memory; /** * * @author Nicolò */ public class Main { public static void main(String[] args) { Mazzo mazzo = new Mazzo(); View v = new View(mazzo); } }

ecco il codice:
Rispondi quotando