Quantcast
Channel: Programming Forums
Viewing all articles
Browse latest Browse all 51036

HELP ! START A MULTI LEVEL JAVA GAME -WITH MULTIPLE JPANEL

$
0
0
Hi all,

need help! The following class doesn't give errors but doesn't draw from this class extending a Jpanel.
Moreover I'd like a multi-level game, so I was thinking to use a Jpanel array in this following class

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;


public class AreaDiGioco extends JPanel {
	
	
	    public static Player player;

	    public AreaDiGioco() {
	     
	    	player = new Player(300, 300);

	    }

	    public void paint(Graphics g) {
	        player.x++;
	        g.setColor(Color.white);
	        g.fillRect(player.x, player.y, 32, 32);
	    }

	    public void start(){
	        loop.start();
	    }

	    public void gameLoop() {
	        repaint();
	    }

	    @Override
	    public void paintComponent(Graphics g) {
	        g.setColor(Color.BLACK);
	        g.fillRect(0, 0, getWidth(), getHeight());
	        g.setColor(Color.yellow);
	        g.drawRect(30, 30, 30, 30);
	    }
	    
	    
	}
//.....

	public void Restart()
	{*/
//		protected void paintComponent (Graphics g, boolean started)
//		{

//		    if (started = true){
//			g.setColor(Color.RED);
//	    GameLogic = new GameBoardLogic();
//	    removeAll();
//	    repaint();
//	}
	    /*
	public Boolean StartGame(Boolean B)/>/>
	{
	    if(started=true)
	        return true;
	    else
	        return false;
	}
	
		protected void paintComponent (Graphics g)
		{

			//ImageIcon Pantera = new ImageIcon(this.getClass().getResource("/Pantera-small3.gif"));
		    




Here it follows the Java code for a Java game that draws on the just mentioned Jpanel.
The point is that it doesn't work with the just written AreaDiGioco.java and I need to do a multi-level game
so I was thinking to a Jpanel array to be selected via a

import java.awt.*;            // per l'import di EventQueue, getContentPane()
import javax.swing.*;         // per l'import di JOptionPane, JFrame (e la JMenubar), JButton, JLabel, JTextField, JTextArea;
import java.awt.event.*;      // per l'import di ActionListener, ItemListener, ActionEvent, ItemEvent;
import java.io.*;             // per l'import di FileReader, FileWriter, BufferedReader,BufferedWriter, IOException;
//import java.util.Observer;    
import javax.swing.JFileChooser;
import javax.swing.filechooser.*;  
import javax.swing.filechooser.FileFilter; // per l'import di FileNameExtensionFilter; FileSystemView; FileFilter;



public class MainControlMarioGUI4 extends JFrame implements ActionListener {

	/**
	 * La classe principale 
	 */
	//
	private static final long serialVersionUID = 1L;
	
	// Dichiarazione di variabili         
    
	public JPanel AreaDiGioco;
    //private JPanel GameBoard;
    //private JPanel Tela;
    private JTextArea AreaDiTesto;
    private JScrollPane AreaTestoLunga;
    private JMenuBar MenuBar;
    private JMenu MenuTendina, JMenu_ApriGioco, JMenu_SalvaGioco, MenuAbout;
    private JMenuItem MenuItem_NuovoGioco, 
            JMenuItem_ApriPercorsoPredefinito,  JMenuItem_ApriDaPercorso,
	        JMenuItem_SalvaPercorsoPredefinito, JMenuItem_SalvaInPercorso, 
			JMenuItem_EsciDaGioco, JMenuItem_About;
	public JPopupMenu.Separator jSeparator1,jSeparator2,jSeparator3, jSeparator4,jSeparator5;
    int PopUpAvvio, PopUpUscita;
    
   
   // valore compreso tra 0 e 1
   int n = (int)(Math.random()*2);
   // valore compreso tra 0 e 10
    int m = (int)(Math.random() * 10);
    
    
    //--------------------------Definizione delle variabili di giocatore -----------------
    
    private Personaggio personaggio;
    private boolean playerUp = true;
    boolean playerDown = false;
    private boolean playerLeft = false;
    private boolean playerRight = false;
    private boolean rightOn = false;
    private boolean leftOn = false;
    private boolean upOn = false;
    private boolean downOn = false;
    private ImageIcon Pantera;
    
    boolean leftTrue = true;
    boolean rightTrue = true;
    boolean upTrue = true;
    boolean downTrue = true;
    boolean level1 = true;
    boolean level1wall = true;
    private int width;
    private int height;
  	private ComponentListener l;
    int x,y, dx, dy;

	private Object Level;
    
 //---------------------------------------------------------------------------
	

	/**
     * La classe crea un JFrame chiamato MainControlMarioGUI
     * 
     */
    public MainControlMarioGUI4() {
        
    	inizializzoComponenti();
    }

    /**
     * Questo metodo chiamato inizializza tutti i principali componenti del Frame:
     * un JPanel comprensivo di Canvas come area di gioco (nominate ripettivamente "AreaDiGioco" e "Tela"),
     * una JmenuBar per l'interazione con un file che contiene i dati della partita,
     * una JTextArea per la visualizzazione di cio' che accade ai file-partita creati (Apri, Salva, Esci).  
     * Il Metodo inizializzoComponenti non restituisce alcun valore, ma definisce e aggiunge i vari componenti 
     * all'interno del Frame: L'Area di Gioco e' un JPane e relativa Canvas, 
     * mentre L' Area di Testo e' un JTextArea con relativa JScrollArea associata 
     */
    //@SuppressWarnings("unchecked")
     
    private void inizializzoComponenti() {
        GridBagConstraints gridBagConstraints;

     // dichiarazioni dei componenti del Frame tramite variabili istanza:
     // Panel e relativa Canvas che verranno poi posizionati a sx del Frame e JTextArea col relativo JScrollPane a dx 
    
        AreaDiGioco = new JPanel();
        AreaTestoLunga = new JScrollPane();
        AreaDiTesto = new JTextArea();
        personaggio = new Personaggio();
        
        
     // dichiarazioni dei componenti tramite variabili istanza della MenuBar :
     // Menu, MenuItem e relativi separatori vengono dichiarati ed associati alla MenuBar del Frame principale   
        MenuBar = new JMenuBar();
        MenuTendina = new JMenu();
        JMenu_ApriGioco = new JMenu();
        JMenu_SalvaGioco = new JMenu();
        MenuAbout = new JMenu();
        MenuItem_NuovoGioco = new JMenuItem();
        JMenuItem_ApriPercorsoPredefinito = new JMenuItem();
        JMenuItem_ApriDaPercorso = new JMenuItem();
        JMenuItem_SalvaPercorsoPredefinito = new JMenuItem();
        JMenuItem_SalvaInPercorso = new JMenuItem();
        JMenuItem_EsciDaGioco = new JMenuItem();
        JMenuItem_About = new JMenuItem();
        jSeparator1 = new JPopupMenu.Separator();
        jSeparator2 = new JPopupMenu.Separator();
        jSeparator3 = new JPopupMenu.Separator();
        jSeparator4 = new JPopupMenu.Separator();
        jSeparator5 = new JPopupMenu.Separator();

        
        //definizioni delle proprieta' per il Frame principale
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setTitle("Pantera 1.0 - Progetto di Mario Profumo matr. 1506204");
        setMinimumSize(new Dimension(1200, 600));
        setName("frame"); 
        setResizable(false);
        getContentPane().setLayout(new GridBagLayout());

        //definizioni delle proprieta' per il JPanel
        AreaDiGioco.setBackground(new Color(204, 255, 255));
        AreaDiGioco.setAlignmentX(0.0F);
        AreaDiGioco.setAlignmentY(0.0F);
        AreaDiGioco.setMaximumSize(new Dimension(800, 600));
        AreaDiGioco.setMinimumSize(new Dimension(800, 600));

        AreaDiGioco.setFocusable(true);
       //AreaDiGioco.addKeyListener(this);
        
        //definizioni delle proprieta' per il JPanel e del LayoutManager GroupLayout
        GroupLayout AreaDiGiocoLayout = new GroupLayout(AreaDiGioco);
        AreaDiGioco.setLayout(AreaDiGiocoLayout);
        AreaDiGiocoLayout.setHorizontalGroup(
                AreaDiGiocoLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGap(0, 800, Short.MAX_VALUE)
            );
            AreaDiGiocoLayout.setVerticalGroup(
                AreaDiGiocoLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGap(0, 610, Short.MAX_VALUE)
            );
     
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.anchor = GridBagConstraints.FIRST_LINE_START;
        getContentPane().add(AreaDiGioco, gridBagConstraints);
        
               

       //definizioni delle proprieta' per il JScrollPane
        AreaTestoLunga.setMaximumSize(new Dimension(400, 600));
        AreaTestoLunga.setMinimumSize(new Dimension(400, 600));
        AreaTestoLunga.setPreferredSize(new Dimension(400, 600));

       //definizioni delle proprieta' per la JTextArea       
        AreaDiTesto.setColumns(20);
        AreaDiTesto.setRows(5);
        AreaDiTesto.setMaximumSize(new Dimension(400, 600));
        AreaDiTesto.setMinimumSize(new Dimension(400, 600));
        AreaDiTesto.setPreferredSize(new Dimension(400, 600));
        AreaDiTesto.setRequestFocusEnabled(false);
        AreaTestoLunga.setViewportView(AreaDiTesto);
        
       // si aggiunge la JtextArea definita in un'area di
        getContentPane().add(AreaTestoLunga, new GridBagConstraints());
        
        
        // Aggiungiamo il testo a JMenu,  per i controlli su file di gioco
        MenuTendina.setText("Controlli sul file di gioco");

        MenuItem_NuovoGioco.setText("Nuova partita");
        MenuItem_NuovoGioco.addActionListener(this);
        MenuItem_NuovoGioco.setActionCommand("Avvia partita"); 
   

        JMenu_ApriGioco.setText("Apri partita");

        JMenuItem_ApriPercorsoPredefinito.setText("apri da percorso predefinito");
        JMenuItem_ApriPercorsoPredefinito.addActionListener(this);
        JMenuItem_ApriPercorsoPredefinito.setActionCommand("Ricarica partita predefinita");
        
        JMenuItem_ApriDaPercorso.setText("apri da percorso specificato");
        JMenuItem_ApriDaPercorso.addActionListener(this);
        JMenuItem_ApriDaPercorso.setActionCommand("Ricarica partita da percorso");
        
        JMenu_ApriGioco.add(JMenuItem_ApriPercorsoPredefinito);
        JMenu_ApriGioco.add(jSeparator2);
        JMenu_ApriGioco.add(JMenuItem_ApriDaPercorso);
                
        MenuTendina.add(MenuItem_NuovoGioco);
        MenuTendina.add(jSeparator1);
        

        MenuTendina.add(JMenu_ApriGioco);
        MenuTendina.add(jSeparator3);

        JMenu_SalvaGioco.setText("Salva partita");

        JMenuItem_SalvaPercorsoPredefinito.setText("salva da percorso predefinito");
        JMenuItem_SalvaPercorsoPredefinito.addActionListener(this);
        JMenuItem_SalvaPercorsoPredefinito.setActionCommand("Salva percorso predefinito"); 
        
        JMenu_SalvaGioco.add(JMenuItem_SalvaPercorsoPredefinito);
        JMenu_SalvaGioco.add(jSeparator4);

        JMenuItem_SalvaInPercorso.setText("salva da percorso specificato");
        JMenuItem_SalvaInPercorso.addActionListener(this);
        JMenuItem_SalvaInPercorso.setActionCommand("Salva percorso specificato"); 
        
        JMenu_SalvaGioco.add(JMenuItem_SalvaInPercorso);

        MenuTendina.add(JMenu_SalvaGioco);
        MenuTendina.add(jSeparator5);

        JMenuItem_EsciDaGioco.setText("Esci da gioco");
        JMenuItem_EsciDaGioco.addActionListener(this);
        JMenuItem_EsciDaGioco.setActionCommand("Chiudi"); 
        MenuTendina.add(JMenuItem_EsciDaGioco);

        MenuBar.add(MenuTendina);

        MenuAbout.setText("          A riguardo...");

        JMenuItem_About.setText("Autore & ringraziamenti");
        JMenuItem_About.addActionListener(this);
        JMenuItem_About.setActionCommand("Pop-up Mario"); 
        
        MenuAbout.add(JMenuItem_About);

        MenuBar.add(MenuAbout);

        setJMenuBar(MenuBar);
        
        pack();
    }   
  
    // --- Fine Definizione JMenuBar e relativi JMenu/ JMenuitem & Inizio delle ActionPerformed sul file partita -------
    // il metodo ActionPerformed della classe ActionListener svolge l'operazione desiderata. 
    // La super-classe ActionEvent (stesse API java.awt.event.*) ne gestisce l'attivazione
    // il ciclo condizionale sul metodo getActionCommand proviene dalle stesse API appena menzionate
    // e fa quello che dice
    
        public void actionPerformed(ActionEvent evt) {
        // visualizza a video nella JTextArea le opzioni selezionate dai Jmenu e JmenuItem
    	// tramite il metodo Append di javax.swing.JtextArea
    	AreaDiTesto.append(evt.getActionCommand() + "  Selezionato \n");
             
        if(evt.getActionCommand().equals("Avvia partita")) {   // confronto tra stringhe
        	   // assegna JOptionPane.showConfirmDialog ad una variabile intera 
  	           // e ne fa un ciclo condizionale piu' interno 
  	           int PopUpAvvio = JOptionPane.showConfirmDialog(null,"Vuoi iniziare una nuova partita?");
  	           // se premi l'opzione "YES" del pop-up apre un nuovo mondo virtuale
  	           if (PopUpAvvio ==JOptionPane.YES_OPTION) {
  		           // Avvia la locazione del nuovo mondo virtuale 
  	        	 
  	        	  AreaDiGioco=new AreaDiGioco(); 
  	     
  	        	   
  	        	//File partitaDefault = new File(this.getClass().getResource("/Pantera1.0.txt").getFile()); 
  	      
  	     /*   try {
  	    	     
					Input input = PanteraFileFormat.readFile(partitaDefault);
					AreaDiTesto.append("Acquisizione del file partita di default in corso\n");
				} catch (IOException ex) {
				    AreaDiTesto.append("L\'operazione appena compiuta ha generato la " + ex +"\n");
					ex.printStackTrace();
				   }  	        	   
  	        	 	*/        	
  	        	 
  	         }if (PopUpAvvio ==JOptionPane.NO_OPTION) {
  	               // se premi l'opzione "NO" del pop-up stampa la deselezione del JMenuItem "Avvia partita"
  	    	       AreaDiTesto.append(evt.getActionCommand() + " Deselezionato \n");
  	   	           }
           } else if(evt.getActionCommand().equals("Ricarica partita predefinita")) { // confronto tra stringhe
        	   JFileChooser chooser = new JFileChooser();
        	   FileSystemView view = chooser.getFileSystemView();
        	   // la lettura del file partita del tipo "Monkey Island.txt", compreso lo scarto dei commenti
        	   
        	   AreaDiTesto.append("Selezionato <Ricarica Partita> dal percorso " +  view.getDefaultDirectory());
        	   AreaDiTesto.append("\n");
        	  
        	   try {
           	    JFileChooser PrendiFile = new JFileChooser();
           	   PrendiFile.setFileFilter(new TxtFileFilter());

           	    int n = PrendiFile.showOpenDialog(this);
                         if (n == JFileChooser.APPROVE_OPTION) {
                       	    AreaDiTesto.append("Il file selezionato e\': " + PrendiFile.getSelectedFile().getName());
                       	    File partita = PrendiFile.getSelectedFile();
                            BufferedReader read = new BufferedReader(new FileReader(partita));
                            String line = read.readLine();
                               while(line != null) {
                                    String LineNoComment = line.split("\\#")[0]; // prende la parte di stringa prima del simbolo "#"   
                            	   // AreaDiTesto.append(LineNoComment);   questa riga era stata introdotta per debug tramite AreaDiTesto                                   
                                  line = read.readLine();
                                  }
                               read.close();
                           }
                 } catch (Exception ex) {
           	    AreaDiTesto.append("L\'operazione appena compiuta ha generato la " + ex +"\n");
                 }
        
        	   
        	   
           } else if(evt.getActionCommand().equals("Ricarica partita da percorso")) { // confronto tra stringhe
              
        	   JFileChooser chooser = new JFileChooser();
        	   FileSystemView view = chooser.getFileSystemView();
        	   // la lettura del file partita del tipo "Monkey Island.txt", compreso lo scarto dei commenti
        	   
        	   AreaDiTesto.append("Selezionato <Ricarica Partita> dal percorso " +  view.getDefaultDirectory()+"\n");
        	
        	   try {
           	    JFileChooser PrendiFile = new JFileChooser();
           	   PrendiFile.setFileFilter(new TxtFileFilter());

           	    int n = PrendiFile.showOpenDialog(this);
                         if (n == JFileChooser.APPROVE_OPTION) {
                       	    AreaDiTesto.append("Il file selezionato e\': " + PrendiFile.getSelectedFile().getName());
                       	    File partita = PrendiFile.getSelectedFile();
                       	    Input input = PanteraFileFormat.readFile(partita); 
                       	    // importante! Acquisizione del file dalla classe PanteraFileFormat
                            BufferedReader read = new BufferedReader(new FileReader(partita));
                            String line = read.readLine();
                               while(line != null) {
                                    //String LineNoComment = line.split("\\#")[0]; // prende la parte di stringa prima del simbolo "#"   
                            	   // AreaDiTesto.append(LineNoComment);   questa riga era stata introdotta per debug tramite AreaDiTesto                                   
                                   AreaDiTesto.append("Acquisizione del file in corso");
                            	   line = read.readLine();
                                  }
                               read.close();
                           }
                 } catch (Exception ex) {
           	    AreaDiTesto.append("L\'operazione appena compiuta ha generato la " + ex +"\n");
                 }
        	   
           } else if(evt.getActionCommand().equals("Salva percorso predefinito")) { // confronto tra stringhe
        	   JFileChooser chooser = new JFileChooser();
        	   FileSystemView view = chooser.getFileSystemView();
        	   AreaDiTesto.append("Selezionato <Salva Partita> dal percorso " +  view.getDefaultDirectory() + "\n");
        	   
        	
        	   
        	   
           } else if(evt.getActionCommand().equals("Salva percorso specificato")) {  // confronto tra stringhe
              // xxxx
        	   JFileChooser chooser = new JFileChooser();
        	   FileSystemView view = chooser.getFileSystemView();
        	   AreaDiTesto.append("Selezionato <Ricarica Partita> dal percorso " +  view.getDefaultDirectory()+"\n");
           	
        	   try {
           	    JFileChooser PrendiFile = new JFileChooser();
           	   PrendiFile.setFileFilter(new TxtFileFilter());

           	    int n = PrendiFile.showOpenDialog(this);
                         if (n == JFileChooser.APPROVE_OPTION) {
                       	    AreaDiTesto.append("Il file selezionato e\': " + PrendiFile.getSelectedFile().getName());
                       	    File partita = PrendiFile.getSelectedFile();
                       	    Input output = PanteraFileFormat.readFile(partita); 
                       	    // importante! Acquisizione del file dalla classe PanteraFileFormat
                            BufferedReader read = new BufferedReader(new FileReader(partita));
                            String line = read.readLine();
                               while(line != null) {
                                    //String LineNoComment = line.split("\\#")[0]; // prende la parte di stringa prima del simbolo "#"   
                            	   // AreaDiTesto.append(LineNoComment);   questa riga era stata introdotta per debug tramite AreaDiTesto                                   
                                   AreaDiTesto.append("Acquisizione del file in corso");
                            	   line = read.readLine();
                                  }
                               read.close();
                           }
                 } catch (Exception ex) {
           	    AreaDiTesto.append("L\'operazione appena compiuta ha generato la " + ex +"\n");
                 }
           } else if(evt.getActionCommand().equals("Chiudi")) {  // confronto tra stringhe
        	      // assegna JOptionPane.showConfirmDialog ad una variabile intera 
        	      // e ne fa un ciclo condizionale pi� interno 
        	      int PopUpUscita = JOptionPane.showConfirmDialog(null,"Vuoi realmente chiudere il Gioco?");
        	      //se premi l'opzione "YES" del pop-up chiude il JFrame principale
        	      // sarebbe possibile far risalvare la partita prima di uscire
        	      if (PopUpUscita ==JOptionPane.YES_OPTION) {
        		      System.exit(0);  
        		      }
        	      if (PopUpUscita ==JOptionPane.NO_OPTION) {
        	      // se premi l'opzione "NO" del pop-up stampa la deselezione del JMenuItem "Chiudi"
        	    	  AreaDiTesto.append(evt.getActionCommand() + " Deselezionato \n");
        	   	      }
           } else if (evt.getActionCommand().equals("Pop-up Mario")) {
        	           JOptionPane.showMessageDialog(null," Mario \"little Pantera\" Profumo \n matr. 15062042 \n " + "\n"+
        	             " esame di Metodologie di Programmazione \n"+ "primo canale  - " + " anno accademico 2012-2013 \n" +
        	             "\n"+ " ...si ringrazia per quanto appreso!  :)/>/> ", "Autore & ringraziamenti", JOptionPane.PLAIN_MESSAGE);
           }
       }
       
        
     // --------- Fine del metodo ActionPerformed della classe ActionListener &  ------------------------------------- 
     // --------- Inizio metodi per filtro txt apertura/salvataggio file partita -------------------------------------
        

       
	private class TxtFileFilter extends FileFilter {

        public boolean accept(File partita)  
          {  
            
             //  Converte in lower case prima del controllo di estensione  
             return (partita.getName().toLowerCase().endsWith(".txt")  ||  partita.isDirectory());  
          }  
      
        public String getDescription()  
          {  
            return "File di testo (*.txt)";  
          }
       }
         
	//----------------------------- movimenti del giocatore --------------------//
   
	
	

	
     // --------- Fine metodi per gestione finestra di gioco & Inizio del Main -------------------------------------------------------
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
       
    	// Schedula un job per il thread event-dispatching (tramite Java.awt anzich� Swing) 
    	// che crea la Graphical User Interface principale. Questo programma cercher�, 
    	// per quanto possibile, di usare l' API java.awt.* piuttosto che Javax.Swing 
    	// per evitare problemi nella gestione del Java Visual thread.
        EventQueue.invokeLater(new Runnable() {
           
        	// si e' appena creata un'interfaccia che implementa Runnable, rendendo il thread principale
        	// quello da cui gli altri thread  figlio verranno eventualmente  generati
        	public void run() {
            	 
            	 try {new MainControlMarioGUI4().setVisible(true);
    
            	 }catch(Exception e) {
                     e.printStackTrace();
                 }
            }
        });
    }


}
	


Viewing all articles
Browse latest Browse all 51036

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>