Voglio creare un parser di regole generico per sistemi RPG in stile penna e carta. Una regola può coinvolgere generalmente da 1 a N entità da 1 a N ruoli di un dado e il calcolo di valori basati su più attributi di un'entità.
Per esempio:
Il giocatore ha STR 18, la sua arma attualmente equipaggiata gli dà un bonus di +1 STR ma un malus di DEX -1. Attacca un'entità mostruosa e ora è necessaria la logica del gioco per eseguire una serie di regole o azioni:
Il giocatore lancia i dadi, se ottiene per esempio 8 o più (il valore di attacco base che deve passare è uno dei suoi attributi di base!) Il suo attacco ha successo. Il mostro quindi lancia i dadi per calcolare se l'attacco passa attraverso la sua armatura. Se sì, il danno viene preso se non l'attacco è stato bloccato.
Oltre alle semplici regole matematiche possono anche avere vincoli come l'applicazione solo a una determinata classe di utenti (ad esempio guerriero vs mago) o qualsiasi altro attributo. Quindi questo non si limita solo alle operazioni matematiche.
Se hai familiarità con i sistemi di gioco di ruolo come Dungeon e Dragons saprai cosa sto facendo.
Il mio problema è ora che non ho idea di come costruirlo esattamente nel modo migliore. Voglio che le persone siano in grado di impostare qualsiasi tipo di regola e successivamente semplicemente fare un'azione come selezionare un giocatore e un mostro ed eseguire un'azione (insieme di regole come un attacco).
Chiedo meno aiuto per quanto riguarda il database, ma di più su come elaborare una struttura e un parser affinché mantenga flessibili le mie regole. A proposito, la lingua preferita è php.
Modifica I:
Consentitemi di perfezionare il mio obiettivo: voglio creare un'interfaccia intuitiva (che non richiede a nessuno di imparare un linguaggio di programmazione) per costruire regole di gioco più o meno complesse. Il semplice motivo: l'uso personale non ha bisogno di ricordare tutte le regole in ogni momento, semplicemente non ci giochiamo spesso ed è un tappo cercarle ogni volta. Inoltre: sembra un compito divertente da fare e imparare qualcosa. :)
Quello che ho provato finora: pensare a un concetto invece di perdere tempo a costruire un'architettura sbagliata. Finora ho l'idea di consentire a un utente di creare tutti gli attributi che vogliono e quindi assegnare tutti gli attributi che vogliono a qualsiasi tipo di entità. Un'entità può essere un giocatore, un mostro, un oggetto, qualsiasi cosa. Ora, quando si calcola qualcosa, i dati vengono resi disponibili al parser delle regole in modo che il parser delle regole sia in grado di fare cose come Player.base_attack + dice (1x6)> Monster.armor_check quindi Monster.health - 1; La domanda qui è su come creare quel parser.
Modifica II:
Ecco un esempio di valore piuttosto semplice ma per calcolarlo correttamente ci sono molte cose e variabili diverse da tenere in considerazione:
Bonus attacco base (termine) Il bonus attacco base (comunemente definito BAB dalla comunità d20) è un bonus al tiro di attacco derivato dalla classe e dal livello del personaggio. I bonus di attacco base aumentano a velocità diverse per diverse classi di personaggi. Un personaggio ottiene un secondo attacco per round quando il suo bonus di attacco di base raggiunge +6, un terzo con un bonus di attacco di base di +11 o superiore, e un quarto con un bonus di attacco di base di +16 o superiore. Bonus di attacco base ottenuti da diverse classi, ad esempio per un personaggio multiclasse, pila. Il bonus di attacco base di un personaggio non concede più attacchi dopo aver raggiunto +16, non può essere inferiore a +0 e non aumenta a causa dei livelli di classe dopo che il livello di personaggio ha raggiunto il 20 °. Per alcuni talenti è richiesto un bonus di attacco base minimo.
Puoi leggerlo qui http://www.dandwiki.com/wiki/Base_Attack_Bonus_(Term) compresi i collegamenti a classi e talenti che hanno di nuovo le proprie regole per calcolare i valori richiesti per l'attacco di base.
Ho iniziato a pensare che mantenerlo il più generico possibile renderà anche abbastanza difficile ottenere un buon parser di regole.
Func
s che inizializza lo stato del programma basato sugli argomenti come chiavi del dizionario. Sorpreso non ho mai trovato quel post di Yegge prima, molto bello, grazie per averlo sottolineato.