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.
Funcs 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.