Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    JAVA, piccolo progetto, sos!!

    Ciao ragazzi, ho da risolvere un piccolo progetto..Da scrivere in JAVA VVoVe: ..Ogni aiuto è ben accolto!

    Il “gioco del colore” per m giocatori formulato nel modo seguente:
    i giocatori dispongono di un mazzo di n=x·y carte, suddivise in y colori differenti con x
    carte per ogni colore. Si suppone n>x·m+m.
    Il mazzo è posto al centro di un tavolo rotondo, intorno al quale sono seduti i giocatori.
    Inizialmente, ogni giocatore preleva x carte dal mazzo. A questo punto inizia il gioco, nel
    quale ogni giocatore esegue una successione di giocate. Ogni giocata consiste nel
    prelevare la carta in testa al mazzo e nello scartare una carta scelta casualmente,
    depositandola in testa al mazzo. I giocatori eseguono le giocate senza un ordine fisso,
    salvo che:
    · il generico giocatore, dopo ogni giocata, attende che almeno un altro giocatore
    abbia eseguito la sua giocata.
    Il gioco termina, con la segnalazione del vincitore, quando un giocatore ha in mano x carte
    dello stesso colore.
    Definire in pseudo-codice il programma eseguito dal generico giocatore per un corretto
    svolgimento del gioco, utilizzando variabili condivise e semafori.
    Traccia:
    Giocatorei :
    inizializza();
    while(TRUE) {
    ???
    carta = prendi();
    ???
    verifica_colore();
    ???
    scarta();
    ???
    }
    Si può ipotizzare di disporre delle seguenti funzioni:
    - inizializza(): inizializza il giocatore con x carte;
    - prendi(): prende una carta in testa al mazzo e la restituisce al giocatore;
    - verifica_colore(): restituisce true se, con l’ultima carta prelevata, il giocatore
    può vincere (ha in mano tutte carte dello stesso colore più quella da scartare), false
    altrimenti;
    - scarta(): sceglie una carta tra quelle del giocatore e la pone in testa al mazzo;
    - get_pid(): restituisce l’identificatore del giocatore (intero > 0).


    Come costruire il tutto??AIUTO

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    bisogna prima parlare di come deve essere questo programma...
    premesso che devi evitare situazioni limite come 20 carte 2 colori con 3 giocatori. per vedere che non rientri in una di queste condizioni basta che moltiplichi 3x10 e vedi che il numero sia minore del numero delle carte altrimenti è impossibile iniziare il gioco.


    l'idea è questa: di avere un array di carte, caratterizzante solo il colore, quindi neanche un array di oggetti...(i metodi prendi carta e metti carta nel mazzo dovrebbero avere un loro conteggio delle carte date)

    **************************************
    inizialmente prendi sempre carte fino a che non arrivi a 10 e poi ne prendi una, verifichi con la procedura verifica_colore() se puoi vincere e poi ne scarti un'altra e vai avanti cosi.
    **************************************

    c'e da vedere nell'ottica che partecipi piu di un giocatore in che modo si succedono la mano, il mio consiglio è : fai prima il progr. per un giocatore una volta che funziona, istanzi oggetti giocatori al quale gli fai fare un turno. turno = procedura asteriscata

  3. #3
    Allora la struttura del progetto deve prendere spunto da quest'altro programma..Spero possa aiutarci/vi.


    public class Arbitro
    {
    public static void main(String args[]) {
    // crea il campo di gioco
    Campo campo = new Campo(Integer.parseInt(args[1]),Integer.parseInt(args[2]));
    campo.popola();
    int giocatori = Integer.parseInt(args[0]);
    System.out.println("Sessione di gioco con " + giocatori + " giocatori");
    for (int i=0;i<giocatori;i++) {
    // crea il numero di giocatori richiesto
    Giocatore player = new Giocatore(i,campo);
    player.start();
    }
    }
    }


    public class Giocatore extends Thread
    {
    private Campo campo; // campo di gioco
    private int number; // identificativo del giocatore
    private int score;
    public Giocatore(int n,Campo c) {
    number = n;
    campo = c;
    score = 0; // score accumulato dal giocatore
    }
    public void run() {
    int value;
    int i = (int) (Math.random()*campo.getRow());
    int j = (int) (Math.random()*campo.getColumn());
    System.out.println("Selezione del giocatore " + number + " = (" + i + "," + j + ")");
    boolean stop = false;
    while (!stop) {
    value = campo.seleziona(number,i,j);
    if (value!=-1)
    score += value;
    else
    stop = true;
    }
    System.out.println("Giocatore " + number + " termina con score = " + score);
    }
    }

    class Campo
    {
    public static final int MAX_SCORE = 5;
    private int last; // ultimo ad aver giocato
    private int count; // numero di elementi della matrice occupati
    private int row; // righe del campo
    private int column; // colonne del campo
    private int[][] field; // campo di gioco
    public Campo(int r, int c) { // costruttore
    count = 0;
    last = -1;
    row = r;
    column = c;
    field = new int[row][column];
    }
    public int getRow() {
    return row;
    }
    public int getColumn() {
    return column;
    }
    // dispone gli obiettivi sul campo di gioco. È simulato con celle di valore diverso
    public void popola() {
    int score;
    for (int i=0;i<row;i++)
    for (int j=0;j<column;j++) {
    score = (int) (MAX_SCORE * Math.random());
    field[i][j] = score;
    if (score!=0)
    count++;
    }
    }


    // metodo di accesso al campo di gioco
    public synchronized int seleziona(int number,int i,int j) {
    // non puo' giocare due volte di seguito
    while (number==last) {
    try {
    wait();
    }
    catch (InterruptedException e) {
    System.out.println("Thread " + number + "interrotto");
    }
    }
    int value = field[i][j];
    field[i][j] = 0;
    last = number;
    System.out.println("Score per giocatore " + number + " = " + value);
    count --; // decrementa il numero di elementi ancora presenti
    if (count<=0) {
    System.out.println("Sessione di gioco terminata");
    value = -1;
    }
    notifyAll();
    return value;
    }
    }


    VEdiamo un po'...Il prof. mi ha detto che è un programmino semplicissimo..Possibile che nessuno in questo popo' di forum possa darmi una mano???

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    No, io l'avrei fatto diversamente, mi sembra ci siano troppi campi in piu che non si erano considerati. ad esempio lo score..

    VVoVe: VVoVe: VVoVe:

  5. #5
    MA Sì è OVVIO CHE SIA UNA COSA DIVERSA!! VOLEVO SOLO DARE UN MODELLO DI PROGRAMMA JAVA SU CUI COSTRUIRE IL PROGRAMMA SPECIFICO.. QUELLO ERA IL GIOCO DELLA BATTAGLIA NAVALE!! TIENI CONTO CHE QUESTO PROGRAMMA è PER SISTEMI OPERATIVI. IL SENSO è CHE VOLEVO DARTI UN CAMPIONE RITENUTO ESATTO..POI I PARTICOLARI SONO TUTTI DA CAMBIARE!

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    Ah...ma infatti non capivo cosa c'entrasse
    Anche io ti ho voluto dare un modello! Non l'hai letto?

    p.s: quando dici "Si può ipotizzare di disporre delle seguenti funzioni" vuol dire che non devi farle? Se è cosi è piu semplice, scrivi meno codice ma non lo puoi provare, ma forse il tuo prof vuole questo

  7. #7
    non c'è nulla di difficile..
    Hai definito i campi e i metodi del programma, prendi il tuo editor preferito e inizia a strendere il programma, prima scrivendo solo i campi e metodi, poi creando pian piano le operazioni da fare..
    sono d'accordo x l'esempio, c'è troppa oop.. non è per nulla semplice per qualcuno non troppo esperto..
    Blink@go

    "Non tutto quel che è oro brilla, Ne gli erranti sono perduti; Il vecchio ch'è forte non s'aggrinza, Le radici profonde non gelano.Dalle ceneri rinascerà un fuoco, L'ombra sprigionerà una scintilla, Nuova sarà la lama ormai rotta, E re quei ch'è senza corona."

    ------------
    Lang: java 1.4.1 Eclipse

  8. #8

    SOS

    Ho finito il programma..Che ne pensate? Vedete qualke bugs? Qualke miglioria?!?!Devo consegnarlo al prof e non vorrei ke ci fossero imperfezioni..Come posso fare per dichiarare il vincitore?!? Ecco il sorgente.

    Ci sono 3 file:mazzo, arbitro, giocatore: vorrei anke metterlo in rete..come si fa??
    ------------------------------------
    import javax.swing.*;

    public class Mazzo
    {

    private int numeroCarte;
    private int colori;
    public int mazzo[]; //Crea un array di carte
    private int last;
    private int primo;
    private int libero;
    private int cartaCorrente;
    private String output;
    private String output2;
    private boolean verify;
    JTextArea outputArea;
    JScrollPane scroller;

    public Mazzo(int n , int c) //Costruttore della classe mazzo di carte
    {
    numeroCarte = n;
    colori = c;
    int primo=0;
    int libero=0;
    mazzo = new int[ numeroCarte*colori ];
    cartaCorrente = 0;
    last = -1;
    output ="";
    output2="";
    verify = false;
    outputArea = new JTextArea(20,26);
    scroller = new JScrollPane(outputArea);

    for ( int count = 0; count < mazzo.length; count++ )
    mazzo[ count ] = (count+1)%colori;
    }

    public void mescola()
    {
    /* Per ogni carta dell'array ne sceglie un'altra a caso e compie uno swap tra le due */

    for ( int first = 0; first < mazzo.length; first++ )
    {
    int second = ( int ) ( Math.random() * numeroCarte );
    int temp = mazzo[ first ];
    mazzo[ first ] = mazzo[ second ];
    mazzo[ second ] = temp;
    }
    }

    public synchronized void distribuisci( int num,int manoGioc[],int tot )
    {
    for ( int count = 0 ; count < tot ; count ++ )
    {
    manoGioc[count] = mazzo[cartaCorrente];
    cartaCorrente++;
    }
    primo = cartaCorrente;
    }

    public synchronized boolean pesca( int num , int manoGioc[] ,int tot )
    {
    while( num == last )
    {
    try // Permette di accedere al metodo
    { // distribuisci solo ad un giocatore alla volta
    wait(); // e inoltre non permette l'accesso all'ultimo che
    } // ha appena preso la carta.
    catch( InterruptedException e )
    {
    output=( "Thread "+num+" interrotto in attesa .\n" );
    display(2,output);

    }
    }

    last = num;
    int cartaTmp = mazzo[primo];
    output = ("Il giocatore "+num+" pesca una carta di colore " +Colora(cartaTmp)+".\n");
    display(2,output);

    verify = verifica( num, cartaTmp , manoGioc , tot );
    if ( verify == true )
    {
    output = ("Il giocatore "+num+" ha vinto la partita.\n");
    display(3,output);
    System.exit(0);
    }
    else
    {
    int i = scegliCarta( manoGioc );
    //int i = (int)(Math.random()*tot);
    mazzo[libero]=manoGioc[i];
    output = ("Il giocatore "+num+" scarta una carta di colore "+Colora(manoGioc[i])+".\n");
    primo = (primo+1)%(numeroCarte*colori);
    libero = (libero+1)%(numeroCarte*colori);
    manoGioc[i]=cartaTmp;

    display(2,output);

    }

    notifyAll();

    return verify;
    }



    public boolean verifica(int num, int cartaTmp , int manoGioc[] , int tot)
    {
    int equal=0;
    for (int count = 0;count < tot;count++)
    {
    if(cartaTmp==manoGioc[count])
    equal++;

    output=("Il giocatore "+num+" ha in mano una carta di colore "+Colora(manoGioc[count])+".\n" );
    display(2,output);
    }

    if (equal==tot-1)
    return true;
    else
    return false;

    }

    public void display (int scelta ,String output)
    {
    switch(scelta)
    {
    case 1:
    output2+=("I giocatori giocano con "+numeroCarte+" carte di "+colori+" colori diversi \n");
    break;

    case 2:
    output2+=(output);
    break;

    case 3:
    output2+=(output);
    outputArea.setText(output2);
    JOptionPane.showMessageDialog( null , scroller , "GIOCO DEL COLORE" , JOptionPane.INFORMATION_MESSAGE );
    break;

    }
    }

    public int scegliCarta (int manoGioc[])
    {
    int massimo = 0;
    int frequenza[] = new int [colori];
    for (int count = 0; count < numeroCarte ; count++)
    {
    ++frequenza[ manoGioc[count] ];
    }

    for (int count = 0; count < (colori-1) ; count++)
    {
    if(frequenza[count] > frequenza[count+1])
    massimo = count;
    else
    massimo = count+1;
    }
    int counter = 0;
    while(manoGioc[counter] == massimo && counter < numeroCarte)
    {
    counter++;
    }
    return counter;
    }

    public String Colora (int colore)
    {
    String c = null;
    switch(colore)
    {
    case 0:
    c = "Bianco";
    break;

    case 1:
    c = "Rosso";
    break;

    case 2:
    c = "Verde";
    break;

    case 3:
    c = "Blu";
    break;

    case 4:
    c = "Rosa";
    break;

    case 5:
    c = "Viola";
    break;
    }

    return c;
    }
    }
    ------------------------------
    import javax.swing.*;

    public class Giocatore extends Thread
    {
    private Mazzo mazzo;
    private int number; /* Identificativo del giocatore */
    private int manoGiocatore[];
    private int cDDistribuire;


    public Giocatore (int cDD, int n ,Mazzo m)
    {
    cDDistribuire = cDD ;
    number = n ;
    mazzo = m ;
    manoGiocatore = new int [cDDistribuire];


    }

    public void run()
    {

    boolean controllo = false;
    mazzo.distribuisci(number,manoGiocatore, cDDistribuire);
    while(controllo == false )
    {

    controllo = mazzo.pesca(number,manoGiocatore,cDDistribuire);

    }


    }
    }
    -------------------------------------
    import javax.swing.*;

    public class Arbitro
    {

    public static void main (String args[])
    {
    /* Crea il mazzo fornendo numero
    di carte e numero di colori */
    String numero;
    String colori;
    String giocatori;
    String testoIniz;
    int n;
    int c;
    int g;

    numero = JOptionPane.showInputDialog("Inserisci il numero di carte per colore : ");
    n = Integer.parseInt(numero);
    colori = JOptionPane.showInputDialog("Inserisci il numero di colori : ");
    c = Integer.parseInt(colori);
    giocatori = JOptionPane.showInputDialog("Inserisci il numero di giocatori : ");
    g = Integer.parseInt(giocatori);
    testoIniz="";


    //if( (n*c) < ( (n*g) +g ) )
    if (n*c<0)
    {
    JOptionPane.showMessageDialog(null,"Hai inserito un numero di giocatori troppo elevato","ATTENZIONE",JOptionPane.ERROR_MESSAGE);
    System.exit(0);
    }
    else
    {
    Mazzo mazzo = new Mazzo ( n , c );
    mazzo.mescola();
    mazzo.display(1,testoIniz);

    for (int count = 0; count < g; count ++ )
    {
    /* Crea nuovi giocatori fornendo ad
    ognuno di essi il proprio PID
    ed il mazzo */

    Giocatore player = new Giocatore (n , count , mazzo );
    player.start();
    }

    }

    }
    }
    ------------------------

    grazie a tutti.

  9. #9

    POSSIBile??

    POSSIBILE CHE NEL FORUM DI HTML NON CI SIA NEANCHE UNA PERSONA CAPACE DI DESTREGGIARSI CON ABILITA' CON JAVA?!?!? O UN CENTINAIO DI RIGHE DI CODICE METTONO K.O. TUTTI I NAVIGANTI?!?!? CAVOLO NEANCHE FOSSE STATO UN PROGRAMMA DELLA NASA..

  10. #10
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425

    Re: POSSIBile??

    Originariamente inviato da Ol3iconfini
    POSSIBILE CHE NEL FORUM DI HTML NON CI SIA NEANCHE UNA PERSONA CAPACE DI DESTREGGIARSI CON ABILITA' CON JAVA?!?!? O UN CENTINAIO DI RIGHE DI CODICE METTONO K.O. TUTTI I NAVIGANTI?!?!? CAVOLO NEANCHE FOSSE STATO UN PROGRAMMA DELLA NASA..


    Leggi il regolamento al punto 3...
    Come vedrai nessuno è obbligato a risponderti o a tua totale disposizione , forse ognuno di noi ha da pensare già alle sue 100ntinaia di righe di codice... e quando trova un po di tempo va sul forum ad aiutre qualcuno; io il thread l'ho visto ora e ti avrei anche risposto se dopo solo un giorno non avresti dato una reply così arrogante...

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.