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:23] – [Karten] 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 70: 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 80: 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 88: 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
Zeile 102: Zeile 137:
  
 ==== Request ==== ==== Request ====
-  * action: "PLACE+  * action: "DEFUSE
-  * count: Anzahl der Karten im Stapel+  * decksize: Anzahl der Karten im Stapel
  
 === Beispiel === === Beispiel ===
Zeile 129: Zeile 164:
  
 ==== Request ==== ==== Request ====
-  * action: "EXPLOD"+  * action: "EXPLODE"
  
 +=== Beispiel ===
 +''{"action": "EXPLODE"}''
 ==== Response ==== ==== Response ====
   * ACK   * ACK
Zeile 142: Zeile 179:
  
 === Beispiel === === Beispiel ===
-''{"ranks": ["cutekitty", "randombot"], "action": "OVER"}''+''{"ranks": ["cutekitty", "randombot"], "action": "GAMEOVER"}''
  
 ==== Response ==== ==== Response ====
   * ACK   * ACK
  • modul/m321/kitten/bot.1741602228.txt.gz
  • Zuletzt geändert: 2025/03/10 11:23
  • von msuter