arkanoid 3d multiplayer

7

Click here to load reader

Upload: graphitech

Post on 11-May-2015

649 views

Category:

Education


2 download

DESCRIPTION

The project involves the implementation of the famous game "Arkanoid" with the following variations: - 3 dimensions - The possibility to have multiplayer matches

TRANSCRIPT

Page 1: Arkanoid 3D MultiPlayer

Principi di Computer Graphics: progetto finale

Michele Donadoni Cristina Di RisioUniversita di Trento Universita di Trento

[email protected] [email protected]

1 Introduzione

Relazione per l’esame finale del corso di Principi di Computer Graphics. Il progetto prevede l’implementazione delfamoso gioco “Arkanoid” con le seguenti varianti:

- tre dimensioni anziche due;

- possibilita di giocare in due giocatori collegati alla stessa rete.

Maggiori dettagli sulle regole del gioco sono mostrate nella successiva sotto-sezione.

1.1 Notazioni e funzionamento

Nella relazione utilizziamo le seguenti definizioni:

- box: contenitore esterno in cui si svolge il gioco;

- base: piattaforma mobile posta nella parte inferiore del box ad un’altezza prestabilita;

- mattoncini: blocchi (tipicamente collocati nella meta superiore del box) che devono essere colpiti dalla pallina;

- mattoncino-bonus: cubetto che compare colpendo un tipo particolare di mattoncino e si sposta verso il basso.

L’applicazione prevede sia l’utilizzo di un solo giocatore, sia quello con due giocatori (figura 1).L’utente puo regolare la visuale del gioco in due modi: con l’utilizzo del mouse oppure con la tastiera (utilizzando i tasti conle lettere: E, S, D, F, A e Z).La base si muove tramite tastiera (freccie).

Figure 1: Selezione della modalita di gioco

Page 2: Arkanoid 3D MultiPlayer

Esistono quattro tipi di mattoncini, differenziati in base al colore:

1. grigio: indistruttibili;

2. rossi : sparisono quando vengono colpiti;

3. blu : quando vengono colpiti diventano rossi;

4. gialli : quando vengono colpiti viene lasciato cadere un mattoncino-bonus che, se viene intercettato dalla base, fornisceun bonus.

Figure 2: Esempio di schermata dell’applicazione

Nella modalita di gioco con due giocatori lo scenario e il seguente:

- entrambi i giocatori contribuiscono ad un unico punteggio finale;

- il numero delle vite e lo stesso;

- le due basi sono collate su livelli di altezza differenti;

- si utilizza un’unica pallina, con cui entrambi i giocatori possono interagire;

- solamente l’utente “Server” puo iniziare una nuova partita e scegliere il livello del gioco;

- qualunque giocatore puo mettere in pausa il gioco. Il gioco rimane in pausa finche lo stesso utente che lo ha interrotto,decide di riprenderlo;

PunteggioIl giocatore vince una partita quando nel box non sono presenti mattoncini non industruttibili. Ogni volta che la pallina toccala faccia inferiore del box, il giocatore perde una vita e finche ha almeno una vita puo continuare il gioco senza che vengaripristinata la situazione iniziale del mattoncini. In ogni partita ci sono a disposizione 10 vite.Ogni volta che la pallina colpisce un mattoncino, il punteggio di quella partita aumenta di 10 punti.

GraficaPoiche in tre dimensioni, con lo sfondo omogeneo, non e semplice individuare la direzione della pallina, per facilitarel’utilizzo del gioco sono stati introdotti:

Page 3: Arkanoid 3D MultiPlayer

- una traccia (“impronta”) lasciata dalla pallina quando rimbalza su una parete (di breve durata);

- un effetto sonoro ogni volta che la pallina tocca una parete;

- una proiezione circolare della pallina sulla parete inferiore del box, che assume diverse dimensioni in base alla lon-tananza della pallina da terra.

2 Implementazione

2.1 Stack e matrici

Il cento del nostro sistema di riferimento e posizionato nel centro della faccia inferiore del box. Ad eccezione dei movi-menti eseguti per cambiare la visuale del box (da eseguire con il mouse), tutti gli altri movimenti vengono eseguiti senzal’utilizzo delle librerie jogl per ruotare o traslare il sistema di assi cartesiani, ma tramite l’utilizzo delle nostre appositematrici.

Uno stack salva le matrici che utilizziamo, salvandole nel preciso ordine di inserimento, in modo tale da rendere possibilela rimozione delle ultime matrici inserite.Per identificare un punto tridimensionale utilizziamo un vettore (chiamato tupla) che memorizza le coordinate x, y e z piu unquarto valore (=1) che serve per effettuare operazioni con le matrici di dimensioni 4× 4.Sotto riportiamo le matrici, dipendenti dai parametri forniti input:

Matrice di traslazioneLa matrice di traslazione rispetto ai valori x, y e z e la seguente:

1 0 0 00 1 0 00 0 1 0x y z 1

Matrici di rotazioneSotto riportiamo le matrici di rotazione dell’angolo α (in radianti) rispetto all’asse x, y e z rispettivamente:

1 0 0 00 cos(α) sin(α) 00 −sin(α) cos(α) 00 0 0 1

cos(α) 0 −sin(α) 00 1 0 0

sin(α) 0 cos(α) 00 0 0 1

cos(α) sin(α) 0 0−sin(α) cos(α) 0 0

0 0 1 00 0 0 1

Matrice di “scaling”Anche se non la utilizziamo nel codice, abbiamo definito anche la matrice per scalare il sistema di riferimento rispetto agliangoli αx, αy , αz:

αx 0 0 00 αy 0 00 0 αz 00 0 0 1

Operazioni con le matriciPer ottenere un’unica matrice composta da tutte le matrici presenti nello stack vengono moltiplicate le matrici tutte partendodall’ultima inserita.

Page 4: Arkanoid 3D MultiPlayer

Sia A una matrice e P un punto con coordinate riferite al sistema di riferimento rappresentato dalla matrice A; per conoscerele coordinate assolute di P si moltiplica la matrice A per il vettore rappresentante il punto P .

2.2 Traiettoria della pallina

La pallina parte da una determinata altezza con un’angolazione casuale rivolta verso l’alto (in modo da concede piu tempoall’utente). Ogni volta che la pallina intercetta una parete del box, deve cambiare la sua traiettoria, secondo le leggi fisiche diriflessione. Alla pallina non viene applica nessuna forza di attrito, ne di gravita.La posizione della pallina e caratterizzata da una propria matrice: il centro del sistema rappresentato da tale matrice costitu-isce il centro della pallina.La pallina si muove tramite traslazioni sull’asse delle x e rotazioni sugli assi y o z. L’ampiezza dell’angolo di rotazionedipende dall’angolo di impatto con la parete e dal tipo di parete (frontale, superiore, laterale, ecc...).Quando la pallina intercetta uno spigolo, la nuova direzione e casuale (entro un certo range dipendente dallo spigolo) poicheora l’impatto non avviene contro un’unica parete, ma tocca due o piu pareti del box.

Sia P = (x, y, z) il punto in cui la pallina intercetta una parete del box (le coordinate di P sono assolute). Nel momentodell’impatto, il sistema di riferimento della pallina ha un’angolazione di αy sull’asse y e αz sull’asse z (l’angolo rispettoall’asse x e sempre nullo).Per sapere come ruotare il sitema di riferimento della pallina, in modo tale da ottenere un rimbalzo sulla parete, vengonoseguite le seguenti regole:

• se la parete intercettata e laterale (destra o sinistra): il sistema di riferimento dovra avere un’angolo αy = 180− αy ;

• se la parete intercettata e posteriore o anteriore: il sistema di riferimento dovra avere un’angolo αy = −αy ;

• se la parete intercettata e quella superiore: il sistema di riferimento dovra avere un’angolo αz = −αz .

Gli angoli αy e αz sono sempre espressi in gradi e considerati con valori compresi tra 0 e 360. Quindi il nuovo sistema diriferimento per la pallina sara composto dalle seguenti matrici (nell’esatto ordine):

- aggiunta di una matrice di traslazione di x, y, z rispettivamente sull’asse x, y, z;

- aggiunta di una matrice di rotazione rispetto all’asse y di αy;

- aggiunta di una matrice di rotazione rispetto all’asse z di αz;

2.3 Movimento della base

La base e libera di muoversi all’interno del box ad un’altezza prefissata.La base mantiene sempre una posizione in cui i suoi lati siano paralleli con quelli del box (figura 3).Le freccie sulla tastiera determinano il movimento della base: la direzione “diritto” per la base e rappresentata dal punto divista dell’utente in quel preciso momento (figura 4).

Figure 3: Esempio di posizione corretta dalla base rispetto al box. Per la base sono ammesse solo traslazioni, non rotazioni.

Page 5: Arkanoid 3D MultiPlayer

Figure 4: In questa visuale, premendo la freccia “su”, la base si sposta nella direzione indicata dalla freccia rossa.

2.4 Mattoncini

Il gioco e suddiviso in livelli di diversa difficolta. Ogni livello e caratterizzato da una diversa collocazione dei mattonciniall’interno del box. Per ogni livello un file determina la posizione dei mattoncini.Sia n×n×n il numero massimo di mattoncini non sovrapposti collocati all’interno del box. Rappresentiamo tali mattoncinitramite una matrice di interi di dimensione n × n × n: in questo modo ogni mattoncino e identificato tramite una precisaposizione nella matrice. Il mattoncino collocato nell’angolo in basso a sinistra, affiancato alla parete posteriore assume laposizione 0, 0, 0 nella matrice. Mentre il mattoncino nella posizione n, n, n e collocato nell’angolo in alto a destra adiacentealla parete frontale.Ogni volta che la pallina intercetta un mattoncino viene solo modificato l’elemento della matrice che rappresenta tale mat-toncino.Ad ogni mattoncino, quindi, viene associato un valore intero memorizzato nella matrice che identifica lo stato del mattoncinostesso. I valori che rappresentano un mattoncino possono essere i seguenti:

• 0 se il mattoncino NON viene visualizzato;

• 1 se il mattoncino e rosso (se viene colpito passa a 0);

• 2 se il mattoncino e blu (se viene colpito passa a 1)

• 3 se il mattoncino e grigio (indistruttibile) (il valore non potra mai cambiare)

• 4 se il mattoncino e giallo (se viene colpito passa a 0 e lascia cadere un cubetto-bonus che aumenta il numero di vite)

• 5 se il mattoncino e giallo (se viene colpito passa a 0 e lascia cadere un cubetto-bonus che diminuisce la velocita)

Per la rappresentazione dei mattoncini utilizziamo il metodo della matrice perche ottimizza il passaggio di informazionitra client e server: infatti la situazione di tutti i cubetti e rappresentata in un’unica matrice tridimensionale. In questo modoevitiamo di avere tante matrici di trasformazioni quanti sono i mattoncini visualizzati, rendendo molto piu veloce lo scambiodi informazioni (utilizziamo un’unica matrice).

2.4.1 Livelli

L’applicazione consente di aggiungere nuovi livelli, aggiungendo solamente un file di descrizione nell’apposita cartella.Il file di descrizione contiene informazioni riguadanti lo stato di tutti i mattoncini e deve essere strutturato nel seguente modo:deve contenere n× n (n rappresenta il numero massimo di mattoncini non sovrapposti lungo un lato del box) righe separatedal carattere ‘#’ ogni n righe; ogni riga deve contenere n numeri (tra 0 e 4) rappresentanti lo stato che si desidera assegnareal mattoncino in quella posizione.Il primo carattere del file rappresentera, quindi, il mattoncino nella posizione 0, 0, 0 della matrice, mentre l’ultimo carattererappresentera il mattoncino nella posizione n, n, n.

Page 6: Arkanoid 3D MultiPlayer

Sia n = 3, un esempio di file e il seguente:

000000000#111131111#222232222

Questo file produrra un livello (rappresentato in figura 5) in cui il primo terzo (partendo dalla faccia inferiore del box) noncontiene mattoncini visualizzati, il secondo terzo contiene mattoncini rossi eccetto un mattoncino grigio (indistruttibile) alcentro e l’ultimo terzo contiene mattoncini blu con al centro un mattoncino grigio.

Figure 5: Situazione dei mattoncini generati dall’esempio di file proposto nella sotto-sezione Livelli.

2.5 Bonus

Nel gioco abbiamo introdotto alcuni eventi che mirano a premiare la bravura del giocatore e ad aumentare la difficolta dellivello. Ad esempio all’aumentare del punteggio aumentera automaticamente la velocita della pallina. Tale evento serve peraumentare la difficolta del livello poiche rendera meno semplice l’intercettazione della pallina con la base.

E possibile anche ottenere dei bonus. Per ottenere un bonus e necessario colpire con la pallina un mattoncino di coloregiallo e intercettare con la base il cubetto lampeggiante che verra lasciato cadere dal mattoncino colpito.Esistono due tipi di bonus in base al tipo di cubetto-bonus che si intercetta:

- bonus vita: il numero delle vite viene incrementato di un’unita;

- bonus velocita: la velocita della pallina viene diminuita (rendendo piu semplica il gioco).

2.6 Client-Server

Nella modalita di gioco per due giocatori usiamo il seguente criterio: e possibile utilizzare l’applicazione su due macchinediverse, una macchina rappresenta il da Server e l’altra il Client.Poiche la situazione del gioco, nello stesso momento, deve essere la stessa sulla due macchine, tutte le operazioni tra matricivengono eseguite solamente dal server e il client riceve soltanto le matrici gia calcolate (da utilizzare per disegnare i vari

Page 7: Arkanoid 3D MultiPlayer

componenti).Quindi nelle funzioni “display” degli oggetti non vengono mai calcolate matrici di trasformazione. Il client, ad ogni iter-azione, riceve una matrice per ogni oggetto (base, pallina, traccie) gia calcolata dal server e informazioni per sapere chemattonici visualizzare e come disegnarli. Il client invia poi al server le informazioni relative alle sue mosse.

3 Struttura dell’applicazione

L’applicazione puo essere avviata in tre diverse modalita:

• client: e composta dalla classe Client che si occupa di richiedere al server la matrici di traformazione degli oggetti dadisegnare e di inviare al server gli spostamenti effettuati.

• server: e composta dalla classe Server che si occupa di inviare al client le matrici di trasformazione degli oggetti edi calcolarle tramite la classe Manager. La classe Manager calcola gli spostamenti della pallina, che comprendono icambi di direzione, gli angoli di riflessione sulle pareti, il rimbalzo sulle basi, l’impatto con i mattoncini, la gestionedell’eventuale mattoncino-bonus il variare della velocita, la traccia lasciata sulla parete, l’impatto con il pavimento e ilcontrollo della vita persa o della partita persa. La classe Manager calcola inoltre lo spostamento della base, controllandoche la base stessa non esca dal box e se intercetta i mattoncini-bonus.

• giocatore singolo: si comporta come il server, ad eccezione della parte riguardante la rete e la computazione deglieventi del client che non sono presenti nella modalita singola.

Tutte e tre le modalita sono costituite dalla classe GlRender. Tale classe si occupa della visualizzazione dei vari oggettigrafici. La parte in cui vengono visualizzati gli oggetti grafici implementa gli ascoltatori del mouse e della tastiera. Gli eventidi queste periferiche vengono gestiti e salvati nella classe MovementStatus dalla quale la varie modalita di gioco leggono imovimenti da eseguire.

Nella nostra applicazione ogni oggetto grafico e costituito da una diversa classe. Ognuna di queste classi contiene leproprieta dell’oggetto, come ad esempio il colore e i punti che la compongono, e il metodo display che permette di disegnarel’oggetto. Per garantire che ciascuna di queste classi implementi il metodo display, abbiamo creato l’interfaccia Drawableche viene estesa da ogni oggetto grafico.Le classi di oggetti grafici sono le seguenti:

- Base: per la base;

- Bonus: per i mattoncini-bonus;

- Box: per disegnare gli spigoli del box;

- Cube: per i mattoncini;

- Floor: per la griglia sulla faccia inferiore del box;

- Impronta: per la traccia della pallina lasciata sulla parete;

- Pallina: per la pallina e la sua proiezione a terra.