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/05 13:23] – [Bombe gezogen] 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. | | ||
| + | |||
| + | ===== Spielstart ===== | ||
| + | Dein Bot wird informiert, dass ein neues Spiel startet. | ||
| + | |||
| + | ==== Request ==== | ||
| + | |||
| + | * action: " | ||
| + | * bots: Anzahl der Bots in dieser Spielrunde | ||
| + | * card_counts: | ||
| + | |||
| + | === Beispiel === | ||
| + | <code json> | ||
| + | { | ||
| + | " | ||
| + | {" | ||
| + | {" | ||
| + | {" | ||
| + | {" | ||
| + | {" | ||
| + | {" | ||
| + | ], | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ], | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== Response ==== | ||
| + | * ACK | ||
| ===== Karte gezogen ===== | ===== Karte gezogen ===== | ||
| Zeile 28: | Zeile 90: | ||
| * action: " | * action: " | ||
| * card: Name der gezogenen Karte | * card: Name der gezogenen Karte | ||
| + | |||
| + | === Beispiel === | ||
| + | '' | ||
| ==== Response ==== | ==== Response ==== | ||
| Zeile 34: | Zeile 99: | ||
| ===== Dein Spielzug ===== | ===== Dein Spielzug ===== | ||
| Dein Bot ist am Zug und kann eine Karte ausspielen oder nicht. | Dein Bot ist am Zug und kann eine Karte ausspielen oder nicht. | ||
| + | Dein Bot ist solange am Zug, bis er keine Karte mehr spielt. | ||
| + | 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 ==== | ||
| * action: " | * action: " | ||
| + | * bots: Anzahl der verbliebenen Bots in Spielrunde | ||
| + | * deck: Anzahl der Karten im Deck | ||
| + | |||
| + | === Beispiel === | ||
| + | '' | ||
| ==== Response ==== | ==== Response ==== | ||
| - | * card: Name der auszuspielenden Karte **oder** "None" | + | * card: Name der auszuspielenden Karte **oder** "NONE" |
| - | ===== Karte abgelegt | + | ===== Aktionen der anderen Bots ===== |
| - | Ein anderer | + | Ein Bot hat eine Aktion durchgeführt. |
| + | Dein Bot wird über jede Aktion jedes Bots informiert, auch seine eigenen Aktionen. | ||
| ==== Request ==== | ==== Request ==== | ||
| - | * action: "CARD" | + | * action: "INFORM" |
| - | * card: Name der abgelegten | + | * event: " |
| + | * card: Name der Karte | ||
| + | === Beispiele === | ||
| + | Ein Bot hat ... | ||
| + | * ... eine Karte gespielt: '' | ||
| + | * ... eine Karte gezogen: '' | ||
| ==== Response ==== | ==== Response ==== | ||
| * ACK | * ACK | ||
| - | ===== Bombe gezogen | + | ===== Bombe entschärft |
| Dein Bot hat soeben eine " | Dein Bot hat soeben eine " | ||
| Du kannst nun die " | Du kannst nun die " | ||
| ==== Request ==== | ==== Request ==== | ||
| - | * action: "PLACE" | + | * action: "DEFUSE" |
| - | * count: Anzahl der Karten im Stapel | + | * decksize: Anzahl der Karten im Stapel |
| + | |||
| + | === Beispiel === | ||
| + | '' | ||
| ==== Response ==== | ==== Response ==== | ||
| Zeile 70: | Zeile 154: | ||
| * cards: Liste mit den Namen der nächsten 3 Karten im Stapel. | * cards: Liste mit den Namen der nächsten 3 Karten im Stapel. | ||
| + | === Beispiel === | ||
| + | '' | ||
| ==== Response ==== | ==== Response ==== | ||
| * ACK | * ACK | ||
| Zeile 78: | Zeile 164: | ||
| ==== Request ==== | ==== Request ==== | ||
| - | * action: "EXPLODED" | + | * action: "EXPLODE" |
| + | === Beispiel === | ||
| + | '' | ||
| ==== Response ==== | ==== Response ==== | ||
| * ACK | * ACK | ||
| Zeile 88: | Zeile 176: | ||
| ==== Request ==== | ==== Request ==== | ||
| * action: " | * action: " | ||
| - | * FIXME | + | * ranks: Die Rangliste der Bots vom ersten bis zum letzten Platz |
| + | |||
| + | === Beispiel === | ||
| + | '' | ||
| ==== Response ==== | ==== Response ==== | ||
| * ACK | * ACK | ||