Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Aggiornare un immagine

  1. #1

    Aggiornare un immagine

    Salve ho un problema con il gioco che sto implementando: Forza4.. praticamente devo fare in modo che quando clicco sulla griglia che ho creato, mi appare un cerchio che mi occupi la posizione invocando un repaint(). Sto cercando di far questo in tutti i modi ma con scarsi risultati. vi allego il codice con la speranza che qualcuno riesca ad aiutarmi:
    codice:
    import java.awt.*;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import java.awt.geom.*;
    import java.net.URL;
    import javax.swing.*;
    
    class Piattaforma2 extends JPanel
    {
        private static JLabel labelUtente = new JLabel();
        final static int diametro = 100;
        final static int spazio = 15;
        private static int colonne = 7; // definiamo il numero di colonne
        private static int righe = 6; // definiamo il numero di righe
        private static Color[][] griglia;
        private static int turno = 0;
        private static Graphics2D g2;
        private static Graphics2D pedina;
        /*
         * definiamo le immagini delle pedine da dover porre all' interno della scacchiera 
         */
        URL urlR = getClass().getResource("../Immagini/rosso.png"); 
        URL urlG = getClass().getResource("../Immagini/giallo.png");
        private ImageIcon rossa = new ImageIcon(urlR);
        private ImageIcon gialla = new ImageIcon(urlG);
        
        private static String modificato;
        private static Color coloreGiocatore1; // definiamo il colore dell'utente
        private static Color coloreGiocatore2;
    
        public Piattaforma2()
        {        
            /*
             * Dobbiamo definire altri tre JPanel oppure solo label, due che identificano l'utente 
             * a cui tocca e un altro che fa una scansione del tempo
             */
            cominciaPartita();
            
            premiColonna();
            
            // qà qui definamo l'azione del mouse che con un click farà scendere la pallina (vedi MouseListener)
            //setPreferredSize (new Dimension(700,700)); // settare le immagini del JPanel
        }
    
        
        /*
         * definiamo un metodo all'interno del costruttore che si occuperà di far iniziare la partita
         */
        public void cominciaPartita()
        {
            griglia = new Color[colonne][righe];
            modificato = "no";
            /*
             * qui definire il label che stabilisce a chi tocca: 
             * LabelToccaUtente x = new LabelToccaUtente();
             * add(x);
             * la stessa cosa si deve fare per il timer
             */
            coloreGiocatore2 = Color.YELLOW;
            coloreGiocatore1 = Color.RED; // il primo a cominciare a giocare è l'utente con la pallina rossa        
            labelUtente.setIcon(rossa);
            labelUtente.setLocation(700, 400);        
            //this.repaint();
            //System.out.println("Comincia partita");
        }
        /*
         * definiamo l'immagine della griglia che ospiterà le pedine
         */
        public void paintComponent(Graphics g)
        {         
            super.paintComponent(g);
            //g.setColor(Color.BLUE);
            g2 = (Graphics2D) g;       
            g2.setColor(Color.BLUE);
            g2.fillRect(0, 0, getSize().width, getSize().height); // settare le dimensioni del panel
            /*
             *  disegniamo un rettangolo le cui dimensioni si adattano al pannello (ultimi due parametri)
             * e i primi due danno la posizione di partenza del rettangolo
             */
            for (int i=0; i<colonne; i++)
                {
                
                    for (int j=0; j< righe; j++)
                    {
                        g2.setColor(Color.WHITE);                
                        //definiamo il colore che deve avere l'ovale
                        /*
                         * disegniamo l'ovale che conterrà le pedine. Come coordianate affinchè possa ripetersi l'ovale 
                         * per il numero di volte che a noi serve, ci poniamo lo spazio
                         */   
                        g2.fillOval((spazio + (spazio + diametro)*i), (spazio + (spazio + diametro)*j) ,diametro, diametro);                    
                              
                }
            }
        }
        
        /*
         * definiamo che ci permetterà di premere la colonna e di far cadere la pedina
         */
        
        private void premiColonna()
        {
            Clicca clicca = new Clicca();
            this.addMouseListener(clicca); // il this si riferisce allo stesso JPanel che stiamo considerando
            //this.addMouseMotionListener(clicca);
           
        }
    
        private class Clicca implements MouseListener // è stato tolto il MouseMotionListener che ascolta gli spostamenti del mouse
        {  
            //private static int righe;
            private int colonna;
            private int riga;          
            /*
             * tra tutti i metodi che potevamo sovrascrivere si è deciso di sovrascrivere MouseMoved
             * o come alternativa MousePressed
             */
            @Override
            public void mouseClicked(MouseEvent evento)
            {
                /*
                 *  metodo fondamentale che serve ad individuare la posizione dell'azione che 
                 * stiamo per compiere 
                 */
                gioca(evento.getPoint()); 
            }
    
            @Override
            public void mousePressed(MouseEvent evento)
            {
               // throw new UnsupportedOperationException("Not supported yet.");
            }
    
            @Override
            public void mouseReleased(MouseEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
            }
    
            @Override
            public void mouseEntered(MouseEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
            }
    
            @Override
            public void mouseExited(MouseEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
            }
    
                    
            private void gioca(Point point) // serve a determinare la posizione
            {
                /*
                 * individuiamo la posizione della colonna
                 */            
                colonna = point.x / (diametro + spazio);            
                riga = point.y / (diametro + spazio);        
               // se la colonna non è occupata..
                if(griglia[colonna][riga]==null)
                {                               
                    // ..la occupo    
                    setDoubleBuffered(true); // salva la posizione 
                    for(riga = righe - 1; riga >= 0; riga--) // scansiono le righe dall' ultima alla prima e controllo....
                    {                   
                        //...se le riga di competenza non è occupata... 
                        if(griglia[colonna][riga]==null) 
                        {                       
                            //..la occupo con il colore con cui si inizia
                            griglia[colonna][riga] = coloreGiocatore1;
                            modificato = "si";
                            repaint();
                            /*
                             * qui praticamente dovrebbe andare il suono che si attiva quando viene inserita la pedina
                             */                                                
                                 
                            // METODO CHE CONTROLLA LO STATO DELLA PARTITA, DA IMPLEMENTARE
                            
                           /* if(turno==0)
                            {
                                if(coloreGiocatore1 == Color.RED)
                                {    
                                    // qui il label che andiamo a definire che decreta a ki tocca si illumina 
                                    // e l'altro si oscura
                                   labelUtente.setIcon(rossa);
                                }
                                else if(coloreGiocatore2 == Color.YELLOW)
                                {
                                    labelUtente.setIcon(gialla);
                                }
                            }
                            turno = 0; // riazzera */
                         }
                         }
                }            
            
        }
        
        }
            
        
        }

  2. #2

    Moderazione

    Le discussioni relative a Java non sono trattate qui, ma nell'apposita sottosezione.

    Provvedo a spostare il thread.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.