GithubHelp home page GithubHelp logo

kilika / connect4_tournament Goto Github PK

View Code? Open in Web Editor NEW

This project forked from thecodingbuddies/connect4_tournament

0.0 0.0 0.0 2.43 MB

Community KI Wettbewerb zum Spiel "4 Gewinnt" präsentiert von den Coding Buddies.

License: GNU General Public License v3.0

Python 87.84% Java 12.16%

connect4_tournament's Introduction

Willkommen zum KI Wettbewerb "4 Gewinnt" von den Coding Buddies!

Zum krönenden Abschluss unseres Grundlagenkurses veranstalten wir einen KI Wettbewerb zu dem Klassiker "4 Gewinnt". Nutzt euer erlangtes Wissen aus dem Kurs und tretet gegen andere Entwickler in einem spaßigen Turnier im KO Modus an!

Grundsätzlich gilt:

Solltet ihr Fragen haben oder Hilfe benötigen. Scheut euch nicht uns auf unseren Plattformen zu kontaktieren! Wir werden auch verschiedene Starthilfen zur Verfügung stellen.

UND ACHTUNG! Der Spaß und das Lernen steht im Vordergrund also macht mit :)


Beispielpartie

Aufgabe

Es ist ein Bot zu entwickeln, der nach den Standardregeln das Spiel "4 Gewinnt" spielt. Hierfür haben wir eine Schnittstelle in den jeweiligen Clients (Java oder Python) bereit gestellt, welche implementiert werden muss. Das Ziel ist es eine gewisse Anzahl an Spiele gegen eine Gegner KI zu gewinnen und als Turniersieger hervorzugehen! :)

Teilnahmebedingungen

  • Implementierung der vorgegebenen Bot Schnittstelle (Java oder Python)
  • Der Bot sendet dem Spiel vor dem Timeout (ca 2 Sekunden), was der nächste Zug ist
  • Die KI ist selbst geschrieben

Anforderungen

  • Python 3.10.4+ (für den Spieleserver und gegebenfalls für den Bot)
  • Java SDK 17+ (falls der Bot in Java geschrieben wird)

Den Spieleserver starten

Den Spieleserver findest du im Ordner "gameserver", welcher als Python projekt geöffnet werden kann. Um die notwendigen Packages für den Server zu installieren:

py -m pip install -r requirements.txt

Danach kannst du den Spieleserver wie folgt starten (im gameserver ordner):

py __main__.py

Hierfür wird default der Port 8765 verwendet. Falls du beispielsweise den Port 5555 verwenden möchtest, ändere den Aufruf zu:

py __main__.py 5555

Es sollte als letzte Nachricht zu sehen sein:

start game server..

Der Server ist erfolgreich gestartet und die Clients können sich verbinden. Sobald sich zwei Clients verbunden haben, beginnt das Spiel.

Den Server im "Manuellen Modus" starten auf dem standard Port:

py __main__.py --manual-mode

Den Server im "Manuellen Modus" starten mit selbst definiertem Port (z.B. port=7878):

py __main__.py 7878 --manual-mode

Das ist wichtig um den Server ohne Timeout laufen zu lassen. Das ist notwendig wenn man den manuellen Client zum spielen nutzen möchte.

Einen Client mit dem Server verbinden (Python)

Den Python Client starten:

cd pythonClient
py clientMain.py <BotName> <Port>
Parameter Beschreibung
BotName Name der KI, die gestartet werden soll (default: random)
Port Port des Servers (default: 8765)

Möchtest du beispielsweise die Fill KI starten und der Server läuft auf 5555:

py clientMain.py fill 5555

Einen Client mit dem Server verbinden (Java)

Den Java Client starten:

cd javaClient   # in den javaClient Ordner wechseln
.\gradlew run

Um einen anderen Port oder eine andere KI zu verwenden:

.\gradlew run --args="<BotName <Port>"
Parameter Beschreibung
BotName Name der KI, die gestartet werden soll (default: random)
Port Port des Servers (default: 8765)

Möchtest du beispielsweise deine eigene KI starten und der Server läuft auf 5555:

.\gradlew run --args="user 5555"

Einen Client mit dem Server verbinden (Manueller Client)

Um gegen deine eigene KI spielen zu können, kannst du einen manuellen Client starten. Anschließend kannst du mit der Eingabe von 1-7 in der Konsole deinen nächsten Zug auswählen.

Den Manual Client starten:

cd manualClient   # in den ManuelClient Ordner wechseln
py manualClient.py <DeinName> <Port>

Möchtest du beispielsweise mit dem Namen "Jarvis" spielen und der Server läuft auf Port 5555:

py manualClient.py Jarvis 5555

Die Botklasse

Um eine Eigene KI in das Spiel zu integrieren, muss eine vorgegebene BotKlasse implmenetiert werden. Dafür muss die play() Methode/Funktion ergänzt werden.

Die Botklasse kann wahlweise in Java oder Python entwickelt werden:

Python

Unter dem Pfad "Bots" findest du das user_ai.py file. Diese Klasse beinhaltet die user KI und die folgende Funktion "play":

    def play(self, current_field):
        #
        # Implementiere hier deine Logik, damit die KI spielen kann
        #
        return 0  # aktuell wird immer die erste Spalte ausgewählt als nächsten Zug

Der Returnwert der play Funktion ist ein Integer innerhalb von 0-5 (mögliche Spalten im Spielfeld)

Java

Unter dem Package "bots" findest du das UserBot.java file. Diese Klasse beinhaltet die user KI und die folgende Funktion "play":

    public int play(int[][] current_field) {
        /*
        Implementiere hier deine Logik, damit die KI spielen kann
         */
        return 0; // aktuell wird immer die erste Spalte ausgewählt als nächsten Zug
    }

Der Returnwert der play Funktion ist ein Integer innerhalb von 0-5 (mögliche Spalten im Spielfeld)

Übersicht der aktuellen Bots

Bot Beschreibung
random wählt zufällig eine nächste Spalte aus
fill füllt eine konfigurierte Spalte auf
user verwendet deine eigene KI

Spielfeld Daten

Die aktuellen Spielfelddaten werden deiner KI pro Spielzug zur Verfügung gestellt. Damit hast du die alle notwendigen Informationen und entsprechend "den Blick" auf das Spielfeld.

Die Variable "current_field" ist ein zweidimensionales Array, welches das Spielfeld beschreibt.

Beispiel aktuelles Spielbrett der Variable "current_field [i] [j]":

       j=0   j=1   j=2   j=3   j=4   j=5   j=6 
i=0: [  1  ,  2  ,  0  ,  2  ,  0  ,  0  ,  0  ]
i=1: [  1  ,  0  ,  0  ,  2  ,  0  ,  0  ,  0  ]
i=2: [  1  ,  0  ,  0  ,  0  ,  0  ,  0  ,  0  ]
i=3: [  0  ,  0  ,  0  ,  0  ,  0  ,  0  ,  0  ]
i=4: [  0  ,  0  ,  0  ,  0  ,  0  ,  0  ,  0  ]
i=5: [  0  ,  0  ,  0  ,  0  ,  0  ,  0  ,  0  ]

Spieler 1 (Blau) hat die ID=1

Spieler 2 (Grün) hat die ID=2

Um das Spiel zu gewinnen, muss die KI von Spieler 1 als nächsten Zug die erste Spalte auswählen/zurückgeben

Die oben gezeigten Daten passen zu dem folgenden Bild:


Spielfelddaten

connect4_tournament's People

Contributors

thecodingbuddies avatar treising avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.