2009-07-31 11 views
26

Qualcuno sa dove posso trovare esempi di diagrammi di classe per lo sviluppo di giochi RP? Qualcosa di simile a here sarebbe abbastanza utile. Non sto cercando le cose che posso copiare pedissequamente, ma solo per diversi esempi che illustrano varie soluzioni ai problemi che sto scoprendo mentre cerco di affinare le mie lezioni.Esempi di diagrammi di classe per giochi di ruolo (Role Playing Game)

+7

Mi piace quello a cui sei collegato. Giuro che molti di noi programmatori, specialmente quelli con lavori ordinari, devono fare solo giochi di ruolo per l'esperienza catartica di funzioni di scrittura come 'bool isLivingDead()'. – Gavin

+3

if (creature.isLivingDead() && hero.isSlayer()) hero.slay (creatura); –

risposta

48

So Emmanuel Deloget da GameDev.net ma non sono sicuro che sceglierei di usare la gerarchia e lui è arrivato! Troppa eredità, non abbastanza flessibilità.

Se stavo scrivendo un RPG basato su testo (come ho fatto in passato) sarebbe guardare un po 'come questo (anche se non ho il tempo di elaborare un diagramma per esso, purtroppo):

  • Creatures, camere, ed elementi derivati ​​da WorldEntity, con WorldEntity oggetti disposti in un composito struttura, in modo da elementi possono vivere all'interno altri elementi, portati da creature, che esiste all'interno di camere. Implementando il pattern Visitor per WorldEntities potrebbe funzionare correttamente.
  • CreatureType e itemtype classi che contengono i dati di classe A "per singola creatura e sull'articolo casi, che si riferiscono al loro corrispondente oggetto 'tipo'. (ad esempio, punti di riferimento e statistiche nel primo, hitpoint correnti ed effetti temporanei in quest'ultimo). Potrei implementarli come elenchi prototipici di proprietà che ottengono copiati in istanze Creature o Oggetto quando vengono creati . È possibile implementare l'ereditarietà della proprietà tramite una proprietà 'genitore' in modo che un'istanza di Creampio goblin specifica possa riguardare il tipo di Creatura"guerriero goblin", che contiene un riferimento genitore al tipo di creatura "generico goblin". E così via.
  • Uscite di proprietà della loro stanza e sono a senso unico e quali dettagli la direzione del viaggio , varie condizioni di passaggio, ecc.
  • Aree, che contengono gruppi di camere collegate da parte di un'organizzazione logica.
  • Una classe Spawn di dettare in cui vengono creati Creature e Voce casi (ad es. In quale stanza, oa che coordina), quando vengono creati e con quale frequenza, e da che CreatureTypes e ItemTypes. Potresti avere qualche logica qui per randomizzare un po 'le cose.
  • Incantesimi, capacità, abilità, ecc tutte derivate da una classe base Azione o interfaccia che specifica i prerequisiti (posizione ad es. Corrente, punti mana, alcuni grado di apprendimento di un mestiere, ecc). Normali comandi e azioni può andare anche in questo caso dal momento che spesso hanno una sorta di requisiti troppo (ad es. Un comando di 'sonno' richiede che non sei già dormendo.)
  • Una classe FutureEvent che è essenzialmente un richiamata che si preme su una coda di priorità da eseguire in futuro. Puoi usarli per i turni di combattimento della pianificazione , i tempi di raffreddamento degli incantesimi, i cicli notte/giorno , qualunque cosa tu voglia.
  • Un hash/mappa/dizionario di nome-> coppie di valori per le statistiche di giocatore e articolo . Non sicuro per il tipo ma apprezzerai la flessibilità più tardi. Nell'esperienza l'esecuzione di variabili membro delle statistiche è lavorabile ma non flessibile, e la specializzazione delle classi "attributo" diventa un incubo contorto durante il debug.
  • Un tipo di modificatore che contiene un nome di statistica e un valore di modifica (ad esempio +10, + 15%). Questi vengono aggiunti alle tue creature in quanto sono utilizzati (ad es. Attraverso un effetto grafico, o brandendo un'arma incantato) e vengono messi a nudo fuori più tardi da un FutureEvent a tempo o di qualche altro evento così come in esecuzione di un comando.
  • classi specifiche di gioco come il PlayerClass o PlayerRace, ognuno dei quali descrivono la classe di un giocatore (ad es. Guerriero, mago, ladro) o la razza (umano, elfo, nano) e impostare i valori stat iniziali e limiti, liste di disponibilità delle abilità, poteri speciali, ecc.
  • Classi di interfaccia di base del lettore che varieranno a seconda del tipo di gioco effettivo. È possibile che disponga di classi di rendering per un gioco grafico o in un MUD. Si potrebbe avere una classe di connessione che riflette la connessione TCP al client del giocatore. Cerca di tenere fuori tutta la logica di gioco.
  • Un'interfaccia di scripting. La maggior parte dei tuoi comandi, incantesimi, e creatura AI possono essere realizzati più rapidamente con un'interfaccia di scripting decente e mantiene anche i tempi di compilazione . Consente inoltre di eseguire il debugging in-game e le funzionalità di diagnostica.

Questa sarebbe la struttura di base di alto livello che userei.

+0

Questa è la seconda risposta fantastica che hai fornito per le mie domande relative al gioco. Grazie – Steerpike

+0

Se dovessi utilizzare un'architettura MVC per questo gioco. Come sarebbe la separazione tra modello, vista e controllore per questa struttura di classe? – BrightIntelDusk

+0

@IntegrityFirst: Non userei MVC, quindi è una domanda a cui dovresti rispondere. Ma gestire l'I/O (inclusa la grafica) dipende interamente dalla piattaforma per cui il gioco è stato realizzato. – Kylotan

5
<tongue_in_cheek_mode_because_it_is_friday> 

solamente iniziare:

  ----------------     -------------- 
      | Creature |     | Item  | 
      |--------------|     |------------| 
      | Name   |     | Name  | 
      | Hp   |     | Value  | 
      | Abilities |--------------------| Weight  | 
      |--------------|     -------------- 
      | Attack  | 
      ---------------- 
       ^
       | 
     ---------------------- 
     |     | 
---------------- ---------------- 
| Hero  | | Monster  | 
|--------------| |--------------| 
| Level  | |    | 
|--------------| |--------------| 
| KillMonster | | AttackAndDie | 
| GrabTreasure | | DropTreasure | 
---------------- ---------------- 

</tongue_in_cheek_mode_because_it_is_friday> 
+0

Sembra sorprendentemente familiare al mio progetto Devo ammettere :) – Steerpike

+1

Lol, dipende totalmente dal sistema che si desidera implementare. Può essere semplice, ma come al solito i sistemi rpg sono estremamente complessi. Ma poi di nuovo, il gioco non è finito finché non hai trovato l'hackmaster + 12 ;-). –

+2

Penso che il mio problema principale sia che non sono sicuro di cosa debba ereditare il 'gazebo' ... – Steerpike

4
+1

3 Mains e 3 GameEngineDatas? Credo che alcuni refactoring siano in ordine. –

+0

Ah sì, naturalmente ... Ho postato queste immagini solo per capire come iniziare a costruire un UML simile –

3

Guardate JADE's Javadoc per una buona panoramica di un complesso gioco :)

+0

Ho lavorato su giochi AAA grandi e professionali con una struttura di classe più semplice. – kyoryu

+1

Cura di condividerlo? :) – changelog

11

È possibile considerare un sistema di entità componente anziché una gerarchia di ereditarietà tradizionale; tendono ad essere più flessibili per determinati tipi di cambiamento, rendono lo strumento (ad es.editor mondiale) lo sviluppo è molto più semplice e presenta opportunità di parallelizzazione che altrimenti non sarebbero ovvie o facili.

Molti motori di gioco moderni si stanno allontanando dal "oggetto di classe monolitico" (o entità di classe, qualsiasi cosa) e verso un approccio "sacchetto di componenti".

Ci sono numerosi libri e articoli in giro. In generale:

particolare (alcuni noteworth quelli y, google "componente" e "entità" in varie combinazioni per maggiori):

Ognuno di questi articoli collega ad alcuni altri.

Prova il kool-aid, ti potrebbe piacere. =)

+0

Grazie, non ho mai sentito parlare del design guidato dai componenti, ma sembra interessante. –

+0

@nemo: grazie per la nota, funzionava due giorni fa. = (Ho inserito il suo nuovo blog link, ma non sembra che abbia la presentazione, e una nota che puoi ancora arrivare alla presentazione usando la cache di google. – leander

+0

Recentemente ho risolto il mio sito. Http: // scottbilas .com/games/dungeon-siege – scobi

4

A very different approach di Steve Yegge.

+0

Sì, il concetto chiave/valore è come un'altra versione della decima regola di Greenspun: quasi ogni sistema finisce con esso da qualche parte. Suggerisco di usarlo per le proprietà di carattere e oggetto, incluso il modello di ereditarietà di Steve e altri parlano di: – Kylotan

1

Sii coraggioso, il tuo gioco non dovrebbe essere un clone di hack e slash senza senso. I tuoi attori dovrebbero essere in grado di cambiare i lati, prendere la propria iniziativa arruolare altri attori, ecc. Altrimenti, qual è il punto?

+-----------------------------+ 
    V        | 
[Actor] ------- [Allegiance] ----+ 
- risk comfort - weight 
- temerity   
+1

Questo è molto più avanti, non importa quello che fai, avrai comunque bisogno di un sistema come quelli sopra per classificare tutti questi attori e l'IA richiesta. – Sneakyness

Problemi correlati