Figura 1 - Estraggo la prima carta (l`ultima di un mazzo ordinato

Laoratorio di sistemi
Estrazione di una carta senza ripetizione
Java [NetBeans]
Figura 1 - Estraggo la prima carta (l'ultima di un mazzo ordinato)
Figura 2 - Michio il mazzo e ne estraggo un'altra
estrai_carta_v2.pdf
Pag. 1/9
Cozzetto ©
Laoratorio di sistemi
Estrazione di una carta senza ripetizione
Java [NetBeans]
Figura 3 - Una volta estratte tutte le carte, visualizzo un messaggio
/*
* Card.java
*
* Creato il 21 settembre 2006, 9.25
*
*
*/
package cartejavaapp;
import javax.swing.*;
/**
*
* @author Maurizio Cozzetto
*/
public class Card {
/** Creates a new instance of Carta */
private String valore;
private String seme;
// Gestisco l'immagine all'interno della classe
private ImageIcon img;
public Card()
{
// nessuna attività
}
estrai_carta_v2.pdf
Pag. 2/9
Cozzetto ©
Laoratorio di sistemi
Estrazione di una carta senza ripetizione
Java [NetBeans]
// Overloading del costruttore
public Card(String valore,String seme)
{
// Preparo una carta con valore e seme fissati, caricandone l'immagine
this.valore=valore;
this.seme=seme;
img = new javax.swing.ImageIcon(getClass().getResource("/img/"+this.getImageName()));
}
// Metodi getter
public String getValore() {
return valore;
}
public String getSeme() {
return seme;
}
// Restituisce la stringa contenente valore e seme, es. AC, asso di cuori
public String getCard() {
return valore+seme;
}
// Ritorna il nome del file immagine, es AC.png
public String getImageName() {
return getCard()+".png";
}
// Metodi setter
public void setSeme(String seme) {
this.seme=seme;
}
public void setValore(String valore) {
this.valore=valore;
}
// Ritorna un oggetto di tipo ImageIcon contenente l'immagine
public ImageIcon getImageCard() {
return img;
}
}
estrai_carta_v2.pdf
Pag. 3/9
Cozzetto ©
Laoratorio di sistemi
Estrazione di una carta senza ripetizione
Java [NetBeans]
/*
* Deck.java
*
* Creato il 21 settembre 2006, 9.29
*
*
*/
package cartejavaapp;
import javax.swing.JOptionPane;
/**
*
* @author Maurizio Cozzetto
*/
public class Deck {
private final int NUMERO_CARTE=52;
private Card[] deck=new Card[NUMERO_CARTE];
private final String[] semi={"C","Q","F","P"};
private final String[] valori={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
// Conta il numero di carte rimanenti
private int n = NUMERO_CARTE;
/** Creates a new instance of Deck */
public Deck() {
int k=0; int i; int j;
for (i=0; i<semi.length ; i++) {
String seme=new String(semi[i]);
for (j=0; j<valori.length ; j++) {
Card temp=new Card(valori[j],seme);
deck[k]=temp;
k++;
}
}
}
// Mischia il mazzo
public void shuffle() {
Card temp;
for (int i=0; i<n; i++) {
int j=(int)(Math.random()*(n-1));
temp=deck[i];
deck[i]=deck[j];
deck[j]=temp;
}
}
estrai_carta_v2.pdf
Pag. 4/9
Cozzetto ©
Laoratorio di sistemi
Estrazione di una carta senza ripetizione
Java [NetBeans]
// Estrae dal mazzo una carta a caso
public Card estrai() {
Card temp;
int p;
// Trovo un numero casuale compreso tra 0 e n-1
p=(int)(Math.random()*(n-1));
// Se ho ancora carte, scambio la carta di posto p con quella di posto n-1
if (n>0) {
temp=deck[p];
deck[p]=deck[n-1];
deck[n-1]=temp;
// Manca una carta per cui decremento n
n=n-1;
return temp;
} else {
return null;
}
}
// Estraggo le carte in sequenza a partire dalla più alta
public Card estraiInSequenza() {
Card temp;
n--;
if (n < 0) return null;
else return deck[n];
}
// Estrae la prima carta
public Card primaCarta() {
return deck[0];
}
public Card ultimaCarta() {
return deck[n-1];
}
}
estrai_carta_v2.pdf
Pag. 5/9
Cozzetto ©
Laoratorio di sistemi
Estrazione di una carta senza ripetizione
Java [NetBeans]
/*
* CarteJFrame.java
*
* Creato il 21 settembre 2006, 9.58
*/
package cartejavaapp;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JOptionPane;
/**
*
* @author Maurizio Cozzetto
*/
public class CarteJFrame extends javax.swing.JFrame {
private Deck d;
/** Creates new form CarteJFrame */
public CarteJFrame() {
// Inizializzo il mazzo di carte
d = new Deck();
// Preparo i componenti della finestra
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
private void initComponents() {
estraijButton = new javax.swing.JButton();
cartajLabel = new javax.swing.JLabel();
mischiaMazzojButton = new javax.swing.JButton();
EstraiInSequjButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Estrazione di una carta da gioco senza ripetizione");
estraijButton.setText("Estrai");
estraijButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
estraijButtonActionPerformed(evt);
}
});
cartajLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
mischiaMazzojButton.setText("Mischia mazzo");
mischiaMazzojButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mischiaMazzojButtonActionPerformed(evt);
estrai_carta_v2.pdf
Pag. 6/9
Cozzetto ©
Laoratorio di sistemi
Estrazione di una carta senza ripetizione
Java [NetBeans]
}
});
EstraiInSequjButton.setText("Estrai in sequenza");
EstraiInSequjButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
EstraiInSequjButtonActionPerformed(evt);
}
});
org.jdesktop.layout.GroupLayout layout = new
org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(cartajLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 380,
Short.MAX_VALUE)
.add(mischiaMazzojButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 380,
Short.MAX_VALUE)
.add(estraijButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 380,
Short.MAX_VALUE)
.add(EstraiInSequjButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 380,
Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(cartajLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 171,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(24, 24, 24)
.add(mischiaMazzojButton)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(estraijButton)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(EstraiInSequjButton)
.addContainerGap(13, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void EstraiInSequjButtonActionPerformed(java.awt.event.ActionEvent evt) {
// Estraggo le carte in sequenza partendo dall'ultima
Card c = d.estraiInSequenza();
// Se ci sono carte da estrarre, ne visualizzo l'immagine
if (c!=null) {
ImageIcon icon=c.getImageCard();
cartajLabel.setIcon(icon);
} else {
JOptionPane.showMessageDialog(null,"Non ci sono più carte da estrarre.");
estrai_carta_v2.pdf
Pag. 7/9
Cozzetto ©
Laoratorio di sistemi
Estrazione di una carta senza ripetizione
Java [NetBeans]
}
}
private void mischiaMazzojButtonActionPerformed(java.awt.event.ActionEvent evt) {
// Mischio il mazzo
d.shuffle();
}
private void estraijButtonActionPerformed(java.awt.event.ActionEvent evt) {
// Estraggo una carta a caso dal mazzo
Card c = d.estrai();
// Se ci sono carte da estrarre, preparo l'immagine
if (c!=null) {
ImageIcon icon=c.getImageCard();
cartajLabel.setIcon(icon);
} else {
JOptionPane.showMessageDialog(null,"Non ci sono più carte da estrarre.");
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new CarteJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton EstraiInSequjButton;
private javax.swing.JLabel cartajLabel;
private javax.swing.JButton estraijButton;
private javax.swing.JButton mischiaMazzojButton;
// End of variables declaration
}
estrai_carta_v2.pdf
Pag. 8/9
Cozzetto ©
Laoratorio di sistemi
Estrazione di una carta senza ripetizione
Java [NetBeans]
/*
* Main.java
*
* Creato il 21 settembre 2006, 9.24
*
*/
package cartejavaapp;
/**
*
* @author Maurizio Cozzetto
*/
public class Main {
/** Creates a new instance of Main */
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
CarteJFrame f = new CarteJFrame();
f.setVisible(true);
}
}
estrai_carta_v2.pdf
Pag. 9/9
Cozzetto ©