KI entwicklung für Tetris

ZuseZ3

Lt. Commander
Registriert
Jan. 2014
Beiträge
1.659
Erstmal ein hallo an alle Freunde der Nacht :)

Ich sitze gerade an einem Projekt (Tetrisspielende KI) für das ich naheliegender weise erst einmal ein funktionierendes Tetrisspiel benötige.
Da ich eh c++ mag und mit QT auf der Arbeit nutze habe ich auch eines selbst implementiert.
Das Backend steht so weit, nur mit dem Frontend habe ich probleme da ich sonst am liebsten alles über die shell mache.

Daher meine Frage an euch, wie ich folgendes am besten implementiere (QT creator)
Ich möchte, dass ein 10x20 Feld angezeigt wird, welches sich beim aufrufen einer bestimmten Methode updatet, in dem es Daten aus einem vorhandenen int array ausliest (Werte von 0-7) und je nach Wert die Felder unterschiedlich färbt.

Etwas in dieser Richtung finde ich sehr schön, was anderes ist aber auch ok falls zu kompliziert. Mir reichen einfach ein paar Begriffe damit ich weitersuchen kann. Zur Zeit fiele mir nämlich nur ein eine Tabelle mit den Zahlen zu füllen oder 200 Blöcke nebeneinander anzuordnen, beides nicht alzu überzeugenden Aussichten, ich vertraue daher auf euch ;)

viele Grüße :)
 
Zuletzt bearbeitet:
Vielleicht ist QPainter etwas für dich.
 
Ich würd ne Qgraphicsscene verwenden, in der du das Spielfeld reinlegst. Dh du machst für jedes Quadrat addRect. Den zurückgegebenen Pointer köntest du direkt in einem 2D std::array aufbewahren und über die Indizes des arrays hast du dann auch DIREKT die Objekte in der Hand welche du durch deine Spiele-Logik in ihrer Farbe (und nicht ihrer Position) verändern willst.
Darstellen tut man eine Scene in einer Qgraphicsview welche man wie einen Button einem Widget oder einem Window hinzufügt.
 
Zuletzt bearbeitet:
Vielen Dank für die ganzen Empfehlungen, bisher hatte ich nur mal von ncurses gelesen, die anderen waren mir komplett neu.
Ich setzte mich dieses Wochenende dann mal hin und gucke mal ob ich es schaffe die Oberfläche fertig zu basteln um mich endlich wieder dem spannenderen Teil zuzuwenden :)
 
Wenn Du deine AI fertig hast, kannst Du sie ja mal meinen Space Invaders Klon spielen lassen: 38h.de

Das wäre übrigens auch mein Vorschlag zum Erstellen eines einfachen Spieles wie Tetris oder Snake: Das p5.js Framework.
Spart Dir den ganzen "Interfacing & Rendering Bums", ist zielführend und es macht echt riesig Spaß damit "rumzudödeln" und ein wenig "OO-Javascript zusammen zu nageln".

Nichts gegen C++, ich finde alle Programmiersprachen toll und eine AI würde ich wohl auch in C++ schreiben. Aber die AI muss ja Grafische Datenverarbeitung nutzen und keine anderen "APIs" vom Spiel, sodass die zugrunde liegende Game-Processing-Engine "egal" ist.

Abgesehen davon würdest Du das Web mit einen Tetris Klon bereichern können :)
 
Zuletzt bearbeitet:
Ja das mit der Steuerung mag sein. Läuft auch nicht auf Touchscreens.
Das ist auch eher nur so ein Spaß am Wochenende gewesen, um irgendwas auf der Webseite zu haben, was nicht nach "Sie sehen eine soeben freigeschaltete Webseite" ausschaut.

Das man jedoch die Waffe nicht "durchspammen" kann ist Absicht, falls Du das meinst ;)

Thema Machine Vision:
Wenn man eine AI bauen möchte, die Computerspiele spielt sollte die schon grafische Datenverarbeitung nutzen ;)
Letztlich kann es der Ersteller für sich natürlich definieren aber für mich ist eine AI, die Spiele spielt, zunächst Tetris,
ja hergeleitet von dem, was ein Mensch macht, der Tetris spielt. Dazu gehört für mich auch der Bereich "Machine Vision", der ja auch ein Teil von AI Entwicklungen ist.

Ansonsten ist das nach den grundlegenden Maßstäben her für mich keine AI, sondern ein Bot.
Die Abgrenzung ist nicht klar definiert, für mich liegt der Unterschied darin, ob die AI die Mensch Maschine Schnittstellen eines Spiels / einer Software nutzt oder ob der Bot direkt auf das Datenprotokoll / APIs zugreift. Und natürlich ob durch Machine Learning die Erfahrung der Software verbessert wird oder nicht. Bots funktionieren nur nach Schema-F. Trifft das Schema aufgrund eines Zufalls im Spiel jedoch mal nicht zu, versagt der Bot in der Regel.

Letztlich gehört zu einer Tetris AI für mich mehrere Module:
Grafische Datenverarbeitung für Machine Vision.
Das grundlegende Tetris Rgelwerk.
Ein Lernmodul, welches basierend auf der gesammelten Erfahrung der Software die Tetris-Spiel-Algorithmen verbessert.
Ein Entscheidungsmodul, das basierend auf dem Lernmodul die Spielentscheidung trifft.
Und natürlich der Kernel...
 
Bin zwar etwas spät, aber mir ist eingefallen, dass Qt selbst schon ein Tetris example hat: Tetrix Example
Dann kannst du dich auf die AI Entwicklung konzentrieren und einfach die example Implementierung verwenden.

Gruß
BlackMark
 
Zurück
Oben