SlideShare ist ein Scribd-Unternehmen logo
1 von 9
Downloaden Sie, um offline zu lesen
ARKANOID 3D

Progetto di computer graphics
      di Marco Cattani
       Anno 2007/2008
Raffaele De Amicis, Giuseppe Conti
INTRODUZIONE

Scopo di questo progetto è lo sviluppo di un gioco in un ambiente a 3 dimensioni
basato su un famoso gioco 2D del passato: Arkanoid.
I precedenti tentativi di conversione di giochi 2D in giochi 3D sono numerosi. Spesso
però l’introduzione di una nuova dimensione comporta una perdità di giocabilità
rispetto alla versione precedente e lo rende meno divertente o interessante.

Trasformare quindi Arkanoid in un gioco a tre dimensioni richiede un’ attenta analisi
dei requisiti ed un’accurata modifica delle dinamiche di gioco in modo da non perdere
l’originale giocabilità.


ANALISI DEI REQUISITI FUNZIONALI

Il gioco dovrà condividere le regole principali del gioco arkanoid originale.
Le modifiche funzionali che il gioco subirà dovranno ispirarsi ad altri giochi famosi in
maniera che l’utente non si trovi disorientato da modalità di gioco completamente
nuove.

La pallina di arkanoid con cui l’utente distrugge i blocchi viene sostituita da una sfera
in 3 dimensioni. Sono quindi previste collisioni e rimbalzi con i blocchi e con le pareti
nelle 3 dimensioni x, y e z.

Al posto dei blocchi vengono utilizzate delle sfere colorate; i blocchi/sfera potranno
essere di vari colori ed ogni colore abiliterà una modalità del gioco speciale che
modificherà la difficoltà dello stesso. Questo requisito si ispira al gioco puzzle
bubble.

Quando una modalità speciale è attiva, la distruzione di una sfera speciale non
modifica l’attuale modalità. Il giocatore potrà approffitare di questo per distruggere le
sfere che attivano modalità di gioco difficili.

Il giocatore avrà a disposizione un numero finito di vite (3). Ogni volta che la pallina
rimbalzerà al di fuori della piattaforma il numero delle vite verrà decrementato di 1.
Quando un giocatore perde una vita, la pallina verrà spostata al centro della
piattaforma e la sua velocità sarà portata a 0. Il giocatore potrà decidere, premendo un
tasto, quando far partire nuovamente la pallina.

Il compito del giocatore è quello di muovere la piattaforma evitando che la pallina
rimbalzi fuori da essa e, con quest’ultima, distruggere tutti i blocchi/sfera.

Ogni blocco/sfera distrutto fa guadagnare al giocatore 1 punto.

Il gioco termina quando il giocatore non ha più vite.

Dovranno essere visualizzate le informazioni di gioco come vite rimaste, punti
accumulati e modalità di gioco corrente.
ANALISI DEI REQUISITI NON FUNZIONALI

Il gioco verrà implementato in linguaggio Java. La grafica verrà creata e gestita con le
librerie JOGL, che sono un porting java delle famose librerie openGl.Queste ultime
permetteranno di utilizzare la potenza di calcolo della GPU presente sulla scheda
video per fare il rendering delle immagini del gioco ed allegerire il carico del
processore cha ha anche il compito di calcolare le dinamiche fisiche degli oggetti del
gioco.

Al posto della barra che l’utente muove in arkanoid 2D e sui cui la pallina rimbalza,
verrà utilizzata una piattaforma quadrata di materiale semi-trasparente.

La posizione della telecamera (la vista dell’utente) sarà sotto la piattaforma. Questa
visuale si ispira alla versione 3D di arkanoid disponibile per Ipod.

Al posto dei blocchi vengono utilizzate delle sfere colorate.

Per riconoscere la pallina dai blocchi/sfera verrà utilizzato un colore speciale (rosso)
per identificare la pallina.

A fini didattici, le funzioni per creare geometrie e le funzioni di trasformazione di
openGl verranno sovrascritte da funzioni create dallo studente.

Al fine di mantenere leggero il carico del processore (le geometrie implementate non
saranno ottimizzate come quelle di openGl) le geometrie delle sfere verranno
disegnate come mezze sfere (la parte non visibile della sfera non verrà quindi creata)

Il numero e il colore dei blocchi/sfera viene generato in maniera casuale. Questi valori
possono essere controllati in base alla difficoltà di gioco che siu vuole ottenere.

Il gioco verrà controllato da tastiera. I tasti direzionali permetteranno di spostare la
piattaforma mentre la barra spaziatrice permetterà di lanciare la pallina all’inizio del
gioco.

Le regole del gioco saranno tutte parametrizzate in maniera tale da poter aggiungere
effetti e modalità sempre nuovi senza pesanti interventi sul codice.

Quando il gioco termina, verrà visualizzata una gradevole rotazione 3D del piano di
gioco.

Lo spostamento da parte dell’utente della piattaforma comporterà una leggera
rotazione del mondo in modo da rendere maggiormente l’effetto 3D.
DIAGRAMMA UML DELLE CLASSI


 TRANSFORM                                  POINT                                  KEYNAVIGATOR

 + transformpoint(p,f,f,f,f,f,f)            + point(i,i,i)                         + keypressed(k)
 + translatepoint(p,f,f,f)                  + point(f,f,f)                         + keypreleased(k)
 + rotatepoint(p,f,f,f)                                                            + keyptyped(k)
 - moltiplicazione([][],[])                                                        - gestisci(k,b)


                                                                                                       1




BALL                                   BLOCK                          PLATTFORM
+ ball(f,f,f)                          + block(f,f,f)                 + plattform(f,f,f)
+ step(v)                              + draw (g)                     + draw (g)
+ draw (g)

                                                   n                       1
                1




                1
                                   1
GLRENDERER                                                   draw()                                    1
+ init(ga)                         1
+ display(ga)                                                                       PRINCIPALE
+ reshape (ga,i,i,i,i)                  1                                      1
- pareti(g)                                                                         + main()



LEGENDA:

f         : float
i         : int
v         : Vector
g         : GL
ga        : glDrawable
b         : boolean
k         : keyevent
[]        : array
[][]      : matrice
SPECIFICHE DEL PROGETTO

Al fine di soddisfare i requisiti funzionali e non del progetto è necessario affrontare
alcune problematiche


GESTIONE DEI RIMBALZI

Nel gioco, la sfera può scontrarsi con vari oggetti:
    - blocchi/sfera
    - pareti del mondo
    - piattaforma
In base a quale oggetto la sfera toccherà bisognerà comportarsi in maniera diversa.
Per gestire il rimbalzo della sfera in modo credibile utilizziamo una semplice legge,
ispirata alla legge fisica di riflessione dei raggi su una superficie (ignoreremo la parte
di legge che parla dei raggi rifratti in quanto non coerente con il nostro problema).




(il raggio può essere visto come la scia della pallina vista dall’alto. Il riflesso orrizzontale avviene
sull’asse x mentre quello verticale avviene sull’asse z)

Se nella logica utilizzata dal gioco 360° sono rappresentati dal numero 1.0 e 0° da 0.0,
allora la riflessione orrizontale e verticale potrà essere calcolata con le seguenti
formule:

rifl.orrizontale          α= 1.0 – α
rifl.verticale            α = 0.5 – α (se la pallina sta proseguendo in avanti)
                           OPPURE
                           α = 1.5 – α (se la pallina sta proseguento indietro)

con α l’angolo di direzione della pallina

Nel codice, il rimbalzo viene gestito dalla funzione step(v) della classe Ball (vedi
diagramma classi).
ROTAZIONE E SPOSTAMENTO DEL MONDO

La rotazione del mondo viene introdotta nel gioco al fine di dare una profondità al
gioco. Qualcosa che Arkanoid 2D non può dare al giocatore.
Si è deciso di ruotare leggermente tutto il mondo allo spostarsi della piattaforma per
dare l’impressione che l’utente routi una sfera di vetro per controllare la piattaforma.
Al termine del gioco viene inoltre fatto ruotare tutta la piattaforma di gioco su sé
stessa replicando una classica animazione di game over utilizzata su molti giochi del
passato.

Il compito di ruotare il mondo del gioco viene assegnato alla classe Transform (vedi
diagramma delle classi).
Più precisamente, per muovere leggermente il mondo viene utilizzata la sola funzione
di rotazione, mentre quando il gioco termina utilizziamo sia la funzione di traslazione
che quella di rotazione.

Per traslare e ruotare i punti, la classe Transform utilizza le matrici di traslazione e
rotazione su un piano a 3 dimensioni.

                                    1      0      0     Tx

                                    0      1      0     Ty

                                    0      0      1     Tz

                                    0      0      0      1
                                    Matrice di Traslazione


                                   cos    -sin    0      0

                                   sin    cos     0      0

                                    0      0      1      0

                                    0      0      0      1
                            Matrice di Rotazione attorno all’asse Z

Le matrici sopra riportate sono un esempio delle matrici utilizzate per traslare e
ruotare i punti di un oggetto. Per ottenere effetti più complessi (come ruotare un
oggetto con centro non nell’origine) sarà necessario combinare in vari modi le matrici
di transizione e rotazione.
GESTIONE DELLE COLLISIONI

Conoscere la posizione degli oggetti del gioco è necessario per la gestione delle
collisioni.
La posizione delle pareti è memorizzata nelle variabili statiche del gioco, la posizione
della piattaforma è ottenuta dalle funzioni getX() e getY() dell’oggetto (di tipo
Plattform) mentre la posizione dei blocchi/sfera viene ricavata da un vettore di oggetti
(di tipo Block) passato come parametro alla funzione step(v).
Passare come parametro il vettore dei blocchi/sfera alla funzione step() permette a
quest’ultima di eliminare dal vettore i blocchi colpiti dalla sfera in quello step.

La gestione delle collisioni avviene verificando la distanza fra le coordinate (x,y,z)
della pallina e quelle degli altri oggetti.
Più precisamente se le coordinate della pallina si avvicinano a una distanza minore o
uguale al raggio della stessa ad un oggetto, quest’ultimo sarà considerato in collisione
con la pallina stessa.
Se l’oggetto in collisione è una parete o la piattaforma, la pallina rimbalzerà e non
succederà altro.
Un caso speciale è quando la collisione avviene con la parete che sta sotto la
piattaforma. In quel caso il giocatore perderà una vita e la posizione della pallina
verrà resettata al centro della piattaforma (la direzione della stessa viene generata in
maniera quasi casuale).
Se invece l’oggetto in collisione è un blocco/sfera allora questo verrà distrutto
(rimosso dal vettore in cui era memorizzato) e, se il blocco era di tipo speciale, verrà
attivata la modalità di gioco ad esso associata.
GESTIONE DELLE MODALITA’ DI GIOCO SPECIALI

Esistono delle modalità di gioco speciali che permettono di rendere il gioco più vario
e meno noioso.
Queste modalità vengono attivate se la pallina colpisce un blocco/sfera di un colore
speciale e si sta giocando nella modalità normale (non è quindi possibile sommare più
effetti speciali).
Due modalità speciali non possono essere sommate per motivi di giocabilità. Alcune
modalità, se sommate, renderebbero il gioco troppo difficile da proseguire.
Il programma prevede che sia facile modificare, aggiungere o rimuovere modalità
speciali al gioco.In questa maniera è possibile rinnovare il gioco o creare nuovi livelli
intervenendo in maniera poco pesante sul codice.


Le modalità previste attualmente nel gioco sono elencate nella lista seguente ed il loro
nome si ispire al colore del blocco/sfera che le attiva.

ORANGE JUICE: modalità normale. Viene attivata con i blocchi/sfera arancio.
YELLOW DRUGS: modalità droga: lo schema di gioco gira su se stesso e rende
davvero arduo controllare la piattaforma. Viene attivata con i blocchi/sfera gialli.
BLUE SPEED: modalità veloce: la pallina aumenta la sua velocità. Viene attivata con
i blocchi/sfera blu.
GREEN BREATH: modalità respiro: le pareti dello schema di gioco si ingrandiscono
sempre più. Raggiunto un certo limite tornano alla loro dimensione. Viene attivata
con i blocchi/sfera verdi.
PINK PLEASURE: modalità passatempo: le pareti orizzontali dello schema di gioco e
la piattaforma si allargano, regalando al giocatore un po’ di relax. Viene attivata con i
blocchi/sfera fuxia.
SILVER SHADOW: modalità oscurata: il colore della piattaforma diventa sempre più
opaco rendendo difficile al giocatore seguire la pallina. Viene attivata con i
blocchi/sfera argento.
VIOLE(N)T BOMB: modalità bomba: la dimensione della pallina si ingrandisce
sempre più con conseguenze disastrose. Viene attivata con i blocchi/sfera viola.
GESTIONE DEL CONTROLLER DI GIOCO (TASTIERA)

La gestione del gioco viene effettuata da tastiera ed è molto semplice.
Con le freccie direzionali l’utente può spostare la piattaforma in maniera che la
pallina rimbalzi su di essa.
All’inizio del gioco o dopo aver perso una vita la pallina verra posizionata al centro
della piattaforma e l’utente potrà far ripartire il gioco premendo la barra spaziatrice.
La gestione dei comandi che l’utente digita alla tastiera e assicurata dalla
classeKeynavigator (vedi diagramma delle classi). Quest’ultima permette e gestisce
anche la pressione di più tasti in contemporanea (spostamento trasversale).
Lo stato dei tasti premuti dall’utente viene memorizzato nelle variabili statiche del
gioco.

FUTURI MIGLIORAMENTI

Molti sono i possibili miglioramenti che possono essere applicati al gioco.
Personalmente penso che il gioco possa guadagnare molto aumentando le modalità
speciali e creando ingegnosi metodi di controllo piuttosto che migliorando la fisica o
la grafica.
Penso infatti che ci siano molti (anche troppi) i giochi la cui grafica è stupefacente o
la cui fisica è quasi reale, ma che siano davvero rari i giochi innovativi e rivoluzionari
come pac-man tetris o arkanoid che rimangono divertenti e giocabili negli anni
nonostante i progressi dei motori fisici e grafici.

Per arkanoid 3D si potrebbe pensare a modalità con più palline, magari controllate da
più giocatori che possono eliminarsi una con l’altra secondo un concetto di resistenza.
Oppure si potrebbe pensare a sistemi di controllo con le mani di due piattaforme che
si muovono su una sfera (con i blocchi/sfera all’interno di essa).

Un altro miglioramento, più concreto ma comunque innovativo, potrebbe essere
quello di dotare i blocchi/sfera di intelligenza artificiale che gli permetta di cercare di
schivare la pallina (un po’ come se si giocasse a palla prigioniera).

Weitere ähnliche Inhalte

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 manipolationgraphitech
 
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 manipolationgraphitech
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainabilitygraphitech
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screensgraphitech
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screensgraphitech
 
Graph Matching
Graph MatchingGraph Matching
Graph Matchinggraphitech
 
Shape Analysis
Shape AnalysisShape Analysis
Shape Analysisgraphitech
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Librarygraphitech
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Librarygraphitech
 
WebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World WindWebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World Windgraphitech
 
Street Builder
Street BuilderStreet Builder
Street Buildergraphitech
 
Street Builder
Street BuilderStreet Builder
Street Buildergraphitech
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Windgraphitech
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Windgraphitech
 
Terrain Modification
Terrain ModificationTerrain Modification
Terrain Modificationgraphitech
 
Terrain Modification
Terrain ModificationTerrain Modification
Terrain Modificationgraphitech
 
YARCA (Yet Another Raycasting Application) Project
YARCA (Yet Another Raycasting Application) ProjectYARCA (Yet Another Raycasting Application) Project
YARCA (Yet Another Raycasting Application) Projectgraphitech
 
YARCA (Yet Another Raycasting Application) Project
YARCA (Yet Another Raycasting Application) ProjectYARCA (Yet Another Raycasting Application) Project
YARCA (Yet Another Raycasting Application) Projectgraphitech
 
Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...
Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...
Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...graphitech
 
Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...
Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...
Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...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
 
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
 
Terrain Modification
Terrain ModificationTerrain Modification
Terrain Modification
 
YARCA (Yet Another Raycasting Application) Project
YARCA (Yet Another Raycasting Application) ProjectYARCA (Yet Another Raycasting Application) Project
YARCA (Yet Another Raycasting Application) Project
 
YARCA (Yet Another Raycasting Application) Project
YARCA (Yet Another Raycasting Application) ProjectYARCA (Yet Another Raycasting Application) Project
YARCA (Yet Another Raycasting Application) Project
 
Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...
Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...
Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...
 
Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...
Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...
Implementation of Hybrid Terrain Representation in Nasa WorldWind: Regular Gr...
 

Kürzlich hochgeladen

IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiorevaleriodinoia35
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxOrianaOcchino
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldivaleriodinoia35
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativovaleriodinoia35
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 

Kürzlich hochgeladen (9)

IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiore
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptx
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldi
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativo
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 

Arkanoid 3D

  • 1. ARKANOID 3D Progetto di computer graphics di Marco Cattani Anno 2007/2008 Raffaele De Amicis, Giuseppe Conti
  • 2. INTRODUZIONE Scopo di questo progetto è lo sviluppo di un gioco in un ambiente a 3 dimensioni basato su un famoso gioco 2D del passato: Arkanoid. I precedenti tentativi di conversione di giochi 2D in giochi 3D sono numerosi. Spesso però l’introduzione di una nuova dimensione comporta una perdità di giocabilità rispetto alla versione precedente e lo rende meno divertente o interessante. Trasformare quindi Arkanoid in un gioco a tre dimensioni richiede un’ attenta analisi dei requisiti ed un’accurata modifica delle dinamiche di gioco in modo da non perdere l’originale giocabilità. ANALISI DEI REQUISITI FUNZIONALI Il gioco dovrà condividere le regole principali del gioco arkanoid originale. Le modifiche funzionali che il gioco subirà dovranno ispirarsi ad altri giochi famosi in maniera che l’utente non si trovi disorientato da modalità di gioco completamente nuove. La pallina di arkanoid con cui l’utente distrugge i blocchi viene sostituita da una sfera in 3 dimensioni. Sono quindi previste collisioni e rimbalzi con i blocchi e con le pareti nelle 3 dimensioni x, y e z. Al posto dei blocchi vengono utilizzate delle sfere colorate; i blocchi/sfera potranno essere di vari colori ed ogni colore abiliterà una modalità del gioco speciale che modificherà la difficoltà dello stesso. Questo requisito si ispira al gioco puzzle bubble. Quando una modalità speciale è attiva, la distruzione di una sfera speciale non modifica l’attuale modalità. Il giocatore potrà approffitare di questo per distruggere le sfere che attivano modalità di gioco difficili. Il giocatore avrà a disposizione un numero finito di vite (3). Ogni volta che la pallina rimbalzerà al di fuori della piattaforma il numero delle vite verrà decrementato di 1. Quando un giocatore perde una vita, la pallina verrà spostata al centro della piattaforma e la sua velocità sarà portata a 0. Il giocatore potrà decidere, premendo un tasto, quando far partire nuovamente la pallina. Il compito del giocatore è quello di muovere la piattaforma evitando che la pallina rimbalzi fuori da essa e, con quest’ultima, distruggere tutti i blocchi/sfera. Ogni blocco/sfera distrutto fa guadagnare al giocatore 1 punto. Il gioco termina quando il giocatore non ha più vite. Dovranno essere visualizzate le informazioni di gioco come vite rimaste, punti accumulati e modalità di gioco corrente.
  • 3. ANALISI DEI REQUISITI NON FUNZIONALI Il gioco verrà implementato in linguaggio Java. La grafica verrà creata e gestita con le librerie JOGL, che sono un porting java delle famose librerie openGl.Queste ultime permetteranno di utilizzare la potenza di calcolo della GPU presente sulla scheda video per fare il rendering delle immagini del gioco ed allegerire il carico del processore cha ha anche il compito di calcolare le dinamiche fisiche degli oggetti del gioco. Al posto della barra che l’utente muove in arkanoid 2D e sui cui la pallina rimbalza, verrà utilizzata una piattaforma quadrata di materiale semi-trasparente. La posizione della telecamera (la vista dell’utente) sarà sotto la piattaforma. Questa visuale si ispira alla versione 3D di arkanoid disponibile per Ipod. Al posto dei blocchi vengono utilizzate delle sfere colorate. Per riconoscere la pallina dai blocchi/sfera verrà utilizzato un colore speciale (rosso) per identificare la pallina. A fini didattici, le funzioni per creare geometrie e le funzioni di trasformazione di openGl verranno sovrascritte da funzioni create dallo studente. Al fine di mantenere leggero il carico del processore (le geometrie implementate non saranno ottimizzate come quelle di openGl) le geometrie delle sfere verranno disegnate come mezze sfere (la parte non visibile della sfera non verrà quindi creata) Il numero e il colore dei blocchi/sfera viene generato in maniera casuale. Questi valori possono essere controllati in base alla difficoltà di gioco che siu vuole ottenere. Il gioco verrà controllato da tastiera. I tasti direzionali permetteranno di spostare la piattaforma mentre la barra spaziatrice permetterà di lanciare la pallina all’inizio del gioco. Le regole del gioco saranno tutte parametrizzate in maniera tale da poter aggiungere effetti e modalità sempre nuovi senza pesanti interventi sul codice. Quando il gioco termina, verrà visualizzata una gradevole rotazione 3D del piano di gioco. Lo spostamento da parte dell’utente della piattaforma comporterà una leggera rotazione del mondo in modo da rendere maggiormente l’effetto 3D.
  • 4. DIAGRAMMA UML DELLE CLASSI TRANSFORM POINT KEYNAVIGATOR + transformpoint(p,f,f,f,f,f,f) + point(i,i,i) + keypressed(k) + translatepoint(p,f,f,f) + point(f,f,f) + keypreleased(k) + rotatepoint(p,f,f,f) + keyptyped(k) - moltiplicazione([][],[]) - gestisci(k,b) 1 BALL BLOCK PLATTFORM + ball(f,f,f) + block(f,f,f) + plattform(f,f,f) + step(v) + draw (g) + draw (g) + draw (g) n 1 1 1 1 GLRENDERER draw() 1 + init(ga) 1 + display(ga) PRINCIPALE + reshape (ga,i,i,i,i) 1 1 - pareti(g) + main() LEGENDA: f : float i : int v : Vector g : GL ga : glDrawable b : boolean k : keyevent [] : array [][] : matrice
  • 5. SPECIFICHE DEL PROGETTO Al fine di soddisfare i requisiti funzionali e non del progetto è necessario affrontare alcune problematiche GESTIONE DEI RIMBALZI Nel gioco, la sfera può scontrarsi con vari oggetti: - blocchi/sfera - pareti del mondo - piattaforma In base a quale oggetto la sfera toccherà bisognerà comportarsi in maniera diversa. Per gestire il rimbalzo della sfera in modo credibile utilizziamo una semplice legge, ispirata alla legge fisica di riflessione dei raggi su una superficie (ignoreremo la parte di legge che parla dei raggi rifratti in quanto non coerente con il nostro problema). (il raggio può essere visto come la scia della pallina vista dall’alto. Il riflesso orrizzontale avviene sull’asse x mentre quello verticale avviene sull’asse z) Se nella logica utilizzata dal gioco 360° sono rappresentati dal numero 1.0 e 0° da 0.0, allora la riflessione orrizontale e verticale potrà essere calcolata con le seguenti formule: rifl.orrizontale  α= 1.0 – α rifl.verticale  α = 0.5 – α (se la pallina sta proseguendo in avanti) OPPURE α = 1.5 – α (se la pallina sta proseguento indietro) con α l’angolo di direzione della pallina Nel codice, il rimbalzo viene gestito dalla funzione step(v) della classe Ball (vedi diagramma classi).
  • 6. ROTAZIONE E SPOSTAMENTO DEL MONDO La rotazione del mondo viene introdotta nel gioco al fine di dare una profondità al gioco. Qualcosa che Arkanoid 2D non può dare al giocatore. Si è deciso di ruotare leggermente tutto il mondo allo spostarsi della piattaforma per dare l’impressione che l’utente routi una sfera di vetro per controllare la piattaforma. Al termine del gioco viene inoltre fatto ruotare tutta la piattaforma di gioco su sé stessa replicando una classica animazione di game over utilizzata su molti giochi del passato. Il compito di ruotare il mondo del gioco viene assegnato alla classe Transform (vedi diagramma delle classi). Più precisamente, per muovere leggermente il mondo viene utilizzata la sola funzione di rotazione, mentre quando il gioco termina utilizziamo sia la funzione di traslazione che quella di rotazione. Per traslare e ruotare i punti, la classe Transform utilizza le matrici di traslazione e rotazione su un piano a 3 dimensioni. 1 0 0 Tx 0 1 0 Ty 0 0 1 Tz 0 0 0 1 Matrice di Traslazione cos -sin 0 0 sin cos 0 0 0 0 1 0 0 0 0 1 Matrice di Rotazione attorno all’asse Z Le matrici sopra riportate sono un esempio delle matrici utilizzate per traslare e ruotare i punti di un oggetto. Per ottenere effetti più complessi (come ruotare un oggetto con centro non nell’origine) sarà necessario combinare in vari modi le matrici di transizione e rotazione.
  • 7. GESTIONE DELLE COLLISIONI Conoscere la posizione degli oggetti del gioco è necessario per la gestione delle collisioni. La posizione delle pareti è memorizzata nelle variabili statiche del gioco, la posizione della piattaforma è ottenuta dalle funzioni getX() e getY() dell’oggetto (di tipo Plattform) mentre la posizione dei blocchi/sfera viene ricavata da un vettore di oggetti (di tipo Block) passato come parametro alla funzione step(v). Passare come parametro il vettore dei blocchi/sfera alla funzione step() permette a quest’ultima di eliminare dal vettore i blocchi colpiti dalla sfera in quello step. La gestione delle collisioni avviene verificando la distanza fra le coordinate (x,y,z) della pallina e quelle degli altri oggetti. Più precisamente se le coordinate della pallina si avvicinano a una distanza minore o uguale al raggio della stessa ad un oggetto, quest’ultimo sarà considerato in collisione con la pallina stessa. Se l’oggetto in collisione è una parete o la piattaforma, la pallina rimbalzerà e non succederà altro. Un caso speciale è quando la collisione avviene con la parete che sta sotto la piattaforma. In quel caso il giocatore perderà una vita e la posizione della pallina verrà resettata al centro della piattaforma (la direzione della stessa viene generata in maniera quasi casuale). Se invece l’oggetto in collisione è un blocco/sfera allora questo verrà distrutto (rimosso dal vettore in cui era memorizzato) e, se il blocco era di tipo speciale, verrà attivata la modalità di gioco ad esso associata.
  • 8. GESTIONE DELLE MODALITA’ DI GIOCO SPECIALI Esistono delle modalità di gioco speciali che permettono di rendere il gioco più vario e meno noioso. Queste modalità vengono attivate se la pallina colpisce un blocco/sfera di un colore speciale e si sta giocando nella modalità normale (non è quindi possibile sommare più effetti speciali). Due modalità speciali non possono essere sommate per motivi di giocabilità. Alcune modalità, se sommate, renderebbero il gioco troppo difficile da proseguire. Il programma prevede che sia facile modificare, aggiungere o rimuovere modalità speciali al gioco.In questa maniera è possibile rinnovare il gioco o creare nuovi livelli intervenendo in maniera poco pesante sul codice. Le modalità previste attualmente nel gioco sono elencate nella lista seguente ed il loro nome si ispire al colore del blocco/sfera che le attiva. ORANGE JUICE: modalità normale. Viene attivata con i blocchi/sfera arancio. YELLOW DRUGS: modalità droga: lo schema di gioco gira su se stesso e rende davvero arduo controllare la piattaforma. Viene attivata con i blocchi/sfera gialli. BLUE SPEED: modalità veloce: la pallina aumenta la sua velocità. Viene attivata con i blocchi/sfera blu. GREEN BREATH: modalità respiro: le pareti dello schema di gioco si ingrandiscono sempre più. Raggiunto un certo limite tornano alla loro dimensione. Viene attivata con i blocchi/sfera verdi. PINK PLEASURE: modalità passatempo: le pareti orizzontali dello schema di gioco e la piattaforma si allargano, regalando al giocatore un po’ di relax. Viene attivata con i blocchi/sfera fuxia. SILVER SHADOW: modalità oscurata: il colore della piattaforma diventa sempre più opaco rendendo difficile al giocatore seguire la pallina. Viene attivata con i blocchi/sfera argento. VIOLE(N)T BOMB: modalità bomba: la dimensione della pallina si ingrandisce sempre più con conseguenze disastrose. Viene attivata con i blocchi/sfera viola.
  • 9. GESTIONE DEL CONTROLLER DI GIOCO (TASTIERA) La gestione del gioco viene effettuata da tastiera ed è molto semplice. Con le freccie direzionali l’utente può spostare la piattaforma in maniera che la pallina rimbalzi su di essa. All’inizio del gioco o dopo aver perso una vita la pallina verra posizionata al centro della piattaforma e l’utente potrà far ripartire il gioco premendo la barra spaziatrice. La gestione dei comandi che l’utente digita alla tastiera e assicurata dalla classeKeynavigator (vedi diagramma delle classi). Quest’ultima permette e gestisce anche la pressione di più tasti in contemporanea (spostamento trasversale). Lo stato dei tasti premuti dall’utente viene memorizzato nelle variabili statiche del gioco. FUTURI MIGLIORAMENTI Molti sono i possibili miglioramenti che possono essere applicati al gioco. Personalmente penso che il gioco possa guadagnare molto aumentando le modalità speciali e creando ingegnosi metodi di controllo piuttosto che migliorando la fisica o la grafica. Penso infatti che ci siano molti (anche troppi) i giochi la cui grafica è stupefacente o la cui fisica è quasi reale, ma che siano davvero rari i giochi innovativi e rivoluzionari come pac-man tetris o arkanoid che rimangono divertenti e giocabili negli anni nonostante i progressi dei motori fisici e grafici. Per arkanoid 3D si potrebbe pensare a modalità con più palline, magari controllate da più giocatori che possono eliminarsi una con l’altra secondo un concetto di resistenza. Oppure si potrebbe pensare a sistemi di controllo con le mani di due piattaforme che si muovono su una sfera (con i blocchi/sfera all’interno di essa). Un altro miglioramento, più concreto ma comunque innovativo, potrebbe essere quello di dotare i blocchi/sfera di intelligenza artificiale che gli permetta di cercare di schivare la pallina (un po’ come se si giocasse a palla prigioniera).