Strumenti Utente

Strumenti Sito


lpr-a:progetto2

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
lpr-a:progetto2 [10/05/2010 alle 12:11 (14 anni fa)]
Vincenzo Gervasi creata
lpr-a:progetto2 [08/06/2010 alle 13:58 (14 anni fa)] (versione attuale)
Vincenzo Gervasi
Linea 1: Linea 1:
 ====== Progetto 2 ====== ====== Progetto 2 ======
  
-__**ATTENZIONE: Pagina in corso di preparazione!**__ +Questa pagina descrive il **II Progetto di LPR 2009/10**.
- +
-Questa pagina descrive il **II Progetto di LPR 2009/10 **.+
  
 ===== Descrizione del gioco ===== ===== Descrizione del gioco =====
  
-Un certo numero di robot assassini sono intrappolati all'interno di una struttura, composta da varie stanze variamente collegate, e interamente circondata da un muro. Ciascun robot può spostarsi, guardarsi intorno, e fare fuoco un un raggio laser incorporato all'interno di questo "labirinto". Ogni robot è poi dotato di una batteria che lo alimenta, e che viene (lentamente) ricaricata tramite pannelli fotovoltaici dalla luce ambientale.+Un certo numero di robot assassini sono intrappolati all'interno di una struttura, composta da varie stanze variamente collegate, e interamente circondata da un muro. Ciascun robot può spostarsi  all'interno di questo "labirinto", guardarsi intorno, e fare fuoco con un raggio laser incorporato. Ogni robot è poi dotato di una batteria che lo alimenta, e che viene (lentamente) ricaricata tramite pannelli fotovoltaici dalla luce ambientale.
 Ogni giocatore controlla un numero variabile di robot, che possono agire individualmente o come squadra; lo scopo del gioco è distruggere il maggior numero possibile di robot avversari... prima che questi ultimi distruggano voi! Ogni giocatore controlla un numero variabile di robot, che possono agire individualmente o come squadra; lo scopo del gioco è distruggere il maggior numero possibile di robot avversari... prima che questi ultimi distruggano voi!
  
-Il campo di gioco è costituito da una superficie di 32x32 caselle, suddivisa in ambiente da una serie di muri; su questi muri si aprono tipicamente varie porte che li mettono in collegamento. Ogni robot è controllato da un client, che interagisce col server tramite protocollo TCP; i diversi client di una squadra possono interagire tra di loro, con modalità abitrarie, per realizzare strategie di cooperazione che consentano di ottenere una maggior efficienza.+Il campo di gioco è costituito da una superficie di 32x32 caselle, suddivisa in ambienti da una serie di muri; su questi muri si aprono tipicamente varie porte che li mettono in collegamento. Ogni robot è controllato da un client, che interagisce col server tramite protocollo TCP; i diversi client di una squadra **devono** interagire tra di loro, con modalità a scelta dello studente, per realizzare strategie di cooperazione che consentano di ottenere una maggior efficienza.
  
 +Per ogni robot avversario distrutto, viene assegnato al robot assassino un punteggio pari a 1 più la metà del punteggio dell'avversario distrutto (approssimato in basso); i robot più efficaci sono quindi anche le prede più ambite.
 ===== File eseguibili ===== ===== File eseguibili =====
 +Il progetto consiste nella scrittura di un client (giocatore) per un server dato (che gestisce il gioco). Il codice del server è disponibile per essere scaricato; è possibile che vengano rilasciate versioni successive (con modifiche minori, quali fine-tuning di alcuni parametri) in seguito.
 +==== File scaricabili ====
 +
 +Versione iniziale (10 Maggio 2010): [[http://margot.di.unipi.it/LPR-09/Laprore-Server2.jar|Server]] di gioco, [[http://margot.di.unipi.it/LPR-09/Laprore-Client2.jar|Client]] di esempio
 +
 +==== Istruzioni ====
 +
 +I file necessitano di Java Virtual Machine installata sulla macchina. Essi possono essere usati sia da GUI (con un doppio click sull'icona) che da riga di comando.
 +=== Uso da GUI ===
 +Aprendo il server si aprirà il pannello che rappresenta il campo di gioco, con tutti i parametri impostati al loro valore di default (vedi la prossima sezione). Il server è ora disponibile ad accettare connessioni dai client; chiudendo la finestra, si termina l'applicazione. Il pannello a destra elenca i robot registrati; per ciascun robot viene riportato il nome (troncato ai primi 8 caratteri e preceduto da "+" se il robot è stato distrutto), la carica della batteria, e il punteggio corrente.
 +Il client può essere lanciato un numero qualunque di volte; a ogni esecuzione da GUI, verrà registrato un nuovo giocatore sul server (con un nome casuale). Per default, le opzioni del client coincidono con quelle del server. Con la chiusura del server, terminano (con un errore) tutti i client collegati fino a quel momento.
 +
 +=== Uso da riga di comando ===
 +Il server può essere lanciato con il comando
 +
 +''java -jar Laprore-Server2.jar //portaTCP//''
 +
 +in cui:
 +  * //portaTCP// è la porta su cui il server si pone in ascolto per le connessioni TCP provenienti dai client (per default: 4000)
 +
 +Il client può essere lanciato con il comando
 +
 +''java -jar Laprore-Client2.jar //nome host portaTCP//''
 +
 +in cui:
 +
 +  * //nome// è il nome scelto per il robot (per default: generato casualmente)
 +  * //host// è l'indirizzo della macchina su cui gira il server (per default: localhost)
 +  * //portaTCP// è la porta, sull'//host//, su cui il server è in ascolto (per default: 4000)
 +
 +Tutti i parametri (sia del server che del client) sono opzionali, ma se presenti devono essere indicati in ordine. Per esempio, è possibile indicare sul client il nome del robot, omettendo host e porta.
  
-TBC 
  
 ===== Documentazione del protocollo ===== ===== Documentazione del protocollo =====
Linea 29: Linea 58:
 === Fairness === === Fairness ===
 Tentativi di sabotare il server o il protocollo sono lodevoli, ma considerati illegali ai fini dell'esame. È possibile contattare il docente per verificare la "legalità" di una tecnica non ortodossa che si intende usare. È altresì considerato illegale usare nella propria implementazione classi del server o del client di esempio, estratte dal codice fornito. Tentativi di sabotare il server o il protocollo sono lodevoli, ma considerati illegali ai fini dell'esame. È possibile contattare il docente per verificare la "legalità" di una tecnica non ortodossa che si intende usare. È altresì considerato illegale usare nella propria implementazione classi del server o del client di esempio, estratte dal codice fornito.
- 
 ==== Messaggi TCP ==== ==== Messaggi TCP ====
 I comandi hanno la seguente struttura: I comandi hanno la seguente struttura:
Linea 42: Linea 70:
 ^ STEP ^ 1 | Si sposta di un passo verso la //direzione//, se possibile. | - | 1 unità | ^ STEP ^ 1 | Si sposta di un passo verso la //direzione//, se possibile. | - | 1 unità |
 ^ LOOK ^ 2 | Guarda verso la //direzione//, fino a incontrare un ostacolo a distanza //d//. | Un byte contenente il tipo di ostacolo, seguito da un byte contenente //d//. | - | ^ LOOK ^ 2 | Guarda verso la //direzione//, fino a incontrare un ostacolo a distanza //d//. | Un byte contenente il tipo di ostacolo, seguito da un byte contenente //d//. | - |
-^ FIRE ^ 3 | Emette un raggio laser lungo la //direzione//, fino a incontrare un ostacolo a distanza //d//. | Un byte NAK se non è stato colpito alcun avversario, o se non si ha energia sufficiente; un byte ACK se è stato colpito un avversario. | //d// unità |+^ FIRE ^ 3 | Emette un raggio laser lungo la //direzione//, fino a incontrare un ostacolo a distanza //d//. | Un byte con valore NAK se non è stato colpito alcun avversario, o se non si ha energia sufficiente; oppure con valore ACK se è stato colpito un avversario. | //d// unità |
 | Comandi senza codice di direzione ||||| | Comandi senza codice di direzione |||||
 ^ GPS ^ 5 | Restituisce la propria posizione corrente. | Un byte contenente la posizione //x//, un byte contenente la posizione //y//. | - | ^ GPS ^ 5 | Restituisce la propria posizione corrente. | Un byte contenente la posizione //x//, un byte contenente la posizione //y//. | - |
Linea 64: Linea 92:
 |Oggetti di mappa||| |Oggetti di mappa|||
 ^ ROBOT ^ 82 | un robot | ^ ROBOT ^ 82 | un robot |
-^ WALL ^ 88 | un muro |+^ WALL ^ 88 | un muro interno | 
 +^ OUTSIDE ^ 0 | fuori mappa (un muro esterno) |
  
 ==== Gestione della batteria ==== ==== Gestione della batteria ====
Linea 102: Linea 131:
  
 I progetti sottomessi verranno testati durante un evento pubblico; i dettagli verranno forniti in seguito. I progetti sottomessi verranno testati durante un evento pubblico; i dettagli verranno forniti in seguito.
- 
 ===== Suggerimenti finali ===== ===== Suggerimenti finali =====
  
-L'implementazione del cliente di esempio (che sarebbe già sufficiente ai fini dell'esame) consta di circa 100 righe di codice Java; si consiglia agli studenti di iniziare con un'implementazione semplice, e poi eventualmente dedicarsi al miglioramento dell'efficienza e delle strategie. Si noti che ai fini della valutazione verranno considerati primariamente:+L'implementazione del cliente di esempio (che sarebbe già sufficiente ai fini dell'esame, tranne che per la mancanza di coordinamento) consta di circa 100 righe di codice Java (di cui circa 60 significative); si consiglia agli studenti di iniziare con un'implementazione semplice, e poi eventualmente dedicarsi al miglioramento dell'efficienza e delle strategie. Si noti che ai fini della valutazione verranno considerati primariamente:
   * la correttezza dell'uso delle tecniche di multithreading e di comunicazione di rete;    * la correttezza dell'uso delle tecniche di multithreading e di comunicazione di rete; 
-  * il design e l'implementazione dell'eventuale protocollo inter-client; +  * il design e l'implementazione del protocollo inter-client; 
-  * l'efficienza della soluzione (sia in termini di uso delle risorse che di efficacia della strategia di raccolta);+  * l'efficienza della soluzione (sia in termini di uso delle risorse che di efficacia della strategia complessiva della squadra);
   * la qualità complessiva di scrittura del codice e della relazione.   * la qualità complessiva di scrittura del codice e della relazione.
 Nella parte orale verranno invece verificate le conoscenze teoriche su tutti gli argomenti trattati nel corso. Nella parte orale verranno invece verificate le conoscenze teoriche su tutti gli argomenti trattati nel corso.
Linea 114: Linea 142:
 Si raccomanda di verificare in anticipo il funzionamento dei client sulle macchine del Centro di Calcolo (Laboratori H-Lab e M-Lab), su cui verrà svolto il "torneo" finale dopo la data di consegna. Si raccomanda altresì di contattare i docenti, a ricevimento o per email, **prima** della consegna in caso di dubbi sull'interpretazione del testo. Si raccomanda di verificare in anticipo il funzionamento dei client sulle macchine del Centro di Calcolo (Laboratori H-Lab e M-Lab), su cui verrà svolto il "torneo" finale dopo la data di consegna. Si raccomanda altresì di contattare i docenti, a ricevimento o per email, **prima** della consegna in caso di dubbi sull'interpretazione del testo.
  
 +Per lanciare più istanze del client in maniera rapida, si può usare un comando di shell di questo tipo:
 +
 +''for i in 1 2 3; do java -jar Laprore-Client2.jar Test-$i & done''
 +
 +o un suo equivalente su altri sistemi operativi.
 ===== FAQ ===== ===== FAQ =====
-In questa sezione verranno raccolte le domande più frequenti poste dagli studenti durante lo svolgimento del progetto.+**Come è definita una "squadra"?** 
 +\\ 
 +Non esiste sul server il concetto di squadra; dal punto di vista del server, si tratta di robot singoli. Ai fini dell'esame, una "squadra" è l'insieme delle istanze di un client lanciate dallo stesso studente (sulla stessa macchina o anche, potenzialmente, su macchine diverse). Sta allo studente implementare una qualche strategia di comunicazione per consentire il loro coordinamento (per esempio, per riconoscersi l'un l'altro ed evitare di distruggersi a vicenda).
  
 +**Il server mi restituisce a volte -1 in risposta al comando BATTERY, è un errore del server?**
 +\\
 +No, il valore restituito è del tutto corretto. Si raccomanda di verificare la propria interpretazione del valore, perché...
 +//En este mundo traidor, nada es verdad, ni mentira: todo es según el color del cristal con que se mira//.
lpr-a/progetto2.1273493514.txt.gz · Ultima modifica: 10/05/2010 alle 12:11 (14 anni fa) (modifica esterna)