Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    10

    [JAVA] Errore visualizzazione carte memory

    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 mille ecco il codice:

    Carta
    codice:
    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;
        }
    }
    Mazzo

    codice:
    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);
        }
    }
    View

    codice:
    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) {}
    
    }
    Main

    codice:
    package memory;
    
    /**
     *
     * @author Nicolò
     */
    public class Main {
    
        public static void main(String[] args) {
            Mazzo mazzo = new Mazzo();
            View v = new View(mazzo);
          
        }
    
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    No, mi spiace. Molte cose non sono affatto belle/appropriate.

    - Hai esteso JPanel e dentro la gestione di questo pannello hai creato un JFrame. Come design è discutibile.
    - Per fare del custom painting nei componenti Swing si dovrebbe gestire paintComponent(Graphics) ... non paint(Graphics) (e nemmeno update(Graphics) )
    - Hai creato un BufferedImage ma non ci disegni sopra nulla sopra. Anzi questa immagine (che quindi per default è nera) la disegni poi nel paint. Risultato: un bel nero.
    - L'uso di path assoluti es. D:/blabla "cablati" nel sorgente non è appropriato.
    - Molti nomi di metodi non seguono le convenzioni di denominazione standard.

    Queste sono solo le cose più evidenti e semplici che si notano.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    10
    capito...provvedo a sistemare..grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.