Arkanoid 3D MultiPlayer
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Arkanoid 3D MultiPlayer

on

  • 941 views

The project involves the implementation of the famous game "Arkanoid" with the following variations:

The project involves the implementation of the famous game "Arkanoid" with the following variations:

- 3 dimensions
- The possibility to have multiplayer matches

Statistics

Views

Total Views
941
Views on SlideShare
940
Embed Views
1

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 1

http://www.graphitech.it 1

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Arkanoid 3D MultiPlayer Document Transcript

  • 1. Principi di Computer Graphics: progetto finale Michele Donadoni Cristina Di Risio Universit` di Trento a Universit` di Trento a michele.donadoni@studenti.unitn.it dirisio@disi.unitn.it Raffaele De Amicis, Giuseppe Conti 1 Introduzione Relazione per l’esame finale del corso di Principi di Computer Graphics. Il progetto prevede l’implementazione del famoso gioco “Arkanoid” con le seguenti varianti: - tre dimensioni anzich` due; e - possibilit` di giocare in due giocatori collegati alla stessa rete. a 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 met` superiore del box) che devono essere colpiti dalla pallina; a - 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 pu` regolare la visuale del gioco in due modi: con l’utilizzo del mouse oppure con la tastiera (utilizzando i tasti con o le lettere: E, S, D, F, A e Z). La base si muove tramite tastiera (freccie). Figure 1: Selezione della modalit` di gioco a
  • 2. 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, fornisce un bonus. Figure 2: Esempio di schermata dell’applicazione ` Nella modalit` di gioco con due giocatori lo scenario e il seguente: a - 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” pu` iniziare una nuova partita e scegliere il livello del gioco; o - qualunque giocatore pu` mettere in pausa il gioco. Il gioco rimane in pausa finch` lo stesso utente che lo ha interrotto, o e decide di riprenderlo; Punteggio Il giocatore vince una partita quando nel box non sono presenti mattoncini non industruttibili. Ogni volta che la pallina tocca la faccia inferiore del box, il giocatore perde una vita e finch` ha almeno una vita pu` continuare il gioco senza che venga e o ripristinata 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. Grafica ` Poich` in tre dimensioni, con lo sfondo omogeneo, non e semplice individuare la direzione della pallina, per facilitare e l’utilizzo del gioco sono stati introdotti:
  • 3. - 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 senza l’utilizzo delle librerie jogl per ruotare o traslare il sistema di assi cartesiani, ma tramite l’utilizzo delle nostre apposite matrici. Uno stack salva le matrici che utilizziamo, salvandole nel preciso ordine di inserimento, in modo tale da rendere possibile la rimozione delle ultime matrici inserite. Per identificare un punto tridimensionale utilizziamo un vettore (chiamato tupla) che memorizza le coordinate x, y e z pi` un u quarto 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 traslazione ` La matrice di traslazione rispetto ai valori x, y e z e la seguente:   1 0 0 0  0 1 0 0     0 0 1 0  x y z 1 Matrici di rotazione Sotto riportiamo le matrici di rotazione dell’angolo α (in radianti) rispetto all’asse x, y e z rispettivamente:      1 0 0 0 cos(α) 0 −sin(α) 0 cos(α) sin(α) 0 0  0 cos(α) sin(α) 0     0 1 0 0   −sin(α) cos(α) 0 0      0 −sin(α) cos(α) 0   sin(α) 0 cos(α) 0   0 0 1 0  0 0 0 1 0 0 0 1 0 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 agli angoli αx , αy , αz :   αx 0 0 0  0 αy 0 0     0 0 αz 0  0 0 0 1 Operazioni con le matrici Per ottenere un’unica matrice composta da tutte le matrici presenti nello stack vengono moltiplicate le matrici tutte partendo dall’ultima inserita.
  • 4. Sia A una matrice e P un punto con coordinate riferite al sistema di riferimento rappresentato dalla matrice A; per conoscere le 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 pi` tempo u all’utente). Ogni volta che la pallina intercetta una parete del box, deve cambiare la sua traiettoria, secondo le leggi fisiche di riflessione. Alla pallina non viene applica nessuna forza di attrito, n` di gravit` . e a ` 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 rotazione dipende 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) poich` e ora l’impatto non avviene contro un’unica parete, ma tocca due o pi` pareti del box. u Sia P = (x, y, z) il punto in cui la pallina intercetta una parete del box (le coordinate di P sono assolute). Nel momento dell’impatto, il sistema di riferimento della pallina ha un’angolazione di αy sull’asse y e αz sull’asse z (l’angolo rispetto all’asse x e sempre nullo). ` Per sapere come ruotare il sitema di riferimento della pallina, in modo tale da ottenere un rimbalzo sulla parete, vengono seguite le seguenti regole: • se la parete intercettata e laterale (destra o sinistra): il sistema di riferimento dovr` avere un’angolo αy = 180 − αy ; ` a • se la parete intercettata e posteriore o anteriore: il sistema di riferimento dovr` avere un’angolo αy = −αy ; ` a • se la parete intercettata e quella superiore: il sistema di riferimento dovr` avere un’angolo αz = −αz . ` a Gli angoli αy e αz sono sempre espressi in gradi e considerati con valori compresi tra 0 e 360. Quindi il nuovo sistema di riferimento per la pallina sar` composto dalle seguenti matrici (nell’esatto ordine): a - 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 di vista 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.
  • 5. 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 difficolt` . Ogni livello e caratterizzato da una diversa collocazione dei mattoncini a all’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 mattoncini tramite una matrice di interi di dimensione n × n × n: in questo modo ogni mattoncino e identificato tramite una precisa ` posizione nella matrice. Il mattoncino collocato nell’angolo in basso a sinistra, affiancato alla parete posteriore assume la posizione 0, 0, 0 nella matrice. Mentre il mattoncino nella posizione n, n, n e collocato nell’angolo in alto a destra adiacente ` alla 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 mattoncino stesso. 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 potr` mai cambiare) ` a • 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 velocit` ) ` a Per la rappresentazione dei mattoncini utilizziamo il metodo della matrice perch` ottimizza il passaggio di informazioni e ` tra client e server: infatti la situazione di tutti i cubetti e rappresentata in un’unica matrice tridimensionale. In questo modo evitiamo di avere tante matrici di trasformazioni quanti sono i mattoncini visualizzati, rendendo molto pi` veloce lo scambio u di 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 separate dal carattere ‘#’ ogni n righe; ogni riga deve contenere n numeri (tra 0 e 4) rappresentanti lo stato che si desidera assegnare al mattoncino in quella posizione. Il primo carattere del file rappresenter` , quindi, il mattoncino nella posizione 0, 0, 0 della matrice, mentre l’ultimo carattere a rappresenter` il mattoncino nella posizione n, n, n. a
  • 6. Sia n = 3, un esempio di file e il seguente: ` 000 000 000 # 111 131 111 # 222 232 222 Questo file produrr` un livello (rappresentato in figura 5) in cui il primo terzo (partendo dalla faccia inferiore del box) non a contiene mattoncini visualizzati, il secondo terzo contiene mattoncini rossi eccetto un mattoncino grigio (indistruttibile) al centro 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 difficolt` del a livello. Ad esempio all’aumentare del punteggio aumenter` automaticamente la velocit` della pallina. Tale evento serve per a a aumentare la difficolt` del livello poich` render` meno semplice l’intercettazione della pallina con la base. a e a ´ ` E possibile anche ottenere dei bonus. Per ottenere un bonus e necessario colpire con la pallina un mattoncino di colore giallo e intercettare con la base il cubetto lampeggiante che verr` lasciato cadere dal mattoncino colpito. a 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’unit` ; a - bonus velocit` : la velocit` della pallina viene diminuita (rendendo pi` semplica il gioco). a a u 2.6 Client-Server ` Nella modalit` di gioco per due giocatori usiamo il seguente criterio: e possibile utilizzare l’applicazione su due macchine a diverse, una macchina rappresenta il da Server e l’altra il Client. Poich` la situazione del gioco, nello stesso momento, deve essere la stessa sulla due macchine, tutte le operazioni tra matrici e vengono eseguite solamente dal server e il client riceve soltanto le matrici gi` calcolate (da utilizzare per disegnare i vari a
  • 7. 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) gi` calcolata dal server e informazioni per sapere che a mattonici visualizzare e come disegnarli. Il client invia poi al server le informazioni relative alle sue mosse. 3 Struttura dell’applicazione L’applicazione pu` essere avviata in tre diverse modalit` : o a • client: e composta dalla classe Client che si occupa di richiedere al server la matrici di traformazione degli oggetti da ` disegnare 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 e ` di calcolarle tramite la classe Manager. La classe Manager calcola gli spostamenti della pallina, che comprendono i cambi di direzione, gli angoli di riflessione sulle pareti, il rimbalzo sulle basi, l’impatto con i mattoncini, la gestione dell’eventuale mattoncino-bonus il variare della velocit` , la traccia lasciata sulla parete, l’impatto con il pavimento e il a controllo della vita persa o della partita persa. La classe Manager calcola inoltre lo spostamento della base, controllando che 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 degli eventi del client che non sono presenti nella modalit` singola. a Tutte e tre le modalit` sono costituite dalla classe GlRender. Tale classe si occupa della visualizzazione dei vari oggetti a grafici. La parte in cui vengono visualizzati gli oggetti grafici implementa gli ascoltatori del mouse e della tastiera. Gli eventi di queste periferiche vengono gestiti e salvati nella classe MovementStatus dalla quale la varie modalit` di gioco leggono i a movimenti da eseguire. ` Nella nostra applicazione ogni oggetto grafico e costituito da una diversa classe. Ognuna di queste classi contiene le propriet` dell’oggetto, come ad esempio il colore e i punti che la compongono, e il metodo display che permette di disegnare a l’oggetto. Per garantire che ciascuna di queste classi implementi il metodo display, abbiamo creato l’interfaccia Drawable che 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.