And so you want to be a
GAME PROGRAMMER...
Ma
perché
volete diventare programmatori
di videogiochi?
Perché si diventa ricchissimi in poco tempo!
(sì, più o meno come giocando in borsa...)
Perché è un lavoro che rende e che può fare anche un bambino
(come si legge ogni tanto sui giornali)
Perché amate i videogiochi
perché amate i media interattivi
perché amate lo storytelling e/o il roleplaying
perché amate stupire gli altri con il vostro lavoro
facendoli ridere e/o riflettere, spaventandoli, o semplicemente facendoli divertire
Perché fare videogiochi
è arte e tecnica insieme
Fare videogiochi è come fare lo scrittore, o il regista, o il disegnatore di fumetti, o il pittore, con qualcosa in più e qualcosa in meno.
È difficile però essere ricordati - anche ora che i videogiochi sono trendy - i singoli dietro a un titolo di successo sono meno noti degli artisti in altri campi
Io ho deciso di volere fare il
Game Programmer
dopo avere letto una intervista a Jeff Minter
Dopo avere visto Tron, dopo Lord British, dopo avere visto all'opera il team di id Software
io sono diventato
Programmatore
perché volevo fare il Game Programmer
Un po' di date
Pong 1972 | Space Invaders 1978 | Pac-Man 1980
Pitfall 1982 | Zaxxon 1982 | Mario Bros 1983
Wolfenstein3D 1992 | Doom 1993
Need for speed 1994 | Quake 1996
Tomb Raider 1996 | Resident Evil 1996
Silent Hill 1999 | Halo 2001 | God of War 2005
Assassin's Creed 2007 | GTA IV 2008 | Minecraft 2009
The Last of Us 2013
Ma cos'è davvero un Game Programmer ora?
Essere un Game Programmer nella mente delle persone è spesso un concetto complesso
Vuol dire che sei quello che pubblica un videogioco
E non necessariamente quello che ha scritto il codice che lo fa girare
Tanti ruoli e mezzi
I ruoli dietro alla realizzazione di un videogioco sono tanti. E puoi creare un videogioco senza essere un programmatore, o almeno senza essere davvero un programmatore
Perciò quando pensate di voler diventare Game Programmer cercate di comprendere in dettaglio cosa volete fare, e non solo cosa volete ottenere
Per creare Giochi non serve essere davvero un Game Programmer
(non più di quanto serva sapere scrivere musica per fare un pezzo di successo)
Fare Giochi senza programmare o quasi
(tenendo conto c'è il drag'n'drop e il copia&incolla)
Arcade Creator - Platform Creator - FPS Creator - Shoot'em up Kit - Adventure Maker - RPG Maker
(e questo è solo un piccolo elenco...)
Fare Giochi programmando solo un poco
(script e RAD, ovvero perché fare fatica quando non è necessario?)
Unity3D - Torque 2D/3D - GameMaker - GameSalad - ClickTeam Fusion
(troverete vari altri esempi qui)
Fare Giochi programmando in modo facile
(con linguaggi dedicati)
Dark Basic - AppGameKit - Blitz Basic - Inform - Alan
(linguaggi semplici, con API potenti dedicate, o addirittura linguaggi progettati per rendere lo sviluppo di un determinato tipo di gioco più intuitivo e semplice)
Fare Giochi programmando in modo agevole con supporto
(con linguaggi script non dedicati uniti a framework/IDE dedicati)
Lua+Corona SDK - Flash+Fixel - HTML5+Copperlicht
(potenza e semplicità di linguaggi diffusi, con librerie e/o IDE dedicati)
Fare Giochi programmando in modo evoluto con supporto
(con linguaggi evoluti e con framework dedicati)
Unreal Engine - CryEngine - Cube2 - jMonkeyEngine
(Game Engine per C++ o Java)
SDL - Allegro5 - Ogre3D - Cocos2D-x - DarkHammer - Murl - JumpCore
(Game Engine, Graphic Engine o Framework per C++)
Fare Giochi programmando in modo evoluto
con solo l'aiuto che ci serve
(con linguaggi evoluti e librerie specifiche)
C/C++
Questo è il linguaggio in assoluto più usato per sviluppare videogiochi
(vari giochi hanno però parti realizzate in altri linguaggi di più alto livello)
(alcuni giochi usano parti realizzate direttamente in assembler)
OpenGL & OpenAL
DirectX & DirectSound
(librerie audio&video collegate all'hardware dei dispositivi)
ZLib - Jpeg - Png - Assimp - Freetype - libogg/libvorbis - Lua - chipmunk - bullet
(librerie specifiche per compiti specifici)
Ambienti di sviluppo
IDE & Compilatori / Piattaforme per sorgenti / Strumenti di test e di deploy
Visual Studio - XCode - Eclipse
Code-Blocks Portable
Un Gioco è un programma,
con un loop
(tutto inizia qui)
Un loop per dominarli tutti
if(init())
{
while(!endgame())
{
readinput();
handleINPUT();
gameAI();
checkandmoveeverything();
drawandplaysounds();
}
reset();
}
Un loop per blah blah (2)
if(init())
{
while(!endgame())
{
if(peekinput()) handleINPUT();
gameAI();
checkmoveeverything();
drawandplaysounds();
}
reset();
}
Un loop per blah blah (3)
if(init())
{
startgamethread();
reset();
}
Gamethread:
while(!endgame())
{
if(checkinput()) handleINPUT();
gameAI();
checkmoveeverything();
drawandplaysounds();
}
UIthread:
peekinput();
Un Gioco è un programma
che ha
un mondo
delle regole
degli attori
(che si muovono nel mondo, con quelle regole)
Un mondo intero da creare
Il mondo è il nostro gioco - è l'area dentro cui il nostro eroe si muove - è il tabellone dentro il quale l'utente deve selezionare le lettere per comporre le parole - è l'arena dentro cui fare combattere i nostri personaggi - è il campo da gioco - è la scacchiera - è DOVE giocare - è il CONTENITORE del gioco
Le regole sono il gioco
Le regole definiscono come gli attori interagiscono con il mondo - le regole sono i limiti che il giocatore avrà - sono il modo con cui il giocatore giocherà
Gli attori sono gli elementi
con cui interagire - sono le entità passive o attive - senzienti o meno - con cui il giocatore avrà a che fare
ATTORE <ISBORN | THINKS | ACTS | DIES>
MONDO <REGOLE x ATTORI>
Un Gioco è un programma che ha
delle scene
che hanno dei loop
e ogni scena ha un mondo, delle regole e degli attori
(in comune o meno con le altre scene)
MONDO<
<SCENA1<REGOLE x ATTORI>>
<SCENA2<REGOLE x ATTORI>>
<SCENA3<REGOLE x ATTORI>>
>
Tutti i Giochi si assomigliano
molto di più di quello che si potrebbe immaginare
Scene in comune
Varie sono le scene simili o anche identiche in giochi con nulla o quasi in comune: Home, Opzioni, Credits, Leaderboards, Tutorial, Scene di fine gioco, di vittoria o sconfitta, Selezione livelli
Elementi in comune
Alcuni elementi presenti in alcune scene saranno identici (o molto simili) anche in giochi con nulla in comune (HUD, in game menu, warning dialogs)
Altro in comune
Praticamente ogni gioco ha assets/risorse.
Perché un gioco è il programma e NEL programma (script, graphics / music)
Un gioco è interazione
(ascoltare e capire cosa vuole poi fare questo giocatore)
User Input
Keyboards, joypad
Virtual keyboards, virtual joypad
Touch / gestures
Accelerometer
Gyroscope
GPS coordinates
Camera Images
Sounds
Una immagine vale più
di mille parole
(e un filmato vale di più di mille immagini)
Grafica
2D e 3D
Frame based / Skeleton based
Formati diversi, peculiarità e considerazioni sui formati
Creare grafica (staticamente o dinamicamente)
Pagare qualcuno per crearla per noi
Usare asset già pronti: gratuitamente o a pagamento
(esempi gratuiti opengameart, ogab, kenney)
Sei sicuro che il volume
sia attivo?
(i film muti non ci sono quasi più dagli anni venti)
Music & Sounds
Musica (background, streaming)
Sound effects
Formati diversi, peculiarità e considerazioni sui formati
Creare musica e suoni (staticamente o dinamicamente)
Pagare qualcuno per crearli per noi
Usare asset già pronti: gratuitamente o a pagamento
Dove andiamo a giocare?
(costruire il parco giochi)
Livelli/Aree di gioco
Edited / generated / endless
Map editor / Map generator
L'importanza della casualità
A casa nostra si usano
le nostre regole
(abbiamo voluto un mondo, ora è il caso di gestirlo)
Fisica e regole
(giochi di sport / da tavolo / RPG / FPS / Platform / Shoot'em'Up)
Ti batto quando voglio
(più intelligenti vuol dire sapere anche quando perdere)
AI & bots
(rule based / script based / seek&run / pathfind / adaptive behaviour)
Cosa manca ancora?
(cose superflue, quindi necessarie, perché
il proprio gioco sia davvero completo)
Offrire di più
Social interaction
Leaderboard / achievements
Multiplayer (turn based/realtime)
Server interaction
Updates
User customization
Se pigi, sta tutto nella valigia
(le cose ora ci sono tutte, ora però dobbiamo portarle dagli utenti)
Gestione delle Risorse
Packaging / protection / compression / localization
Monetizzare i nostri sforzi
(come cercare di giustificare agli amici o al proprio partner
le tante ore passate davanti al computer)
Modelli di introiti
Freeware / Shareware / Donationware
Selling / Selling items (unlock features, give game items) / advertising (and/or pay to remove)
Negozi virtuali
AppStore / GooglePlay / Windows MarketPlace / Steam
Se non ti fai notare non esisti
Sito web / blog / Pagina su siti-community per developers
Social Networks
YouTube
Reviews
Pubblicità
Hype
Indie vs Publishers
Piccoli vs Grandi
Differenze su costi e tempi, e sui progetti affrontabili
Il termine Indie è spesso associato a una tipologia di giochi - ma in realtà Indie non implica nulla, se non la tipologia di team che si occupa dello sviluppo.
Essendo gruppi più piccoli possono permettersi di sperimentare di più.
Indie: one-man-band
Un solo programmatore, che fa o compra anche grafica e suoni, o che lavora con figure diverse per quegli aspetti in base ai progetti.
Realtà più comune in passato.
Indie: small teams
La situazione più normale ora, di solito con uno o due programmatori, uno o due grafici / game designer, con eventualmente altri per l'aspetto sonoro.
In base al team il team leader può essere il programmatore o il designer
Publishers: titoli AAA
Qualche titolo ha ancora dietro un numero non enorme di persone - pochi programmatori (che si appoggiano su un motore AAA) e un po' di grafici e artisti
Molti titoli hanno anche centinaia di persone - tra cui coordinatori di gruppi
And so you want to be a Game Programmer...
By Marco Giorgini
And so you want to be a Game Programmer...
New G@ame (Game Programming Course) - prima lezione
- 6,401