Ho appena iniziato un nuovo progetto in cui vorrei che il mondo di gioco consistesse in luoghi generati proceduralmente collegati da teletrasporto. Dopo un po 'di ricerche, ho scoperto che questo si chiama "teoria dei grafi" o "maledettamente complicato", a seconda di chi ne sta discutendo. Sfortunatamente, ho trovato pochissime informazioni sulla generazione di grafici; la maggior parte degli strumenti che ho visto sono diretti verso l'esame di grafici esistenti.
Supponendo che la terminologia sia corretta, i miei requisiti sono che il grafico sia:
- semplice - nessuna posizione (vertice) dovrebbe avere un teletrasporto (bordo) che si ricollega a se stesso, né due vertici dovrebbero avere bordi multipli che li collegano
- connesso - dovrebbe essere possibile viaggiare tra due vertici nel grafico (anche se non prevedo mai la necessità di trovare il percorso; è sufficiente sapere che il giocatore potrebbe trovarne uno se lo sceglie)
- ciclico: dovrebbe esserci più di un percorso tra due vertici
- non orientato: tutti i bordi possono essere percorsi in entrambe le direzioni
- infinito - se il giocatore lo desidera, dovrebbe essere in grado di viaggiare indefinitamente, con il grafico che continua a generare in modo incrementale mentre si avvicinano ai
suoiverticipiù esterniinesplorati - localmente finito - il grado di un vertice non dovrebbe mai cambiare dopo che il giocatore lo ha visitato
- stabilmente etichettato - ogni vertice rappresenta una posizione che sarà essa stessa generata proceduralmente da un seme; lo stesso seme deve essere assegnato a un vertice indipendentemente dal percorso che il giocatore ha usato per viaggiare lì o da quanto è grande il grafico quando lo fa
Ho avuto alcune idee (che non ho ancora provato a implementare) per quanto riguarda l'utilizzo massimi locali di 2D Perlin rumore come vertici (l'ingresso x e y poteva quindi essere utilizzato come la sua etichetta), ma che si sente goffo e troppo complicata.
C'è un modo migliore per generare un grafico come questo? Sto sviluppando in Python 2.6 usando Panda3D e numpy, e ovviamente sarei disposto a guardare includendo altre librerie se aiuteranno con questo problema!
modificare
Penso di aver fatto un pessimo lavoro spiegando alcune delle mie esigenze, quindi è tempo di illustrazione! Spero che questo chiarisca le cose.
Quello che intendo per avere etichette stabili è che voglio, ad esempio, che il Giocatore A sia in grado di fare un mucchio di esplorazioni e trovare, tra le altre cose, un percorso ciclico che ritorni alla posizione di partenza e una montagna che assomigli a un gatto. Il suo gioco ora è simile al seguente (i vertici sono numerati con il loro seme e bordi nell'ordine in cui il giocatore li ha attraversati). Ha iniziato con il vertice 8329 (verde) e Happycat Mountain è nel vertice 6745 (blu).
Il buon amico del giocatore A Il giocatore B è un fan dei gatti, quindi vuole mostrarglielo. Le dà il seme di radice per il suo mondo e le indicazioni lungo il percorso più breve verso la montagna di interesse. Il suo gioco ora dovrebbe apparire così:
Il problema con cui sto attualmente incontrando maggiori difficoltà è "Come faccio a generare gli stessi semi per il giocatore B quando la sua esplorazione non ha seguito lo stesso percorso?" Questo è ciò che mi ha portato all'idea di usare il rumore di Perlin: finché si utilizza lo stesso seme di radice, i massimi non si muoveranno, quindi le loro coordinate potrebbero essere usate come semi di vertice stabili.