SlideShare ist ein Scribd-Unternehmen logo
1 von 7
Downloaden Sie, um offline zu lesen
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
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:
- 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.
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.
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
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
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.

Weitere ähnliche Inhalte

Andere mochten auch (7)

Knowledge Management
Knowledge ManagementKnowledge Management
Knowledge Management
 
Tesi_Adamou
Tesi_AdamouTesi_Adamou
Tesi_Adamou
 
Internet In Biblioteca
Internet In BibliotecaInternet In Biblioteca
Internet In Biblioteca
 
Indicizzare nel mondo digitale
Indicizzare nel mondo digitaleIndicizzare nel mondo digitale
Indicizzare nel mondo digitale
 
Carla Petri. Ricerche e dati di attività sul GAP dei Servizi per le Dipendenze
Carla Petri. Ricerche e dati di attività sul GAP dei Servizi per le DipendenzeCarla Petri. Ricerche e dati di attività sul GAP dei Servizi per le Dipendenze
Carla Petri. Ricerche e dati di attività sul GAP dei Servizi per le Dipendenze
 
Informatica - uso di excel
Informatica - uso di excelInformatica - uso di excel
Informatica - uso di excel
 
metadatacopyright
metadatacopyrightmetadatacopyright
metadatacopyright
 

Mehr von graphitech

A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
graphitech
 

Mehr von graphitech (20)

A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Mission
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Mission
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainability
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainability
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screens
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screens
 
Graph Matching
Graph MatchingGraph Matching
Graph Matching
 
Shape Analysis
Shape AnalysisShape Analysis
Shape Analysis
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Library
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Library
 
WebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World WindWebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World Wind
 
Street Builder
Street BuilderStreet Builder
Street Builder
 
Street Builder
Street BuilderStreet Builder
Street Builder
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Wind
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Wind
 
Terrain Modification
Terrain ModificationTerrain Modification
Terrain Modification
 

Kürzlich hochgeladen

presentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptxpresentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptx
michelacaporale12345
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
nico07fusco
 

Kürzlich hochgeladen (20)

magia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptxmagia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptx
 
magia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptxmagia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptx
 
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptxPancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
 
a scuola di biblioVerifica: come utilizzare il test TRAAP
a scuola di biblioVerifica: come utilizzare il test TRAAPa scuola di biblioVerifica: come utilizzare il test TRAAP
a scuola di biblioVerifica: come utilizzare il test TRAAP
 
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
 
TeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxTeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docx
 
presentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptxpresentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptx
 
Gli isotopi scienze naturale seconda pres
Gli isotopi scienze naturale seconda presGli isotopi scienze naturale seconda pres
Gli isotopi scienze naturale seconda pres
 
PalestiniAurora-la conoscenzatestoita.docx
PalestiniAurora-la conoscenzatestoita.docxPalestiniAurora-la conoscenzatestoita.docx
PalestiniAurora-la conoscenzatestoita.docx
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdf
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 
Educazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpointEducazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpoint
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
Le forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docxLe forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docx
 
Pancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docxPancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docx
 
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptxPancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
 
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptxPalestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptx
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 

Arkanoid 3D MultiPlayer

  • 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.