Panoramica
Uno dei primi progetti realizzati per il percorso di studi di Laurea Specialistica, che ha ricevuto un voto di 30L. Il gioco è stato creato utilizzando il Game Engine di Blender, dimostrando le basi del game design e la teoria di funzionamento di un game engine.
Durata del Progetto e Competenze
- Tempo di Realizzazione: 2 mesi
- Conoscenze Acquisite:
- Basi di Game Design
- Teoria di funzionamento di un Game Engine
- Blender Logic Editor
- Scripting in Python
- Prototipazione di giochi 3D
Descrizione del Gioco
Un particolare gioco platform 3D in cui i giocatori controllano una sfera con il compito di guidare delle papere in salvo. Il gioco combina meccaniche di scorta con l’evitamento di ostacoli, poiché i giocatori devono proteggere le papere dagli avvoltoi mentre schivano palle di cannone.
Elementi Core del Gameplay
- Il giocatore controlla una sfera in un ambiente 3D
- Guida le papere verso recinti sicuri designati
- Protegge le papere dagli attacchi aerei degli avvoltoi
- Evita proiettili sparati da cannoni in movimento
- Uso strategico degli elementi del paesaggio per la protezione
Meccaniche di Gioco
- Sistema di Seguimento: Le papere tracciano e seguono il giocatore quando sono vicine
- Gestione della Stamina: Le papere hanno livelli di energia da monitorare
- Elementi di Distrazione: Caramelle possono temporaneamente fermare le papere
- Comunicazione a Messaggi: Gli elementi di gioco interagiscono attraverso messaggi (mayfollow, iamTired, ecc.)
- Sistema di Proprietà: Usa la proprietà ‘busy’ per gestire lo stato di scorta delle papere
Implementazione Tecnica
Struttura delle Scene
Il gioco comprende quattro scene distinte:
- Scena Principale: Contiene la logica core del gameplay
- Game Over: Attivata quando la vita delle papere raggiunge zero
- Time Up: Attivata quando il tempo limite scade
- Mission Complete: Visualizzata al completamento con successo
Elementi di Interfaccia
Sviluppati attraverso prototipi individuali:
- Bussola 3D che indica la destinazione più vicina
- Orologio analogico per la scansione del tempo
- Sistema di gestione vita e stamina
- Sistema di tracking per esplosioni e proiettili
Approccio allo Sviluppo
Il progetto è stato costruito usando un approccio di prototipazione modulare:
- Prototipi indipendenti per ogni funzionalità principale
- Integrazione dei prototipi di successo nel gioco principale
- Test e raffinamento iterativo
Architettura Tecnica
- Sistema Logico: Costruito usando il Logic Editor di Blender
- Scripting: Script personalizzati in Python
- Sistema Eventi: Architettura Sensore-Controller-Attuatore
- Sensori per il rilevamento degli eventi
- Controller per operazioni logiche
- Attuatori per manipolare il mondo di gioco
Esempio di Codice (arbiter.py
)
import GameLogic as GL
# Ottiene controller e owner correnti
cont = GL.getCurrentController()
own = cont.getOwner()
# Ottiene sensori e attuatori
msgask = cont.getSensor("mayfollow")
msglost = cont.getSensor("lost")
msgstopshootact = cont.getActuator("stopshooting")
def showCompass():
compass = GL.getCurrentScene().getObjectList()["OBcompass"]
compass.tracking = 1
duck = GL.getCurrentScene().getObjectList()[own.duck]
duckPos = duck.getPosition()
compass.setPosition([duckPos[0], duckPos[1], duckPos[2] + 5])
compass.setVisible(1)
def showStamina():
staminabar = GL.getCurrentScene().getObjectList()["OBGreenBar"]
staminabar.isVisible = 1
staminabar.setVisible(1)
redbar = GL.getCurrentScene().getObjectList()["OBRedBar"]
redbar.setVisible(1)
def showLife():
lifebar = GL.getCurrentScene().getObjectList()["OBGoldBar"]
lifebar.isVisible = 1
lifebar.setVisible(1)
blackbar = GL.getCurrentScene().getObjectList()["OBBlackBar"]
blackbar.setVisible(1)
# Gestisce richiesta di seguimento
if msgask.isPositive() and not own.busy:
ack = cont.getActuator("follow")
name = msgask.getBodies()[0]
own.duck = name
ack.setBody(name)
GL.addActiveActuator(ack, 1)
own.busy = 1
GL.addActiveActuator(msgstopshootact, 1)
showStamina()
showCompass()
showLife()
# Gestisce segnale di perdita
if msglost.isPositive() and own.busy == 1:
own.busy = 0
Link al Progetto
- Codice e Documentazione: Bring ’em Home