·

Develop @ Ubisoft – Programming “Knight Of The Horizon”

Un gioco sviluppato durante la mentroship sul C++ di Ubisoft.

Video Gameplay

Informazioni sul gioco:

Il genere del gioco è: infinite scroller.

Il giocatore, il “Cavaliere dall’orizzonte”, deve battere il puntaggio massimo uccidendo o schivando i nemici e collezionando le monete d’oro.

Concept

Il gioco ha tre main states, MainMenu, GameRunning e GameOver.

Game Loop

The Game Loop è strutturato in AdventureKnightGame.cpp dove viene chiamata la GAME FSM, una State Machine che gestisce gli states del gioco e le loro transizioni.

GAME FSM – MainMenuState & GameOverState

Sono stati semplici che mostrano delle spirte e attendono l’input del giocatore per fare transizioni ad altri stati di gioco.

GAME FSM – GameRunningState

Il GameRunningState aggiorna le funzionalità del gioco in run.
Mostra anche il Backgound.

(Stavo pensando di farlo in un’altra classe separata, se avessi avuto più tempo).

GAME OBJECT

L’architettura usata per definire le entità in gioco è basata in GameObject.
La base della classe GameObject gestisce le sprite e le loro trasformazioni nello spazio:

è inherited da

  1. Player
  2. MovingGameObject (Enemy inherits da lui)

GameObjectManager

La classe GameObjectManager gestisce l’aggiornamento del GameObjects (inclusa la gestione delle collisioni) e il loro spawn.

La difficoltà del gioco è gestita qui: l’accellerazione dello spawn time e il crescendo della velocità dei nemici spawnati.

Hitbox

Le proprietà delle collisioni è definita dalla classe Hitbox. Essa ha:

  1. Limiti delle Hitbox
  2. Tag delle Hitbox
  3. Il metodo che dice se le Hitbox stanno collidendo con altre

PlayerScoreSystem & BestScore

l’Init del PlayerScoreSystem chiama il RestoreBestScore che apre un file di tipo .txt.

Nel file ci sono due lines: il punteggio più alto e il checkSum.

Per evitare di barare se qualcuno volesse modificare la prima linea, il file fa un check di meet con l’equazione del checksum.

Design Patterns

Nel progetto ho usato i seguenti design patterns:

Singleton:
La classe GameFSM è fatta a singleton, in modo che i sui metodi fossero facili da chiamare su tutto il progetto (per esempio dal GameOver()).

FSM:
Ci sono due FSM nel progetto:

  1. PlayerActionFSM per gestire lo switch tra le azioni del Player
  2. GameFSM

Ringraziamenti

Grazie ad Ubisoft Global, Ubisoft Milano ed al mio mentore: Alessandro De Marchi!

More from the blog

Scopri di più da Alessia Verza - 3D Game Artist

Abbonati ora per continuare a leggere e avere accesso all'archivio completo.

Continua a leggere