Würfel

Fragen zum Szenarienbau und Mapdesign

Moderatoren: Henning, Björn_Jernside

Hat jemand eine Idee, wie man mit dem AoK-Editor am besten einen Würfel original mit Augen von 1-6 simulieren könnte?

Auch AI-Lösungen sind willkommen.

Hab schon ein bisschen was im Hinterkopf, aber ich frag erstmal hier im Forum, vielleicht findet sich noch eine bessere Lösung.
Am ehesten würde ich den Ai-Befehl "create random number" benutzen.

Nehmen wir an, du hast gerade ein Schalter-Signal an die Ai gesendet. Jetzt fängt die Ai an zu würfeln:

(defrule
(event-detected 0 1)
=>
(set-goal 1 1) ; Zeit zum Würfeln beginnt
(disable-self)
)

(defrule
(goal 1 1) ; Zeit zum Würfeln hat begonnen
=>
(generate-random-number 100) ; Würfelt Zahl zwischen 1 und 100
(disable-self)
)

; wenn die Zahl zwischen 1 und 16 liegt, würfelt der Spieler eine 1.

(defrule
(goal 1 1) ; Zeit zum Würfeln hat begonnen
(random-number < 17) ; falls Zahl 1-16
=>
(set-signal 1) ; Signal 1 aktiviert Schalter: "1 gewürfelt."
(set-goal 1 0) ; Fertig. Nicht mehr würfeln!
(disable-self)
)

; wenn die Zahl zwischen 17 und 32 liegt, würfelt der Spieler eine 2.

(defrule
(goal 1 1) ; Zeit zum Würfeln hat begonnen
(random-number > 16) ; Zahl liegt zwischen 17
(random-number < 33) ; und 32
=>
(set-signal 2) ; Signal 2 aktiviert Schalter: "2 gewürfelt."
(set-goal 1 0) ; Fertig. Nicht mehr würfeln!
(disable-self)
)

Und das Ganze noch viermal, bis du sechs Zufallszahlen hast. Funktioniert diese Methode für dein Szenario?

Ingo
Hallo Ingo,

danke für deinen Vorschlag.

die Lösung wäre auf jeden Fall meine Lieblingsvariante.
Aber das Problem dabei ist, das ich für jedesmal würfeln einen neuen trigger bräuchte.
Man kann das ja nicht irgendwie in eine Schleife bauen, oder?

Man bräuchte für die ai ein event, das man irgendwie nach dem würfeln deaktivieren kann, um es dann wieder aktivieren zu können.
Wie ist das mit den taunts? Kann man so ein Ereignis öfter auslösen?
Das hab ich noch nicht versucht.
Taunts sind riskant. Wenn du abspeicherst und einen gespeicherten Spielstand lädst, sind diese über das normale Chat-Fenster (Enter, Chat eintippen, wieder Enter) oft nicht mehr aktivierbar. Dann müssen Spieler das richtige Chatfenster öffnen und dort chat-to-all eingeben.
Man bräuchte für die ai ein event, das man irgendwie nach dem würfeln deaktivieren kann, um es dann wieder aktivieren zu können.
Deshalb hatte ich (set-goal 1 1) vorgeschlagen, um die Würfelrunde zu beginnen und (set-goal 1 1), um die Runde zu beenden/deaktivieren. Aber mit dem Schalter-Signal könntest du Recht haben... ich weiß nicht, ob die Ai mehrmals auf das gleiche Schaltersignal reagiert.

Zwei Alternativen kannst du mal probieren: Danach auf set-goal 1 2 gehen statt zurück auf set-goal 1 0, dann unter goal 1 2 wieder auf Schaltersignal 1 warten... vielleicht klappt's.

(Rest wie vorher)

(defrule
(goal 1 1) ; Zeit zum Würfeln hat begonnen
(random-number < 17) ; falls Zahl 1-16
=>
(set-signal 1) ; Signal 1 aktiviert Schalter: "1 gewürfelt."
(set-goal 1 2) ; Fertig. Nicht mehr würfeln!
(disable-self)
)

(defrule
(goal 1 2)
(event-detected 0 1)
=>
(set-goal 1 1) ; Zeit zum Würfeln beginnt
(disable-self)
)

... und so weiter.

Es gibt noch eine andere Alternative, die wahrscheinlich noch sicherer ist als set-goal: Gib durch die Schalter einem Computerspieler eine Resource als Tribut, die er sonst nicht kriegen kann (z.B. 1000 Stein, und der Spieler hat keine Dorfis). Sobald die Ai 1000 Stein hat, beginnt sie zu würfeln. Wenn sie fertig gewürfelt hat, gibt sie den Tribut an Gaia ab. Sobald sie wieder 1000 Stein hat, geht es von vorne los.

Ingo
Wie wär's es mit einem Reh?

Man lässt es los und je nachdem in welche Richtung es rennt, wird eine Zahl "gewürfelt".
Geht natürlich auch mit Wildschweinen und Wildpferden. ^^
Hmmm... ginge zwar auch und würde den Aufwand mit der Ai umgehen, aber da sehe ich zwei Probleme:

- Erstens müsste man genau 6 Bereiche säuberlich von einander abtrennen. Dann steht das Reh möglicherweise in dem Moment, wo der Trigger feuert, auf zwei Gebieten gleichzeitig (Vorderbeine/Hinterbeine). Wenn man das vermeiden wollte und einen schmalen Streifen zwischen den Gebieten freiließe, kann es wiederum passieren, dass das Reh dann ausgerechnet gerade auf diesem Streifen steht und der Schalter erst mal gar nicht funktioniert - bis es irgendwann in einen der Bereiche läuft.

- Zweitens hast du ein Problem, dass die Zufälligkeit nicht mehr so gesichert ist. Je nachdem in welcher Ecke das Reh steht, sind einige Gebiete näher als andere, außerdem kann es durchaus mal sein, dass das Reh eine ganze Weile irgendwo stehen bleibt und der Spieler innerhalb von zwei Minuten xmal die gleiche Zahl würfelt.

Ingo
Ja, das müsste klappen. :)

Stein auf Stein, so muss es sein. ;)
lass eine einheit patrulieren.
je nach dem wo es steht kommt ne andere zahl.
@Björn
Das wäre mit Sicherheit die einfachste Methode - und auch nicht unbedingt falsch.
Aber wenn man eine Einheit patroullieren lässt ist das ja eigentlich kein Zufall mehr wie bei einem Würfel.
Sie geht mit einer konstanten Geschwindigkeit auf immer die selben Felder.
Damit wird sie berechenbar.


Es sind jederzeit noch weitere Lösungen willkommen. :)
Bin noch nicht so am Ziel.
@Björn
Das wäre mit Sicherheit die einfachste Methode - und auch nicht unbedingt falsch.
Aber wenn man eine Einheit patroullieren lässt ist das ja eigentlich kein Zufall mehr wie bei einem Würfel.
Sie geht mit einer konstanten Geschwindigkeit auf immer die selben Felder.
Damit wird sie berechenbar.


Es sind jederzeit noch weitere Lösungen willkommen. :)
Bin noch nicht so am Ziel.
Hm... wenn man den nackten Dorfi patroulieren lässt, kann man es kaum berechnen wo der stehen bleibt. Aber bei Dorfbewohnern geht glaub die Patroullierfunktion nicht.

EDIT: Ich Idiot, dann kan man ja per "Objekt zuweisen" halt...
Günter, für was brauchst Du einen Würfel?? :confused:
für eine neue map?


aber soo berechenbar is meine methode auch wieder nich. da jeder spieler zu nem anderem zeitpunkt ein ziel erreichtund somit andere ereignisse hervorruft.
@Björn
Ja, da hast du schon recht. Wenn das Ereignis zufällig eintreten würde wäre es kein Problem.
Aber normalerweise ist es ja so, das der Spieler würfelt, und somit selbst der Auslöser ist.
Damit wäre es schon berechenbar.
Vielleicht könnte man deine Variante noch irgendwie weiterdenken?
Zum Beispiel durch gleichzeitiges unregelmäßiges vertauschen der Werte auf den "Würfelfeldern".
@David
Vielleicht für einen "Glücksritter"? :D :P ?
Nein im Ernst, mir schwirrt schon seit längerem so eine verrückte Idee durch den Kopf.
Weis aber auch noch nicht ob mal was draus wird.

Obwohl, die Idee mit dem Glücksritter ist eigentlich auch gar nicht so schlecht.
Wir hatten doch schon mal einen Thread über das Zufallsproblem, in dem mehrere Methoden vorgeschlagen wurden. Da müsste doch eine klappen.

Mein Vorschlag wäre immer noch der: Du machst eine Schaltersequenz, die das Ergebnis ds Würfelwurfs regelt, nach 1 sec wird 1 gewürfelt, nach 2 sec die 2, und so weiter, nach 7 sekunden geht es wieder mit der 1 los.
Das ist zwar kein richtiger Zufallseffekt, aber für den Spieler sieht es so aus, er kann die Entscheidung in keinster weise beeinflussen.
Außerdem lässt sich diese Methode bestimmt auch als Schleife definieren, womit dein Hauptproblem auch gelöst wäre.
Was ist denn genau das Problem an der KI? Zu viele Überprüfungsschalter? Wie oft willst du denn würfeln?
In "Der letzten Bastion" habe ich zufällige Kanoneneinschläge generiert, an 20 verschiedenen Stellen - da brauchte ich 20 Schalter dafür, ja; nervige Klickarbeit, aber man muss es ja nur einmal machen - und es funktioniert perfekt! :)
Das ist ja - glaube ich - sein Problem, dass er es beliebig oft wiederholen will (hat er auch oben geschrieben).
Und das ist dann auch das Problem mit der KI.
@Tlaloc
Kann er schon. Wenn der Schalter Zeitgesteuert wird kann der Spieler ja mittels Anzeigen der Spielzeit sehen, zu welcher Zeit welche Zahl kommt.
Nehmen wir mal an, der vorige Spieler ist fertig und der nächste Spieler ist an der Reihe. Er soll jetzt "würfeln".
Dann braucht er ja nur noch ausrechnen, zu welcher Zeit er welche Zahl bekommt. Ich will ja nicht nur einmal den Becher schütteln.

@ Emperor
Wie oft man würfeln müsste weis ich nicht genau, aber mit Sicherheit öfter als 256 mal.
Das zweite Problem ist die Zufallszahl. Man braucht für jeden Zufallsgenerator einen neuen fact.
Habs jetzt mal mit Taunts versucht.
Das hat hervorragend geklappt.

Vorteile:

1. Man kann einen Taunt beliebig oft einsetzen, anders als bei goals oder triggern.
2. Durch senden des Taunts kann der Spieler absolut selbst entscheiden, wann er "würfeln" will.
3. Der Spieler kann in keinster Weise den Zufallsgenerator der AI beeinflussen.
4. Man hat eigentlich überhaupt keinen Schalteraufwand, ist optional.

Danke an euch alle für Eure Vorschläge und Ideen, vor allem an Ingo, der mich zwar zunächst von den Taunts abbringen wollte aber dann doch letztendlich den entscheidenden Tipp dazu gab (wobei das mit den Steinen auch nicht geklappt hat).


Jetzt könnte ich ja meine Idee schon mal umsetzen, mal sehen ob noch was draus wird.
lol
dann hört man doch irgendwelchen mist ;)
@Tlaloc
Kann er schon. Wenn der Schalter Zeitgesteuert wird kann der Spieler ja mittels Anzeigen der Spielzeit sehen, zu welcher Zeit welche Zahl kommt.
Nehmen wir mal an, der vorige Spieler ist fertig und der nächste Spieler ist an der Reihe. Er soll jetzt "würfeln".
Dann braucht er ja nur noch ausrechnen, zu welcher Zeit er welche Zahl bekommt. Ich will ja nicht nur einmal den Becher schütteln.
Im Grunde hast du recht, aber der Spieler weiß ja nicht, wie dein Zufallsmodell (das ja eigentlich keines ist), funktioniert.
Das heißt, es wird sehr lange dauern, bis er das System versteht, wenn er sich überhaupt die Mühe macht.
Außerdem ist die Spielzeit immer eine andere, wenn der Zufallseffekt nicht gerade am Anfang des Scx gestartet wird, d.h. der Spieler hat vorher schon ein bisschen gespielt und der Zeitpunkt, zu dem der Schalter ausgelöst wird, ist immer ein anderer.
Umgehen kann der Spieler das natürlich, indem er kurz vorher abspeichert. Und wenn er sich das Scx im Editor anschaut, hast du auch gelitten.

Aber ich finde es gut, dass du noch eine bessere Methode gefunden hast. :)