Skip to content

Esercizi

Claudio edited this page Mar 4, 2018 · 2 revisions

L'esercitazione prevede i passi descritti nel seguito.

1. Preparazione del progetto

Clonare il repository per ottenerne una versione in locale. Da terminale lanciare il comando:

git clone https://github.com/IngSW-unipv/BlackMarket.git

Importare il progetto nell'IDE IntelliJ. Per fare ciò è sufficiente selezionare il comando "Import Project" dalla schermata iniziale di IntelliJ oppure tramite il menu File->New->Project from Existing Sources...

In entrambi i casi, dopo aver selezionato la directory radice del progetto, IntelliJ dovrebbe individuare correttamente tutte le impostazioni necessarie (directory con i sorgenti, librerie, versione dello SDK...). Per verificare che tutto funzioni, selezionare Run 'BlackMarket.main()' dal menu contestuale che appare selezionando con il tasto destro la voce BlackMarket nel pannello a sinistra sotto le voci BlackMarket/src/it.unipv.ingsw.blackmarket. Se la procedura è andata a buon fine il progetto verrà compilato ed eseguito, fornendo in output un risultato (una classifica di quattro trafficanti predefiniti).

Si consulti la pagina Struttura del progetto per una descrizione schematica delle classi che compongono il progetto.

2. Creazione di un giocatore

Creare una nuova classe nel package dealers estendendo la superclasse astratta Dealer. La sottoclasse verrà identificata dal proprio nome che deve quindi essere univoco. Si consiglia di utilizzare una schema del tipo CognomeNome. Conviene inoltre inserire un commento con le generalità completa (come cognome e numero di matricola) del programmatore (o dei programmatori).

Si consiglia di iniziare con un giocatore che implementi una strategia semplice. In pratica occorre implementare il metodo exchangeBriefcase che, dati il numero del round di scambio e il numero di scambi in una sequenza, restituisce Briefcase.FULL oppure Briefcase.EMPTY a seconda che si scelga di essere onesti o disonesti. Si consiglia di prendere spunto dalle classi di esempio HonestDealer, Cheater e CoinFlipDealer.

Dopo aver terminato una prima versione funzionante della classe, la si dovrà pubblicare tramite una sequenza di operazioni sul repository:

  1. aggiunta delle modifiche (comando git add <percorso alla nuova classe>);
  2. commit delle modifiche (git commit -m "commento"), specificando con un commento la natura della modifica effettuata;
  3. pull delle modifiche effettuati da altri partecipanti (comando git pull);
  4. push delle modifiche sul server (comando git push) inserendo le cerdenziali opportune quando richiesto.

Qualora ci fossero dei conflitti con le modifiche effettuate da altri utenti (punto 3) bisognerà risolverli prima di procedere (in questo esercizio ciò non dovrebbe avvenire, visto che ciascun partecipante dovrebbe modificare soltanto i propri file). Dopo qualche istante si potrà verificare l'avvenuta pubblicazione delle modifiche tramite l'interfaccia web di github. I punti 1 e 2 possono essere eseguiti liberamente durante lo sviluppo ogni volta che si conclude una modifica significativa.

3. Documentazione

Si modifichi la pagina wiki Partecipanti inserendo il nome della propria classe e una riga di spiegazione sulla strategia implementata.

4. Raffinamento della strategia

A questo punto occorre cercare una strategia competitiva che consenta di guadagnare la maggiore quantità di monete possibile. Si possono pubblicare versioni successive della propria classe ripetendo i passi descritti nel punto precedente, purché si abbia cura di lasciare il progetto in uno stato in cui possa essere compilato ed eseguito senza errori.

Strategie più sofisticate possono essere implementate ridefinendo il metodo exchangeResult definito nella classe base Dealer. Tale metodo viene invocato al termine di uno scambio per informare il trafficante su ciò che è avvenuto. In particolare chiamando il metodo exchange.secondBriefcase() sarà possibile conoscere come si è comportato l'altro trafficante per poter pianificare come comportarsi negli scambi successivi. La classe d'esempio FirstImpressionDealer mostra ottenere ciò.

Alla fine ci si ricordi di modificare la descrizione della strategia implementata.