In laboratorio avevamo iniziato la scrittura del codice per la simulazione di una partita di calcio.
Questo è il codice completo con i vari controlli sulla probabilità che possa segnare o meno un giocatore in un certo ruolo, è stata eliminata la probabilità che possa segnare il portiere, ho aggiunto varie stampe per una formattazione migliore dei risultati della partita e ho cambiato l’avanzamento del gioco: invece che con lo scorrimento del numero di giocatori sono passato a scorrere i minuti di gioco.
Per scaricare il file java: Lab_09012008
import java.util.*; public class Lab_20090109 { public static void main(String[] argv) { System.out.println("\n\t SIMULAZIONE DI UNA PARTITA DI PALLONE\n\n"); //creazione delle due squadre di gioco Squadra s1 = new Squadra("Roma"); Squadra s2 = new Squadra("Lazio"); //dopo la creazione delle due squadre di gioco si inserisce in entrambe le squadre //una lista di giocatori con ruolo e numero di maglia // -- LISTA GIOCATORI DELLA PRIMA SQUADRA s1.addGiocatore( new Giocatore("giocatore", "portiere", 1) ); s1.addGiocatore( new Giocatore("giocatore", "difensore", 2) ); s1.addGiocatore( new Giocatore("giocatore", "difensore", 3) ); s1.addGiocatore( new Giocatore("giocatore", "difensore", 4) ); s1.addGiocatore( new Giocatore("giocatore", "centrocampista", 5) ); s1.addGiocatore( new Giocatore("giocatore", "centrocampista", 6) ); s1.addGiocatore( new Giocatore("giocatore", "centrocampista", 7) ); s1.addGiocatore( new Giocatore("giocatore", "centrocampista", 8) ); s1.addGiocatore( new Giocatore("giocatore", "attaccante", 9) ); s1.addGiocatore( new Giocatore("giocatore", "attaccante", 10) ); s1.addGiocatore( new Giocatore("giocatore", "attaccante", 11) ); // -- LISTA GIOCATORI DELLA SECONDA SQUADRA s2.addGiocatore( new Giocatore("giocatore", "portiere", 1) ); s2.addGiocatore( new Giocatore("giocatore", "difensore", 2) ); s2.addGiocatore( new Giocatore("giocatore", "difensore", 3) ); s2.addGiocatore( new Giocatore("giocatore", "difensore", 4) ); s2.addGiocatore( new Giocatore("giocatore", "centrocampista", 5) ); s2.addGiocatore( new Giocatore("giocatore", "centrocampista", 6) ); s2.addGiocatore( new Giocatore("giocatore", "centrocampista", 7) ); s2.addGiocatore( new Giocatore("giocatore", "centrocampista", 8) ); s2.addGiocatore( new Giocatore("giocatore", "attaccante", 9) ); s2.addGiocatore( new Giocatore("giocatore", "attaccante", 10) ); s2.addGiocatore( new Giocatore("giocatore", "attaccante", 11) ); //Avvio della partita tra le due squadre new Partita(s1, s2); //andata new Partita(s2, s1); //ritorno } } /** * classe per la rappresentazione di un giocatore di calcio * con nome, numero di maglia e ruolo in campo */ class Giocatore { String ruolo; String nome; int maglia; Giocatore(String nome) { this.nome = nome; } Giocatore(String nome, int maglia) { this.nome = nome; this.maglia = maglia; } Giocatore(String nome, String ruolo) { this.nome = nome; this.ruolo = ruolo; } Giocatore(String nome, String ruolo, int maglia) { this.nome = nome; this.ruolo = ruolo; this.maglia = maglia; } } /** * classe per la gestione di una generica squadra di calcio */ class Squadra { ArrayList giocatori = null; String nome; /** * cotruttore della classe Squadra cui si deve passare una stringa * che rappresenti il nome della squadra */ Squadra(String nome) { this.nome = nome; giocatori = new ArrayList(); } /** * funzione per l'aggiunta di giocatori alla squadra */ public void addGiocatore(Giocatore g) { //aggiunta di giocatori all'arraylist di giocatori giocatori.add(g); } /** * funzione che ritorna il giocatore i-esimo contenuto nell'arraylist di giocatori */ public Giocatore getGiocatore(int i) { //si ritorna il giocatore cercato in base all'indice assunto nell'arraylist //solo se l'indice inserito è compreso tra 0 e la dimenzione dell'arraylist //in tutti gli altri casi si restituisce NULL return ( (i >= 0) && (i < giocatori.size()) ) ? (Giocatore)giocatori.get(i) : null; } /** * funzione in grado di restituire un array di giocatori in base al ruolo passato */ public Giocatore[] getGiocatoriPerRuolo(String ruolo) { //contatore per il numero di giocatori trovati in base al ruolo int count = 0; //scorrimento di tutti i giocatori for (int i=0; i<giocatori.size(); i++) //incremento del contatore quando viene trovato un giocatore del ruolo cercato if (getGiocatore(i).ruolo.equals(ruolo)) count++; //se non viene trovato nessun giocatore la funzione termina restituendo NULL if (count == 0) return null; //creazione di un array di giocatori con dimensione presa dal numero di giocatori trovati Giocatore[] g = new Giocatore[count]; //contatore temporaneo int c = 0; //scorrimento di tutti i giocatori for (int i=0; i<giocatori.size(); i++) { //controllo che il giocatore attuale abbia il ruolo cercato if (getGiocatore(i).ruolo.equals(ruolo)) { //se la condizione si verifica si assegna all'array di giocatori il giocatore trovato g[c] = getGiocatore(i); //incremento del contatore per l'array di giocatori c++; } } //ritorno dell'array di giocatori return g; } /** * funzione toString che ritorna la rappresentazione sottoforma di stringa * formattata della lista di giocatori e del nome della squadra */ public String toString() { String squadra = nome; for (int i=0; i<giocatori.size(); i++) squadra = squadra+"\n "+getGiocatore(i).maglia+"\t"+getGiocatore(i).nome+"\t"+getGiocatore(i).ruolo; return squadra+"\n"; } } /** * classe per la simulazione di una partita di pallone tra due squadre */ class Partita { Squadra s1 = null, s2 = null; int goals1, goals2; /** * unico costruttore valido per eseguire la partita * preleva due squadre ed avvia il gioco */ Partita(Squadra s1, Squadra s2) { this.s1 = s1; this.s2 = s2; //avvio della partita gioca(); } /** * funzione per la selezione del giocatore che segna in base alla probabilità di segnare * per ruolo, con scelta della squadra di appartenenza */ public Giocatore getGiocatorePerProbabilitaDiSegnare(Squadra s) { //selezionatore di probabilità per la scelta di un giocatore per ruolo double probatt = Math.abs(Math.random() - .5); //se la probabilità è compresa tra 0 e 0,25 //il giocatore che ha probabilità di segnare si troverà in attacco if (probatt >= 0 && probatt < .25) { return s.getGiocatoriPerRuolo("attaccante")[(int)(Math.random() * s.getGiocatoriPerRuolo("attaccante").length)]; } //altrimenti, se la probabilità è compresa tra 0,25 e 0,4 //il giocatore che ha probabilità di segnare si troverà in centrocampo else if (probatt >=.25 && probatt < .4 ) { return s.getGiocatoriPerRuolo("centrocampista")[(int)(Math.random() * s.getGiocatoriPerRuolo("centrocampista").length)]; } //altrimenti, il giocatore che ha probabilità di segnare si troverà in difesa else { return s.getGiocatoriPerRuolo("difensore")[(int)(Math.random() * s.getGiocatoriPerRuolo("difensore").length)]; } } /** * funzione per l'avvio della simulazione di gioco * un ciclo "for" scorre i minuti della partita avanzando da 0 a 90 * un casualizzatore booleano nella condizione della IF permette di selezionare * in base al minuto di gioco quando viene effettuato un goal * se la condizione risulta verificata si provvedere, con un ulteriore casualizzatore * alla selezione della squadra che ha segnato il goal. * una volta scelta la squadra si incrementa un contatore di punti per ciascuna squadra e si * stampa il giocatore che ha segnato il goal * al termine dello scorrimento dei minuti si stampa il risultato della partita */ public void gioca() { //sviluppo della partita minuto per minuto for (int minuto=0; minuto<90; minuto++) { if (minuto == 0) System.out.println("\n\t\t Inizio Primo Tempo\n"); if (minuto == 45) System.out.println("\n\t\t Fine Primo Tempo\n\t\t --------------------\n\t\t Inizio Secondo Tempo\n"); //casualizzatore per i goal if ((Math.random() + Math.random()) < (Math.random() - Math.random())) { //Selezionatore per la scelta di una delle due squadre int c = Math.round((float)Math.random()); //se il selezionatore preleva la prima squadra if (c == 1) { //incremento del numero di goal della prima squadra goals1++; Giocatore g = getGiocatorePerProbabilitaDiSegnare(s1); System.out.println("Ha segnato: " + g.nome + " (" + g.maglia + ") - " + g.ruolo + " ["+s1.nome+"]" + " al: " + minuto + "'"); } //altrimenti viene prelevata la seconda else { //incremento del numero di goal della seconda squadra goals2++; Giocatore g = getGiocatorePerProbabilitaDiSegnare(s2); System.out.println("Ha segnato: " + g.nome + " (" + g.maglia + ") - " + g.ruolo + " ["+s2.nome+"]" + " al: " + minuto + "'"); } } } System.out.println("\n\t\t Fine Secondo Tempo\n"); //stampa del risultato finale della partita System.out.println("\n\t\t"+s1.nome+" - "+goals1+" || "+goals2+" - "+s2.nome); System.out.println("\t---------------------------------------\n\t\t Fine Partita\n\n"); } }

eheh….ora capisco quanto dell’esame di informatica 1 su java non mi sia rimasto quasi niente! :p
beh dai.. non sono cose molto complicate.. l’unica cosa da fare è mettersi li e perdere del tempo con queste cose.
Un consiglio: non perdercene troppo.
Quando svilupperemo applicazioni grafiche (circa tra un mesetto.. forse meno) allora si che sarà bello scrivere programmi in java ;)
per ora l’unica è perderci tempo, purtroppo. E avere pazienza.