Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Programma DOMINO

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    30

    Programma DOMINO

    Ciao a tutti!

    Avrei bisogno di una mano con un programma Java(importante perchè domani avrei un esame che probabilmente sarà su questo programma).
    Vi metto il Link con il testo:

    http://homes.di.unimi.it/casiraghi/P...-16/domino.pdf

    Il mio problema è sul Main Partita, non so come impostare la parte centrale.
    Se riusciste a darmi una GRANDE mano ve ne sarei grato...

    Metto quello che sono riuscito a fare...

    TESSERA.JAVA
    codice:
    public class Tessera {
    
        int a;
        int b;
    
    public Tessera ( int sinistro, int destro ) {
    
    
    
    
    
    
            a = sinistro;
    
    
            b = destro;
    
    
    
    
    
    
        }
    
    
    
    
    
    
        public int getSinistro() {
    
    
    
    
    
    
            return a;
    
    
        
    
    
        }
    
    
    
    
    
    
        public int getDestro() {
    
    
    
    
    
    
            return b;
    
    
    
    
    
    
        }
    
    
    
    
    
    
        public boolean contiene(int x) {
    
    
    
    
    
    
            if ( a == x || b == x ) {
    
    
    
    
    
    
                return true;
    
    
    
    
    
    
            }
    
    
            else {
    
    
    
    
    
    
                return false;
    
    
    
    
    
    
            }
    
    
    
    
    
    
        }
    
    
    
    
    
    
        public String toString() {
    
    
    
    
    
    
            return "["+a+","+b+"]";
    
    
    
    
    
    
        }
    
    
    }
    GIOCATORE.JAVA
    codice:
    import java.io.*;
    
    import java.util.*;
    
    
    
    
    
    
    public class Giocatore {
    
    
    
    
    
    
        String nome;
    
    
        ArrayList<Tessera> tessere = new ArrayList<Tessera>();
    
    
    
    
    
    
        public Giocatore( String n, ArrayList<Tessera> t ){
    
    
    
    
    
    
            nome = n;
    
    
            tessere = t;
    
    
    
    
    
    
        }
    
    
    
    
    
    
        public Tessera Estrai(int x) {
    
    
    
    
    
    
            boolean flag = false;
    
    
            Tessera giusta = null;
    
    
    
    
    
    
            for (int i=0; i<tessere.size(); i++) {
    
    
    
    
    
    
                if ( tessere.get(i).getSinistro() == x || tessere.get(i).getDestro() == x ){
    
    
    
    
    
    
                    giusta = tessere.get(i);
    
    
                    tessere.remove(i);
    
    
                    flag = true;
    
    
                    break;
    
    
    
    
    
    
                }
    
    
            }
    
    
    
    
    
    
            if (flag == false) {
    
    
        
    
    
                return null;
    
    
    
    
    
    
            }
    
    
    
    
    
    
            else {
    
    
    
    
    
    
                return giusta;
    
    
    
    
    
    
            }
    
    
        }
    
    
    
    
    
    
        public boolean finito() {
    
    
    
    
    
    
            if (tessere == null){
    
    
    
    
    
    
                return true;
    
    
    
    
    
    
            }
    
    
            else {
    
    
    
    
    
    
                return false;
    
    
    
    
    
    
            }
    
    
        }
    
    
    
    
    
    
        public Tessera prima() {
    
    
    
    
    
    
            Tessera giusta = null;
    
    
    
    
    
    
            giusta = tessere.get(0);
    
    
            tessere.remove(0);
    
    
    
    
    
    
            return giusta;
    
    
    
    
    
    
        }
    
    
    
    
    
    
        public String toString() {
    
    
    
    
    
    
            String stringa = nome + " ( ";
    
    
    
    
    
    
            for (int i = 0; i<tessere.size(); i++) {
    
    
    
    
    
    
                stringa = stringa + tessere.get(i).toString() + " ";
    
    
    
    
    
    
            }
    
    
    
    
    
    
            return stringa + ")";
    
    
    
    
    
    
        }
    
    
    }
    PARTITA.JAVA
    codice:
    import java.io.*;
    
    import java.util.*;
    
    
    
    
    
    
    public class Partita{
    
    
        public static void main( String args[] ) throws Exception {
    
    
    
    
    
    
            Scanner scanner = new Scanner( System.in );
    
    
            /*System.out.print( "Inserisci il numero delle Tessere: " );*/
    
    
            int d = scanner.nextInt();
    
    
            System.out.println(d);
    
    
    
    
    
    
            ArrayList<Tessera> t = new ArrayList<Tessera>();
    
    
            ArrayList<Tessera> t2 = new ArrayList<Tessera>();
    
    
            String n = "";
    
    
            String n2 = "";
    
    
            boolean flag = false;
    
    
            
    
    
            n = scanner.next();
    
    
            
    
    
            for (int i = 0; i<d; i++) {
    
    
                    
    
    
                int sinistro = scanner.nextInt();
    
    
                int destro = scanner.nextInt();
    
    
                Tessera x = new Tessera(sinistro, destro);
    
    
                t.add(x);
    
    
    
    
    
    
            }
    
    
    
    
    
    
            Giocatore g1 = new Giocatore(n, t);
    
    
            System.out.println(g1.toString());
    
    
    
    
    
    
            n2 = scanner.next();
    
    
    
    
    
    
            for (int i = 0; i<d; i++) {
    
    
                    
    
    
                int sinistro = scanner.nextInt();
    
    
                int destro = scanner.nextInt();
    
    
                Tessera x = new Tessera(sinistro, destro);
    
    
                t2.add(x);
    
    
    
    
    
    
            }
    
    
    
    
    
    
            Giocatore g2 = new Giocatore(n2, t2);
    
    
            System.out.println(g2.toString());
    
    
            System.out.println("");
    
    
    
    
    
    
            Tessera tavolo = g1.prima();
    
    
            int sinistratavolo = tavolo.getSinistro();
    
    
            int destratavolo = tavolo.getDestro();
    
    
            int mosse = 1;
    
    
            System.out.println("Mossa " + mosse + ": " + n + " estrae " + tavolo.toString());
    
    
            System.out.println(g1.toString());
    
    
            System.out.println(g2.toString());
    
    
    
    
    
    
            while (g1.finito() != true || g2.finito() != true || flag != true) {
    
    
    
    
                for (int i=0; i<n; i++) {
    
    
                    if (n2(i).contiene(sinistratavolo)) {
    
    
                        sinistratavolo = n(i).getDestro();
    
    
                    /*if ((tavolo = g2.Estrai(tavolo.getSinistro())) != null){
    
    
    
    
    
    
                    mosse = mosse + 1;
    
    
                    System.out.println("Mossa " + mosse + ": " + n2 + " estrae " + tavolo.toString());
    
    
                    System.out.println(g1.toString());
    
    
                    System.out.println(g2.toString());
    
    
                
    
    
                }
    
    
                else{ 
    
    
    
    
    
    
                    if ((tavolo = g2.Estrai(tavolo.getDestro())) != null){
    
    
                    
    
    
                        tavolo = g2.Estrai(tavolo.getDestro());
    
    
                        mosse = mosse + 1;
    
    
                        System.out.println("Mossa " + mosse + ": " + n2 + " estrae " + tavolo.toString());
    
    
                        System.out.println(g1.toString());
    
    
                        System.out.println(g2.toString());
    
    
    
    
    
    
                    }
    
    
                    else{
    
    
    
    
    
    
                        if ((tavolo = g1.Estrai(tavolo.getSinistro())) != null){
    
    
                    
    
    
                            tavolo = g1.Estrai(tavolo.getSinistro());
    
    
                            mosse = mosse + 1;
    
    
                            System.out.println("Mossa " + mosse + ": " + n + " estrae " + tavolo.toString());
    
    
                            System.out.println(g1.toString());
    
    
                            System.out.println(g2.toString());
    
    
    
    
    
    
                        }
    
    
                        else{
    
    
                            
    
    
                            if ((tavolo = g2.Estrai(tavolo.getDestro())) != null) {
    
    
    
    
    
    
                            tavolo = g1.Estrai(tavolo.getDestro());
    
    
                            mosse = mosse + 1;
    
    
                            System.out.println("Mossa " + mosse + ": " + n + " estrae " + tavolo.toString());
    
    
                            System.out.println(g1.toString());
    
    
                            System.out.println(g2.toString());
    
    
            
    
    
                            }
    
    
                            else{
    
    
    
    
    
    
                                flag = true;
    
    
                            }
    
    
                        }
    
    
                    }
    
    
                }
    
    
            }*/
    
    
    
    
    
    
            if (g1.finito() == true) {
    
    
    
    
    
    
                System.out.println("Vince " + n);
    
    
    
    
    
    
            }
    
    
            else{
    
    
    
    
    
    
                if (g2.finito() == true) {
    
    
    
    
    
    
                    System.out.println("Vince " + n);
    
    
    
    
    
    
                }
    
    
                else{
    
    
    
    
    
    
                    if (flag == true) {
    
    
    
    
    
    
                        System.out.println("Pareggio");
    
    
        
    
    
                    }
    
    
                }
    
    
            }
    
    
            
    
    
            /*System.out.println( g1.toString() );
    
    
            System.out.println( g2.toString() );*/    
    
    
    
    
    
    
        }
    
    
    }
    Grazie e scusatemi per non aver lasciato tutti quegli spazi nel codice...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da PuntaT Visualizza il messaggio
    Il mio problema è sul Main Partita, non so come impostare la parte centrale.
    Non ho ancora letto bene la parte del pdf relativa alla partita e nemmeno la tua classe Partita. Avrò tempo forse stasera di darci una occhiata meglio.
    Posso dirti alcune cose in generale e su Tessera/Giocatore. Innanzitutto tieni sempre i campi generalmente come "private", se non ci sono altre indicazioni o necessità ben precise.

    Riguardo Tessera, è ok. Per il toString è richiesta la forma [a|b] ma tu hai messo la virgola in mezzo. Nulla di grave comunque.

    Riguardo Giocatore:
    - estrai (non Estrai) si potrebbe ampiamente migliorare.
    - finito è sbagliato (hai sempre un oggetto ArrayList, non è mai null).
    - anche toString è migliorabile ma questo è assolutamente il meno.

    Ricorda che il remove(int index) restituisce l'elemento che viene eliminato, questo è utilissimo!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    30
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Non ho ancora letto bene la parte del pdf relativa alla partita e nemmeno la tua classe Partita. Avrò tempo forse stasera di darci una occhiata meglio.
    Posso dirti alcune cose in generale e su Tessera/Giocatore. Innanzitutto tieni sempre i campi generalmente come "private", se non ci sono altre indicazioni o necessità ben precise.

    Riguardo Tessera, è ok. Per il toString è richiesta la forma [a|b] ma tu hai messo la virgola in mezzo. Nulla di grave comunque.

    Riguardo Giocatore:
    - estrai (non Estrai) si potrebbe ampiamente migliorare.
    - finito è sbagliato (hai sempre un oggetto ArrayList, non è mai null).
    - anche toString è migliorabile ma questo è assolutamente il meno.

    Ricorda che il remove(int index) restituisce l'elemento che viene eliminato, questo è utilissimo!
    Ok! Aspetto tua risposta! Nel frattempo sistemo finito mettendo un size()=0!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da PuntaT Visualizza il messaggio
    Aspetto tua risposta!
    Ok, ho letto meglio e con più calma il pdf nella sezione relativa alla partita vera e propria.
    Io innanzitutto sfrutterei una istanza di Partita per mantenere dello "stato" (che serve). Non farei tutto con metodi statici o peggio proprio tutto materialmente dentro il main.

    Per la logica del gioco, è sostanzialmente la stessa per entrambi i giocatori, quindi ovviamente il codice non va duplicato pedestremente (nel tuo codice intravedo già duplicazioni). Potrebbe tranquillamente bastare un loop in cui ad ogni ciclo si fa lo "switch" da un giocatore all'altro.
    E poi come dice chiaramente il testo:

    non avete bisogno di tenere traccia delle tessere sul tavolo: basta tenere traccia del numero di pallini all’estremità sinistra e a quella destra.
    vuol dire che non c'è bisogno di tenere una lista (collezione) di tessere. Ne basta una che idealmente rappresenta gli estremi sx/dx della lista di tessere.

    Di più in questo momento non saprei dirti. Cioè nel senso che dovrei provare anche io a svilupparlo vedendo e risolvendo le problematiche che man mano incontro. Personalmente, con le mie competenze attuali, tornerei a scuola (o andrei all'università che purtroppo non ho mai fatto) solo per il gusto di fare queste esercitazioni in maniera quasi impeccabile e vedere se il prof. mi dà il massimo dei voti oppure se è così <beep> che mi dà un voto basso ...
    Ultima modifica di andbin; 17-09-2015 a 22:29
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.