C# Logik eines Browserspiel Bots

11/14/2020 02:05 DragonTHB#1
Guten Tag,
Ich programmiere zur Zeit einen Bot für ein typisches Browsergame.
Mit typisches Browsergame meine ich so etwas wie "Die Staemme".
Mein Programm kann bis jetzt alle wichtigen Informationen sammeln und eigentlich habe ich auch schon eine Botsteuerung die Gebäude bauen kann.

Die Steuerung ist eine Art Ablaufsteuerung. Ein Timer ruft in regelmäßigen Intervallen eine Methode auf und diese geht dan schritt für schritt einen Ablauf durch.

Beispiel:

bool Schritt_1;
bool Schritt_2;
bool Schritt_3;
....

private void Timer_Tick()
{
if(Schritt_1==true)
{
ablauf....
Schritt_1=false;
Schritt_2=true;
}

if(Schritt_2==true)
{
ablauf....
Schritt_2=false;
Schritt_3=true;
}

if(Schritt_3==true)
{
ablauf....
Schritt_3=false;
Schritt_4=true;
}

}

Ich finde diesen Ablauf aber nicht so schön und sehr undynamisch.

Vor längerer Zeit hatte ich mal einen Bot für ein anderes Spiel geschrieben und da hatte ich eine andere Bot Logik programmiert.

Es gab eine Klasse welche Aufgaben enthiel z.b. Steuere diese Seite an , Warte bin Seite fertig fertig geladen ist , Drücke einen Button;

Dan habe ich Tätigkeiten in Aufgaben gesplittet habe diese in ein Array gepackt und meine Bot Steuerung hatte einfach die Aufgaben von oben nach unten abgearbeitet.

Beispiel ein Gebäude bauen:

Aufgabe: Navigiere zu Seite Gebäude;
Aufagbe: Warte bis Seite Fertig geladen ist;
Aufgabe: Überprüfe ob genug Ressourcen zum Bau vorhanden sind.
Aufagbe: Drücke den bau Button;

Diese Steuerung fand ich damal etwas angenehmer und Dynamischer.

Hat von euch vielleicht jemand eine gute Idee oder Erfahrungen wie man eine gute Bot Steuerung bauen kann?
Ich meine damit die Logik wie ein Bot vorgeht wenn man z.b. einen Gebäudebau in Auftrag gibt oder einen Angriff oder was auch immer?
11/14/2020 15:01 Mikesch01#2
Das ist ein klassisches Design-Pattern Problem. Es gibt das State Pattern, dass die Probleme von Zuständen löst. [Only registered and activated users can see links. Click Here To Register...]
11/14/2020 16:12 DragonTHB#3
Vielen Dank für die Antwort.
Ich werde es mir durchlesen und schauen, dass ich mir daraus ein gutes Arbeitsschema für meinen Bot baue.
11/15/2020 10:11 PC Jones#4
Es gibt einige Sachen die direkt auffallen.

1. Warum 3 bool Variablen zum zählen benutzen, wenn du einfach eine Variable
Code:
int Schritt = 1;
machen kannst und diese dann erhöhen bzw auf 1 zurücksetzen kannst.

2. Könntest du dir damit auch direkt die vielen unübersichtlichen ifs ersparen und mit einem [Only registered and activated users can see links. Click Here To Register...] arbeiten.
11/15/2020 11:43 Else#5
Quote:
Originally Posted by PC Jones View Post
Es gibt einige Sachen die direkt auffallen.

1. Warum 3 bool Variablen zum zählen benutzen, wenn du einfach eine Variable
Code:
int Schritt = 1;
machen kannst und diese dann erhöhen bzw auf 1 zurücksetzen kannst.

2. Könntest du dir damit auch direkt die vielen unübersichtlichen ifs ersparen und mit einem [Only registered and activated users can see links. Click Here To Register...] arbeiten.
Das ändert nichts daran, dass die Vorgehensweise völliger Irrsinn ist. :rolleyes:
11/15/2020 13:17 PC Jones#6
Quote:
Originally Posted by Else View Post
Das ändert nichts daran, dass die Vorgehensweise völliger Irrsinn ist. :rolleyes:
Natürlich, aber an solchen Sachen merkt man doch dass er wohl noch totaler Anfänger ist. Da ist es sicherlich hilfreich auch auf sowas hinzuweisen
11/15/2020 14:35 DragonTHB#7
Autsch. Ok ich bin eigentlich kein totaler Anfänger *Heul*
Ja hast recht mit einem Integer der die Schritte zählt wäre es einfacher.
Aber wie Else schon sagte mir gefällt die Vorgehensweise an sich schon überhaupt garnicht.
In Sachen übersichtlichkeit und Dynamik ist es einfach Schrott. Und da mir nurnoch die zweite Möglichkeit einfiel, Einzelschritte zu erzeugen und das in einen Array Stack zu packen. Dachte ich mir ich frage mal hier wie ihr das so handhaben würdet.
11/15/2020 15:47 Else#8
@[Only registered and activated users can see links. Click Here To Register...] der Vorgeschlagene Weg von @[Only registered and activated users can see links. Click Here To Register...] ist schon richtig. Du kannst dadurch bestens die Status-Meldungen klassifizieren und entsprechend alles handhaben, ohne jeglichen Stack & Co.


Quote:
Originally Posted by PC Jones View Post
Natürlich, aber an solchen Sachen merkt man doch dass er wohl noch totaler Anfänger ist. Da ist es sicherlich hilfreich auch auf sowas hinzuweisen
Und deswegen wird er trotzdem weiterhin auf dem falsche weg geleitet? :confused: :rolleyes: Zumal bereits auf einen möglichen, richtigen Weg hingewiesen worden ist. Ich weiß nicht was daran hilfreich ist andere ins verderben zu schubsen?
11/15/2020 15:52 Ludder231#9
Um es vielleicht ein wenig einfacher zu gestalten könntest du ein Enum erstellen mit den Aufgaben Typen(Bauen, Sammeln, ...) und dann das Enum in eine Klasse/Struct einbauen und dann z.b ne List<> mit allen Aufgaben zu machen die der User möchte. Und dann in einer Schleife oder so den Aktion/Aufgaben Typ abfragen mit nem SwitchCase...
11/20/2020 04:29 DragonTHB#10
Hallo ich muss wirklich sagen das der Tipp mit dem "State Design Pattern" wirklich ein gutes Stichwort war. Ich war am Anfang wirklich am überlegen, wie ich das damit umsetzen soll. Dan hatte ich mich näher damit beschäftigt und eine wirklich schöne Lösung hinbekommen, welche mich bis jetzt sehr zufrieden stellt. Danke.