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
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
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();
}
}
});
}
}