Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
modul:m321:kitten:bot [2025/03/10 11:21] – msuter | modul:m321:kitten:bot [2025/03/18 10:58] (aktuell) – [Request] msuter | ||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
Ausserdem soll er seine Karten strategisch so ausspielen, dass er alle anderen Bots schlägt. | Ausserdem soll er seine Karten strategisch so ausspielen, dass er alle anderen Bots schlägt. | ||
- | ===== Start ===== | + | ===== Aufbau |
- | Beim Start muss sich dein Bot beim Clowder-Service | + | [[https:// |
+ | |||
+ | Dein Bot besteht aus zwei Teilen: | ||
+ | |||
+ | ==== Socket-Controller ==== | ||
+ | Der Socket-Controller steuert die Kommunikation mit den Services. | ||
+ | Er erzeugt auch ein Objekt deiner Bot-Klasse. | ||
+ | |||
+ | Beim Start registriert der Socket-Controller deinen | ||
Als Response erhält er einen Port. | Als Response erhält er einen Port. | ||
- | Öffne einen Socket mit diesem Port und höre dort auf die Nachrichten des Arena-Services. | ||
- | ===== Spielen | + | === Request |
+ | * action: ' | ||
+ | * ip: IP-Adresse des Bots | ||
+ | * name: Name des Bots | ||
+ | * type: ' | ||
+ | |||
+ | |||
+ | === Response === | ||
+ | * Port: Eine zufällige Portnummer. Unter dieser Portnummer muss der Bot einen Socket öffnen und auf Nachrichten warten. | ||
+ | |||
+ | Danach öffnet er einen Socket mit diesem Port und hört dort auf die Nachrichten des Arena-Services. | ||
+ | |||
+ | Sobald ein Request eintrifft, wird dieser analysiert und die korrekte Methode in der Bot-Klasse aufgerufen. | ||
+ | |||
+ | ==== Bot-Klasse ==== | ||
+ | Die Bot-Klasse enthält die Logik zur Steuerung deines Bots. | ||
+ | Im Vorlage-Repository findest du zwei Bots: | ||
+ | * TemplateBot: | ||
+ | * RandomBot: Ein vollständiger Bot, der seine Entscheidungen anhand des Zufallsprinzips trifft. | ||
+ | |||
+ | Beide Beispiele enthalten eine Helfer-Klasse, | ||
+ | Diese Helfer-Klasse wird benötigt, um deine Bots mit der lokalen Version der Arena auszuführen. | ||
+ | Sie ersetzen dabei den Socket-Controller. | ||
+ | |||
+ | ===== Ablauf der Spielrunden | ||
Immer wenn eine relevante Aktion im Spiel stattfindet, | Immer wenn eine relevante Aktion im Spiel stattfindet, | ||
Er muss innerhalb einer Sekunde eine gültige Reponse an den Server senden. | Er muss innerhalb einer Sekunde eine gültige Reponse an den Server senden. | ||
Zeile 17: | Zeile 48: | ||
| NORMAL | Eine Karte ohne besondere Bedeutung. | | | NORMAL | Eine Karte ohne besondere Bedeutung. | | ||
| DEFUSE | Diese Karte entschärft die Bombe. Sie wird automatisch gespielt, wenn du eine EXPLODE-Karte ziehst. | | | DEFUSE | Diese Karte entschärft die Bombe. Sie wird automatisch gespielt, wenn du eine EXPLODE-Karte ziehst. | | ||
- | | EXPLODE | + | | EXPLODING_KITTEN |
- | | FUTURE | + | | SEE_THE_FUTURE |
| SHUFFLE | Mit dieser Karte kannst du den Kartenstapel neu mischen. | | | SHUFFLE | Mit dieser Karte kannst du den Kartenstapel neu mischen. | | ||
Zeile 28: | Zeile 59: | ||
* action: " | * action: " | ||
* bots: Anzahl der Bots in dieser Spielrunde | * bots: Anzahl der Bots in dieser Spielrunde | ||
- | * deck: Anzahl der Karten im Deck inkl. Exploding Kitten | + | * card_counts: Array mit der Anzahl der verschiedenen Karten |
- | * cards: Array mit der Anzahl der verschiedenen Karten | + | |
- | * NORMAL: n | + | |
- | * DEFUSE: n | + | |
- | * EXPLODE: n | + | |
- | * FUTURE: n | + | |
- | * SHUFFLE: n | + | |
=== Beispiel === | === Beispiel === | ||
Zeile 76: | Zeile 101: | ||
Dein Bot ist solange am Zug, bis er keine Karte mehr spielt. | Dein Bot ist solange am Zug, bis er keine Karte mehr spielt. | ||
Er wird also mehrmals hintereinander mit dieser Aktion aufgerufen. | Er wird also mehrmals hintereinander mit dieser Aktion aufgerufen. | ||
+ | |||
+ | Die Ausnahme ist, wenn dein Bot die Karte " | ||
+ | Nach dieser Karte macht es keinen Sinn, dass er weitere Karten spielt. | ||
==== Request ==== | ==== Request ==== | ||
Zeile 86: | Zeile 114: | ||
==== Response ==== | ==== Response ==== | ||
- | * card: Name der auszuspielenden Karte **oder** "None" | + | * card: Name der auszuspielenden Karte **oder** "NONE" |
===== Aktionen der anderen Bots ===== | ===== Aktionen der anderen Bots ===== | ||
Zeile 94: | Zeile 122: | ||
==== Request ==== | ==== Request ==== | ||
* action: " | * action: " | ||
- | * card: Name der abgelegten | + | |
+ | | ||
=== Beispiele === | === Beispiele === | ||
Ein Bot hat ... | Ein Bot hat ... | ||
* ... eine Karte gespielt: '' | * ... eine Karte gespielt: '' | ||
- | * ... eine Karte gezogen: '' | + | * ... eine Karte gezogen: '' |
==== Response ==== | ==== Response ==== | ||
* ACK | * ACK | ||
Zeile 108: | Zeile 137: | ||
==== Request ==== | ==== Request ==== | ||
- | * action: "PLACE" | + | * action: "DEFUSE" |
- | * count: Anzahl der Karten im Stapel | + | * decksize: Anzahl der Karten im Stapel |
=== Beispiel === | === Beispiel === | ||
Zeile 135: | Zeile 164: | ||
==== Request ==== | ==== Request ==== | ||
- | * action: "EXPLOD" | + | * action: "EXPLODE" |
+ | === Beispiel === | ||
+ | '' | ||
==== Response ==== | ==== Response ==== | ||
* ACK | * ACK | ||
Zeile 148: | Zeile 179: | ||
=== Beispiel === | === Beispiel === | ||
- | '' | + | '' |
==== Response ==== | ==== Response ==== | ||
* ACK | * ACK |