Your SlideShare is downloading. ×
Arkanoid 3D
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Arkanoid 3D

1,380
views

Published on

The purpose of this project is to develop a game in a 3-dimensional based on a famous 2D game of the past: Arkanoid. 

The purpose of this project is to develop a game in a 3-dimensional based on a famous 2D game of the past: Arkanoid. 

Published in: Education, Travel, Business

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,380
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×