Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Programma in java
Forum - Java - Programma in java

Avatar
Emfy (Normal User)
Newbie


Messaggi: 1
Iscritto: 16/02/2008

Segnala al moderatore
Postato alle 14:12
Domenica, 17/02/2008
Salve a tutti, l'altro giorno ho messo su questo forum una traccia di un progetto...che riporto qui...:"Implementiamo un gioco che chiameremo CarrierGame. In esso due giocatori si contendono un c di mattoni, di diverse
dimensioni e peso. L'obiettivo del gioco è quello di trasportare almeno 20 chili di mattoni. Vince il giocatore che ci
riesce per primo.

Il sistema si compone di tre entità fondamentali:

1. il contenitore di mattoni: è una struttura condivisa che contiene N mattoni, con N numero casuale compreso
tra 20 e 30. Ogni mattone ha un peso espresso in chilogrammi, rappresentato da un numero intero compreso
tra 1 e 10. Il peso di ogni mattone viene determinato casualmente all’inizio del gioco.

2. I Giocatori: Al gioco partecipano 2 giocatori. Ognuno preleva un mattone dal contenitore e lo trasporta in un
proprio contenitore di destinazione, impiegando per questa operazione P secondi, dove P è il peso del mattone
prelevato:
a. Il giocatore 1 estrae sempre il mattone di peso minimo tra quelli presenti;
b. Il giocatore 2 estrae sempre il mattone di peso massimo tra quelli presenti;

3. Il contenitore di destinazione: è una struttura che contiene i mattoni trasportati da un singolo giocatore. Ne
saranno utilizzati 2, uno per ciascuno dei due giocatori.
Vince il gioco il giocatore che per primo immette almeno 20 chilogrammi di mattoni nel proprio contenitore.
Implementare tali entità attraverso il linguaggio Java, utilizzando Thread e Collection, e gestendo l'accesso in modo
mutuamente esclusivo alla struttura condivisa del contenitore iniziale di mattoni.

Attraverso le librerie Swing ed AWT realizzare l’interfaccia grafica dell'applicazione. L'interfaccia mostrerà il gioco in
esecuzione e ne permetterà l’avvio tramite un semplice bottone."

Ho iniziato ad implementare qualke classe...ho implementato la classe Giocatore, la classe Arbitro, la classe ContenitoreMattoni e la classe SpostaMattoni e la classe PrendeMattone che estende Thread...ma ho qualche problemino con le collection...c'è qualcuno che può aiutarmi?...di seguito pongo le implementazioni fatte:

//CLASSE CONTENITORE MATTONI
public class ContenitoreMattoni{
    private int numeroMattoni;
    private String statoM;
    private int pesoMattoni;
    private int[] pesoMattone;
    private String giocatore;
    private List<Integer> contenitore;
    
    public ContenitoreMattoni() {
        statoM="nonpreso";
        giocatore="";
    }
    
    public String getStato(){
        return this.statoM;
    }
    
    public void setNoPreso(){
        this.statoM="nonpreso";
        this.giocatore="";
    }
    
    public String getGiocatore(){
        return this.giocatore;
    }
    
    public int getNumMattoni(){
        return numeroMattoni;
    }
    
    public int getPeso(){
        return pesoMattoni;
    }
    
    public void setNumMattoni(){
        numeroMattoni=(new Random().nextInt(30));
    }
    
    public void setPesoMattoni(){
        for(int i=0;i<numeroMattoni;i++){
            pesoMattone=new Random().nextInt(10);    
        }
    }
    
    public void prendeMattone(String gioc){
        statoM="preso";
        giocatore=gioc;
    }
}


//CLASSE GIOCATORE
public class Giocatore {
    private String nome;
    protected ContenitoreMattoni[] mat;
    public Giocatore(String id) {
        nome="giocatore"+id;
    }
    
    public synchronized void inizia(){
        try{
        synchronized(mat){
            Thread.sleep(10);
            mat.wait();
        }
        }catch(InterruptedException e){
            e.printStackTrace();
        }
    }
    
    public String getName(){
        return this.nome;
    }
    
    public synchronized void prendeMattone(ContenitoreMattoni[] cm)throws InterruptedException{
        int n=cm.length;
        synchronized(cm){
            for(int i=0;i<n;i++){
                String statoM=cm.getStato();
                if(statoM.equals("nonpreso")){
                    if(cm.getGiocatore().equals("giocatore1")){
                        //PROBLEMA QUI????
                        
                }else if(cm.getGiocatore().equals("giocatore2")){
                    
//PROBLEMA QUI???
                }
                    
                }
            }
        }
    }

}

//CLASSE ARBITRO
public class Arbitro extends Giocatore{

    public Arbitro(String id) {
        super(id);
    }

    private synchronized void runThread() {
        synchronized (mat) {
            mat.notifyAll();
        }
    }

    public void run() {
        runThread();
    }

}

//CLASSE PRENDE MATTONE
public class PrendeMattone extends Thread{
    private Giocatore giocatore;
    private ContenitoreMattoni mattoni[];

    public PrendeMattone(ContenitoreMattoni[] mat, Giocatore gioc) {
        giocatore=gioc;
        mattoni=mat;
    }
    
    public void run(){
        giocatore.inizia();
        try{
            for(;;){
                giocatore.prendeMattone(mattoni);
            }
        }catch(InterruptedException e){
            System.out.println("Errore");
        }
    }
}

//CLASSE SPOSTAMATTONI
public class SpostaMattoni {
    private Giocatore[] giocatore;
    private Arbitro arbitro;
    private ContenitoreMattoni[] mattoni;
    private int numMattoni;
    private SortedSet<Integer> contenitoreDest1;
    private SortedSet<Integer> contenitoreDest2;
    

    public SpostaMattoni(int numMattoni) {
        super();
        this.numMattoni=numMattoni;
        giocatore=new Giocatore[2];
        mattoni=new ContenitoreMattoni[numMattoni];
        for(int i=0;i<numMattoni;i++)
            mattoni=new ContenitoreMattoni();
        contenitoreDest1=new TreeSet<Integer>();
        contenitoreDest2=new TreeSet<Integer>();
        
        
            
        }

    private void setup() {
        for (int i = 0; i < numMattoni; i++)
            mattoni.setNoPreso();
        for (int i = 1; i <2; i++)
            giocatore = new Giocatore("Giocatore" + i);
        for (int i =1; i < 2; i++)
                giocatore.start();
        }
    
    private void gioca() {
        arbitro = new Arbitro("arbitro");
        arbitro.start();
        try {
            for (int i = 1; i < giocatore.length; i++) {
                giocatore.join();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
//IN DUBBIO
    private void aggiornaContenitoreDest() {
        for (int i = 0; i < mattoni.length; i++) {
            contenitoreDest1.put(mattoni.getGiocatore(), contenitoreDest1.get(mattoni
                    .getGiocatore()) + 1);
            contenitoreDest1.put(mattoni.getGiocatore(), contenitoreDest1.get(mattoni
                                                                                         .getGiocatore()) + 1);
        }
    }

    public static void main(String[] args) {
        SpostaMattoni sposta = new SpostaMattoni(new Random().nextInt(30));
            sposta.setup();
            sposta.gioca();
            sposta.aggiornaContenitoreDest();
            System.out.println(sposta.contenitoreDest1);
            System.out.println(sposta.contenitoreDest2);
        
    }

}


..questo è quello che ho scritto fin ora...ma nn penso sia esatto...solo che nn riesco a trovare gli errori...se c'è qualcuno che può aiutarmi...gle ne sarò grato....thanks
:)

PM Quote