Login: password:
Forgot your password?
Carte
Si gioca con 40 carte di 4 semi. Inizialmente vegono messe quattro carte (scoperte) sul tavolo. Ad ogni gocatore vengono distribuite tre carte. A turno i gocatori devono giocare una carta: se il suo valore corrisponde a quello di una delle carte sul tavolo, il giocatore prende entrambe le carte (quella giocata e quella corrispondente) e le aggiunge ad un suo mazzo di carte vinte. Se la carta giocata non ha una corrdispondente carta sul tavolo, essa viene deposta sul tavolo assieme alle altre. Quando tutti i giocatori restano senza carte in mano, si procede ad una nuova distribuzione di tre carte a testa fino ad esaurire il mazzo (il numero di giocatori deve quindi essere congruo, affinchè sia possible completare correttamente la distribuzione delle carte del mazzo).

Al termine si procede al conteggio: ogni giocatore sconta i punti accumulati, sommando il valore di tutte le carte vinte. Viene proclamato vincitore il giocatore che ha accumulato più punti.

package carte;
public class Carta {
   static final char CUORI='C';
   static final char QUADRI='Q';
   static final char FIORI='F';
   static final char PICCHE='P';

    int valore;
    char seme;

    Carta (int v, char s) {
        valore=v;
        seme=s;
    }
    boolean hasEqualValue(Carta c) {
        return c.valore==valore;
    }
    public String toString(){
        return ""+seme+valore;
    }
}

package carte;

import java.util.*;

public class InsiemeDiCarte extends LinkedList{
    public String toString(){
        String s="";
        Iterator i=this.iterator();
        while (i.hasNext()) s=s+i.next().toString()+" ";
        return s;
    }
}

package carte;
import java.util.*;

public class Mazzo extends InsiemeDiCarte {
    Mazzo(int nCartePerSeme){
        super();
        for (int val=1; val <=nCartePerSeme; val++){
            this.add(new Carta(val, Carta.CUORI));
            this.add(new Carta(val, Carta.QUADRI));
            this.add(new Carta(val, Carta.FIORI));
            this.add(new Carta(val, Carta.PICCHE));
        }
    }
    public void mescola(){
        Random r=new Random();
        int nCarte=this.size();
        for (int k=0; k<nCarte; k++) {
            int pos=r.nextInt(nCarte);
            this.addLast(remove(pos));
            this.addFirst(remove(pos));
        }
    }
    public Carta prossimaCarta(){
        assert (size()>0):"Mazzo vuoto";
        return (Carta)this.removeFirst();
    }
    public static void main(String a[]){
        Mazzo m=new Mazzo(10);
        m.mescola();
        System.out.println(m);
    }
}

package carte;

import java.util.*;

public class Tavolo {
    InsiemeDiCarte carte=new InsiemeDiCarte();
    public void aggiungi(Carta c){
        carte.add(c);
    }
    public boolean rimuovi(Carta c){
        return carte.remove(c);
    }
    public Carta contieneCartaEquivalente(Carta c){
        Iterator iter=carte.iterator();
        while (iter.hasNext()) {
            Carta c2=(Carta)iter.next();
            if (c2.hasEqualValue(c)) return c2;
        }
        return null;
    }
}

package carte;

import java.util.*;


public class Giocatore {
    String nome="Giocatore ";
    Tavolo tavolo=null;
    InsiemeDiCarte carteDiMano=new InsiemeDiCarte();
    InsiemeDiCarte carteVinte=new InsiemeDiCarte();
    Giocatore(int k, Tavolo t){
        nome=nome+k;
        tavolo=t;
    }
    public void aggiungiCarta(Carta c){
        carteDiMano.add(c);
    }
    private Carta scegliCartaDaGiocare(){
        assert (carteDiMano.size()>0):"Il giocatore non ha carte in mano";
        return (Carta)carteDiMano.removeFirst();
    }
    public void gioca(){
        Carta c=scegliCartaDaGiocare();
        Carta c2=tavolo.contieneCartaEquivalente(c);
        if (c2==null) {
            tavolo.aggiungi(c);
            System.out.println(nome+" gioca "+c);
        } else {
            carteVinte.add(c);
            tavolo.rimuovi(c2);
            carteVinte.add(c2);
            System.out.println(nome+" vince "+c);
            System.out.println(nome+" vince "+c2);
        }
        System.out.flush();
    }
    public int contaPunti(){
        int punti=0;
        Iterator i=carteVinte.iterator();
        while (i.hasNext()) {
            Carta c=(Carta)i.next();
            punti=punti+c.valore;
        }
        return punti;
    }
}

package carte;

import java.util.*;

public class Partita {
    Collection giocatori=new HashSet();
    int ngiocatori;
    Mazzo mazzo;
    Tavolo tavolo=new Tavolo();
    Partita(int nGiocatori){
        assert (36%nGiocatori==0):"numero di giocatori non valido";
        for (int i=0; i<nGiocatori; i++) giocatori.add(new Giocatore(i,tavolo));
        mazzo=new Mazzo(10);
        mazzo.mescola();
        aggiungiCarteInTavola();
        while (! mazzo.isEmpty()) {
            distribuisciCarte(3);
            for (int i=0;i<3;i++) faiUnaMano();
        }
        proclamaVincitore();
    }
    private void aggiungiCarteInTavola(){
        for (int k=0;k<4;k++) tavolo.aggiungi((Carta)mazzo.prossimaCarta());
    }
    private void distribuisciCarte(int n){
        assert (mazzo.size()>=n*giocatori.size()): "non ci sono abbastanza carte nel mazzo";
        Iterator iter=giocatori.iterator();
        while (iter.hasNext()) {
            Giocatore g=(Giocatore)iter.next();
            for (int i=0;i<n;i++) g.aggiungiCarta(mazzo.prossimaCarta());
        }
    }
    private void faiUnaMano(){
        Iterator iter=giocatori.iterator();
        while (iter.hasNext()) {
            Giocatore g=(Giocatore)iter.next();
            g.gioca();
        }
    }
    private void proclamaVincitore(){
        int maxPunti=0;
        String vincitore=null;
        Iterator iter=giocatori.iterator();
        while (iter.hasNext()) {
            Giocatore g=(Giocatore)iter.next();
            int punti=g.contaPunti();
            System.out.println(g.nome+" : "+punti+"n");
            if (punti>maxPunti) {
                maxPunti=punti;
                vincitore=g.nome;
            }
        }
        System.out.println("IL VINCITORE E' : "+vincitore);
    }

    public static void main(String s[]){
        Partita p=new Partita(2);
    }


}

Il codice va compilato con lo switch -ea per abilitare le asserzioni



powered by segue
segue_logo