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