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, ogabkenney)


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,195