Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m321:kitten:bot [2025/03/10 11:04] – [Request] msutermodul: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 registrieren.+[[https://github.com/templates-python/m321-kitten-local.git|GitHub-Repository]] 
 + 
 +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 Bot beim Clowder-Service.
 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: 'MEOW' 
 +  * ip: IP-Adresse des Bots 
 +  * name: Name des Bots 
 +  * type: 'bot' 
 + 
 + 
 +=== 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: Eine Kopiervorlage für deine eigenen Bots 
 +  * RandomBot: Ein vollständiger Bot, der seine Entscheidungen anhand des Zufallsprinzips trifft. 
 + 
 +Beide Beispiele enthalten eine Helfer-Klasse, welche die Methode ''request(self, data)'' implementiert. 
 +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, sendet der Arena-Service einen Request an deinen Bot. Immer wenn eine relevante Aktion im Spiel stattfindet, sendet der Arena-Service einen Request an deinen Bot.
 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 | Dein Bot explodiert, falls du keine DEFUSE-Karte spielst. | +EXPLODING_KITTEN | Dein Bot explodiert, falls du keine DEFUSE-Karte spielst. | 
-FUTURE | Mit "See the future" kannst du die nächsten 3 Karten auf dem Stapel sehen. |+SEE_THE_FUTURE | Mit "See the future" kannst du die nächsten 3 Karten auf dem Stapel sehen. |
 | 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: "START"   * action: "START"
   * 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 51: Zeile 76:
     "randombot"     "randombot"
   ],    ], 
-  "action": "START"}+  "action": "START" 
 +}
 </code> </code>
  
Zeile 75: 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 "Skip" ausspielt.
 +Nach dieser Karte macht es keinen Sinn, dass er weitere Karten spielt.
  
 ==== Request ==== ==== Request ====
Zeile 85: 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 93: Zeile 122:
 ==== Request ==== ==== Request ====
   * action: "INFORM"   * action: "INFORM"
-  * card: Name der abgelegten Karte+  * event: "PLAY" oder "DRAW" 
 +  * card: Name der Karte
  
 === Beispiele === === Beispiele ===
 Ein Bot hat ... Ein Bot hat ...
   * ... eine Karte gespielt: ''{"botname": "cutekitty", "event": "PLAY", "data": "NORMAL", "action": "INFORM"}''   * ... eine Karte gespielt: ''{"botname": "cutekitty", "event": "PLAY", "data": "NORMAL", "action": "INFORM"}''
-  * ... eine Karte gezogen: ''{"botname": "cutekitty", "event": "DRAW", "data": null, "action": "INFORM"}''+  * ... eine Karte gezogen: ''{"botname": "cutekitty", "event": "DRAW", "data": "null", "action": "INFORM"}''
 ==== Response ==== ==== Response ====
   * ACK   * ACK
  
-===== Bombe gezogen =====+===== Bombe entschärft =====
 Dein Bot hat soeben eine "Exploding Kitten" Karte gezogen und mit "Defuse" entschärft. Dein Bot hat soeben eine "Exploding Kitten" Karte gezogen und mit "Defuse" entschärft.
 Du kannst nun die "Exploding Kitten" Karte an einer beliebigen Stelle im Kartenstapel platzieren.  Du kannst nun die "Exploding Kitten" Karte an einer beliebigen Stelle im Kartenstapel platzieren. 
  
 ==== Request ==== ==== Request ====
-  * action: "PLACE+  * action: "DEFUSE
-  * count: Anzahl der Karten im Stapel+  * decksize: Anzahl der Karten im Stapel 
 + 
 +=== Beispiel === 
 +''{"decksize": 3, "action": "DEFUSE"}''
  
 ==== Response ==== ==== Response ====
Zeile 121: 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 ===
 +''{"cards": ["EXPLODING_KITTEN", "SEE_THE_FUTURE", "NORMAL"], "action": "FUTURE"}''
 ==== Response ==== ==== Response ====
   * ACK   * ACK
Zeile 129: Zeile 164:
  
 ==== Request ==== ==== Request ====
-  * action: "EXPLODED"+  * action: "EXPLODE"
  
 +=== Beispiel ===
 +''{"action": "EXPLODE"}''
 ==== Response ==== ==== Response ====
   * ACK   * ACK
Zeile 139: Zeile 176:
 ==== Request ==== ==== Request ====
   * action: "GAMEOVER"   * action: "GAMEOVER"
-  * FIXME +  * ranks: Die Rangliste der Bots vom ersten bis zum letzten Platz 
 + 
 +=== Beispiel === 
 +''{"ranks": ["cutekitty", "randombot"], "action": "GAMEOVER"}'' 
 ==== Response ==== ==== Response ====
   * ACK   * ACK
  • modul/m321/kitten/bot.1741601090.txt.gz
  • Zuletzt geändert: 2025/03/10 11:04
  • von msuter