Seite 1 von 2

Einen Nutzer eigene Bedingungen erstellen lassen

Verfasst: 13.11.2012 11:50
von Sunny
Also erstmal zur Erklärung vorne Weg...
Ich hatte gestern eine kleine Eingebung und daraus ist nun eine Idee für ein Spiel entstanden.
Das soll ein kleines RPG-Strategie-Spiel werden (weil es ja nicht sowieso schon genug davon gibt ^^).
OK... Also der Spieler soll seine Aktionen planen, bevor der Kampf gegen einen Gegner überhaupt angefangen hat.
Allerdings hapert es jetzt schon an der Umsetzung dieses Prinzips.

Als beispiel hat der Spieler einige Auswahlmöglichkeiten.
z.B.:
Wenn
[optional x % von]
Meine HP
Meine MP
Mein Level
Gegner HP
Gegner MP
Gegner Level

[<, >, =, <=, >=, !=]

[optional x % von]
Meine HP
Meine MP
Mein Level
Gegner HP
Gegner MP
Gegner Level

[und / oder]

(weitere auswahlöglichkeiten, wenn "und" oder "oder" gewählt wurde.)

dann

Heile mich
Flüchte
Greife an
...

Wie könnte ich das jetzt in einem Programm realisieren?

Ich hoffe, dass ich mich halbwegs klar ausgedrückt habe und ihr versteht, was ich meine.
Sollte das nicht der fall sein, fragt einfach nochmal nach, dann versuche ich das ein wenig genauer zu erklären. ^^

Re: Einen Nutzer eigene Bedingungen erstellen lassen

Verfasst: 13.11.2012 15:53
von man-in-black
moin,

hab selbst schonmal damit rumgespielt. (Bloß nicht vom Spieler definieren lassen, sondern für den Worldeditor)
Das einfachste wäre, wenn du einen kleinen Interpreter schreibst, also deine Anweisungen
in einer Scriptsprache zusammenhaust. Und dann vordefinierte Aktionen ausführen lässt (evt mit Parametern).
Wenn der Spieler nicht selbst coden soll, dann kannst du auch blanko handlungsstränge vorgeben, die der spieler dann
mit Bedingungen und Reaktionen füllen kann. (zB kleine Bilderchen in Boxen für "Bedingung der handlung" und "reaktion" ziehen)
wenn man will, kann man das ganze dann noch verschachteln...

Da ich mir nicht ganz sicher bin, wo es bei dir gedanklich hapert mal n Beispiel:

1) "WENN aua DANN zurückhauen"
2) in "WENN aua" und "DANN zurückhauen" aufsplitten (Bedingung, Reaktion). Die schlüsselwörter "Wenn" "dann" fliegen nat auch raus.
3) "Wenn aua" in alle Einzelteile aufsplitten -> "aua"
3.1) select einzelteil : case "aua" : if isAua() : erfüllt+1 : endif : ........ :endselect
4) abgleichen, ob alle Bedingungen erfüllt wurden (erfüllt=anzahl(einzelteile)) --> wenn ja, dann 5) sonst 6)
5) "dann zurückhauen" aufsplitten
5.1) select einzelteil ...... zurückhauen()
6) gegner schlägt zurück, spieler tot :D

Re: Einen Nutzer eigene Bedingungen erstellen lassen

Verfasst: 13.11.2012 16:09
von Sicro
Erstelle eine Liste mit den Aktionen und jeweils eine Liste für die Bedingungen, die du auf die Einträge der ersten Liste verknüpfst:

Code: Alles auswählen

Structure BedingungEintragStruc
  ; Wenn
  Variable.s ; Meine HP
  Operator.s ; <
  Wert.i     ; 10%
EndStructure

Structure AktionEintragStruc
  Aktion.s ; Dann [Aktion]
  List Bedingungen.BedingungEintragStruc()
EndStructure

NewList AktionenListe.AktionEintragStruc()

AddElement(AktionenListe())
  AddElement(AktionenListe()\Bedingungen())
  AktionenListe()\Bedingungen()\Variable = "Meine HP"
  AktionenListe()\Bedingungen()\Operator = "<"
  AktionenListe()\Bedingungen()\Wert     = 20 ;%
 
  ; weitere Bedingungen
  ; AddElement(AktionenListe()\Bedingungen())
  ; ...
 
  AktionenListe()\Aktion = "Heilen"

; weitere Aktionen
; AddElement(AktionenListe())
;   AddElement(AktionenListe()\Bedingungen())
;   ...

Re: Einen Nutzer eigene Bedingungen erstellen lassen

Verfasst: 13.11.2012 16:46
von Sunny
Ich bedanke mich schonmal recht herzlich für eure Beiträge. Ich werde demnächst mal sehen, wie ich das am besten auf meinem Projekt umsetze. Sollte ich dann noch auf Probleme stoßen, werde ich mich nochmal melden.

Edit:
Ich konnte leider nocu nicht testen, weil ich noch auf der Arbeit bin allerdings, ist mir beim nochmaligen Überfliegen des beispielcodes folgender Gedanke gekommen. Normalerweise kann ich ja die einzelnen Listenelemente wie variablen behandeln und einfach in einer "If" anweisong vergleichen, allerdings stellt sich mir jetzt die Frage, wie ich den Operator da mit rein kriege. Sollte ich da für jeden einzelnen eine Separate If-Anweisung schreiben oder gibt es da eine bessere Möglichkeit?

Re: Einen Nutzer eigene Bedingungen erstellen lassen

Verfasst: 13.11.2012 20:53
von WPö
Moin!

Es gibt selbstverständlich die Möglichkeit, echte Interpretierung der vom Nutzer zur Laufzeit eingegebenen Bedingungen auszurechnen. So etwas ähnliches wird ja auch von CRM-Systemen erledigt. Allerdings ist die Implementierung eines solchen Algorithmus ziemlich aufwendig und kann dazu führen, daß Du mit entsprechend weitläufigen Tests Wochen allein daran verbringst. Dafür ist diese Lösung das Optimum für Spieler, die sich in Logik ein wenig auskennen.

Solltest andererseits versucht sein, die Handlungsstränge fest vorzugeben, ist Dein Spiel ziemlich starr angelegt und verliert bald an Reiz. Das wirst Du kaum wollen.

Letzte Möglichkeit (wie ich sie sehe) ist Deine große verschachtelte Abfrageorgie. Davon nimm am besten gleich ganz schnell Abstand, denn die ist ebenfalls sehr starr in der Programmierung und erfordert von Dir Zillionen Zeilen Code. Beispiel:
1. Auswahl unter 20 Möglichkeiten (1. Operand)
2. Logische Verknüpfung aussuchen unter 3 Möglichkeiten
3. Auswahl unter 20 Möglichkeiten (2. Operand)
4. Auswahl unter 20 Möglichkeiten (Ergebnis)
ergibt 24000 mögliche Programmverläufe. Das sind wenigstens ebensoviele Zeilen Code. Schnell wird der Code schon sein, aber groß und extrem schwer zu warten.

Mein Rat: Beiß in den sauren Apfel und begebe Dich in den Zweikampf mit der Logik, damit zur Laufzeit interpretiert wird..

Gruß - WPö

Re: Einen Nutzer eigene Bedingungen erstellen lassen

Verfasst: 13.11.2012 21:08
von Danilo
Soll das als Script-Interpreter sein, oder visuell? Nach Deiner Beschreibung im 1. Beitrag dachte ich
eher an eine Auswahl mit Comboboxen in einem Dialogfenster:

Code: Alles auswählen

Wenn [ Meine HP ]  [ > ]  [ Gegner HP ]

+ [ und / oder]


dann [ Greife an ]
[...] sind dabei Comboboxen zur Auswahl. Mit + [und/oder] fügst Du eine neue Auswahl-Zeile hinzu.

Die Auswertung hängt dann von den Werten ab. Irgendwo müssen die ja stehen, also machst Du
nur ein Select für den Operator und vergleichst so z.B.

Code: Alles auswählen

case '>' : If Val( MeineMap("Meine HP") ) > Val( GegnerMap("Gegner HP") ) : ProcedureReturn 1 ...
Am besten die möglichen Auswahlstrings in eine MAP machen und diese auch den Comboboxen zur Auswahl hinzufügen.

Re: Einen Nutzer eigene Bedingungen erstellen lassen

Verfasst: 14.11.2012 13:15
von Sunny
@WPö
Bin mir nicht sicher, ob sich ein echtzeit-interpreter in pb realisieren lässt

@Danilo
So ungefähr hatte ich mir das gedacht, nur nicht mit richtigen Gadgets, sondern mit selbst gebasteltem zeugs, da ich für das game einen windowedscreen nutzen will.

Re: Einen Nutzer eigene Bedingungen erstellen lassen

Verfasst: 14.11.2012 14:05
von Danilo
Sunny hat geschrieben:@Danilo
So ungefähr hatte ich mir das gedacht, nur nicht mit richtigen Gadgets, sondern mit selbst gebasteltem zeugs, da ich für das game einen windowedscreen nutzen will.
Kannst Du ja mit einer Art eigenem Auswahl-/Popup-Menu machen, statt mit Comboboxen.

Oder so wie bei Scratch ;)
(Visuelles Programmieren mit Logo um Kinder anzulernen)

Bild

- Scratch: a programming language for everyone


Zum auswerten von mathematischen Ausdrücken könntest Du vielleicht EvaluateExpression.zip verwenden.

Damit kannst Du z.B. das Ergebnis für "12 > 17 And 5 = 5" bekommen, wenn Du "Meine_HP > Gegner_HP und Mein_Level = Gegner_Level" in Zahlen übersetzt (z.B. Werte aus Map holen).

Re: Einen Nutzer eigene Bedingungen erstellen lassen

Verfasst: 14.11.2012 14:40
von Sunny
Das ist ein gutes Beispiel, ich hatte da immer den RPG-Maker im Hinterkopf. Da konnte man sich auch immer seine eigenen kleinen Scripts zurecht basteln. Am besten ich werd einfach mal drauf los Coden, wenn ich die Zeit dazu finde und dann werde ich ja sehen, auf was für Probleme ich dann noch stoße. Auf den ersten blick würde ich mal sagen, das mir die operaturen die meisten probleme bereiten werdn.

Re: Einen Nutzer eigene Bedingungen erstellen lassen

Verfasst: 14.11.2012 15:04
von Danilo
Sunny hat geschrieben:Auf den ersten blick würde ich mal sagen, das mir die operaturen die meisten probleme bereiten werdn.
Bei Evaluate() - Expression Parser findest Du schon mal die Operatoren:
+, -, *, /, % (modulo), ^ (power of), <<, >>, =, <>, <, >, <=, =<, >=, =>, ( ) , &, |, !, ~, NOT, OR, AND, XOR

Sonst einfach fragen.