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 estendendo la superclasse astratta GoldDigger. 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 chooseDiggingSite che, dato un array con le distanze dai siti minerari, restituisce l'indice del sito in cui si desidera lavorare per quel giorno. Si può procedere prendendo spunto dalle classi di esempio RandomDigger e RotatingDigger.

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

  1. pull delle modifiche effettuati da altri partecipanti (menu Team -> Remote -> Pull from Upstream);
  2. commit delle modifiche (Team -> Commit), specificando con un commento la natura della modifica effettuata;
  3. push delle modifiche sul server (Team -> Remote -> Push to Upstream).

Bisogna prestare attenzione al fatto che la radice del progetto deve essere selezionata mentre si eseguono i comandi, che altrimenti riguarderebbero solo una porzione del progetto. Qualora ci fossero dei conflitti con le modifiche effettuate da altri utenti l'interfaccia richiederà di 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.

Chi preferisse operare tramite il terminale può utilizzare la sequenza di comandi:

git pull
git add percorso-al-file-modificato.java
git commit -m "Messaggio esplicativo"
git push

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 oro 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 dailyOutcome definito nella classe base GoldDigger. Tale metodo viene invocato per ciascun cercatore alla fine della giornata allo scopo di informarlo sull'esito del proprio lavoro. I tre parametri del metodo rappresentano la quantità d'oro ottenuta, l'elenco delle distanze dei siti minerari e l'elenco del numero di cercatori che hanno lavorato in ciascun sito. Quest'ultima informazione in particolare consente di tenere conto delle scelte degli altri cercatori nel determinare il sito più conveniente da scegliere per la giornata lavorativa successiva.

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

Clone this wiki locally