-
Notifications
You must be signed in to change notification settings - Fork 11
Esercizi
L'esercitazione prevede i passi descritti nel seguito.
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.
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:
- aggiunta delle modifiche (comando
git add <percorso alla nuova classe>
); - commit delle modifiche (
git commit -m "commento"
), specificando con un commento la natura della modifica effettuata; - pull delle modifiche effettuati da altri partecipanti (comando
git pull
); - 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.
Si modifichi la pagina wiki Partecipanti inserendo il nome della propria classe e una riga di spiegazione sulla strategia implementata.
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.