Come si possono creare giochi che abbiano livelli infiniti come Temple Run? Quali concetti vengono utilizzati in essi?
Nella maggior parte dei giochi, un umano ha, ad un certo punto, specificato dove tutto va in un livello, e ha creato ognuno di essi. In altri, invece, scriviamo un algoritmo che crea i livelli per noi. Alcuni di questi sono in un'area predefinita, e funzionano più o meno come un livello fatto a mano, anche se forse con meno ispirazione e meno novità. Ci sono alcune tecniche che funzionano bene per un'area fissa ma non per un livello infinito, quindi non le discuterò qui.
Classificherei i livelli infiniti in due grandi categorie: lineari e aperti.
Lineare è semplice, e la corsa del tempio rientra in questa categoria. Non si sta creando un mondo, ma una serie di ostacoli o sfide che il giocatore deve affrontare. Questo può essere molto semplice; si ha una serie di cose che il giocatore può incontrare, che siano ostacoli, nemici, power-up, pick-up, ecc. Poi li scegliete a caso e li mettete nel mondo mentre il giocatore progredisce.
Per rendere le cose più interessanti, le probabilità di queste cose possono cambiare nel tempo. All'inizio, i nemici possono essere scarsi e i power-up frequenti, ma man mano che si va avanti, i power-up diventano più scarsi, e ci sono più nemici, nemici più duri, ostacoli più difficili, ecc. Questo crea una curva di difficoltà per il gioco.
Si possono anche costruire schemi più sofisticati; si possono dare delle pause nella difficoltà per permettere al giocatore di prendere fiato, o lanciargli contro tratti più difficili, variando un po' le cose per renderle più interessanti. Si possono usare schemi per creare una struttura migliore delle cose casuali, come catene di monete, o una catena di monete che segue un percorso attraverso gli ostacoli, o forse un buon power-up in un posto rischioso. Potreste decidere che alcuni aspetti funzionerebbero bene in uno schema più regolare, per esempio le gocce di salute distanziate in modo più uniforme. È anche una buona idea controllare che gli ostacoli generati siano risolvibili; che ci sia un percorso che non vi uccida, per esempio.
Open-ende richiede tecniche più sofisticate. Generalmente si vuole che il mondo sia coerente se si ritorna in una vecchia area, e si tratta davvero più di creare un mondo che una catena di ostacoli.
Un metodo è quello di utilizzare una funzione di rumore, come il rumore di perlin. Questi sono modelli che sono casuali, ma hanno una struttura, e possono essere calcolati in un punto senza conoscere altri punti. Per esempio, potreste usarlo per generare la mappa delle altezze del mondo, e definirebbe come funzionano le vostre colline. Ogni volta che ci si trovava nello stesso punto, il terreno avrebbe avuto la stessa altezza, e si sarebbe generato in modo fluido, e ogni volta che si tornava in una vecchia area, tutto si sarebbe allineato senza soluzione di continuità.
Alcuni giochi hanno un approccio che genera la stessa area in modo coerente ogni volta, il che fa risparmiare spazio di archiviazione, mentre altri memorizzano ciò che è stato generato e usano metodi come quelli sopra per assicurare che la generazione sia coerente con se stessa.
Posizionare i dettagli all'interno del mondo può funzionare in modo simile; potete creare una mappa del rumore che vi dica la densità degli alberi in un'area, e usarla per capire quanti alberi dovreste generare, o quanti nemici, o rocce, o qualsiasi altro dettaglio di cui avete bisogno.
Ci sono anche tecniche per generare una struttura. Un approccio è quello di costruire la struttura su una griglia; si mettono diverse stanze in ogni livello, poi si aggiungono corridoi per concatenarle. Un altro approccio suddivide l'area in stanze, rendendola molto più densa.
Articoli simili
- Che aspetto ha un documento di game design per Temple Run?
- Ci sono dei tutorial per costruire un gioco come Temple Run usando il motore di gioco Unity3D, o qualsiasi altro motore di gioco?
- Qual è la differenza tra schema a 3 livelli e schema a 5 livelli?
- Un sistema operativo è in grado di rilevare i loop infiniti durante l'esecuzione?