BAB - Blitz AI Battle
Übersicht

![]() |
aMulSieger des Minimalist Compo 01/13Betreff: BAB - Blitz AI Battle |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da Weihnachtsferien sind/waren bin ich anfang der Woche spontan zu kriD gefahren. Und wie das so ist, wenn zwei Genies länger als fünf Minuten im gleichen Raum sind, enstehen bei sowas gerne mal kleine Spielereien.
Und so präsentieren wir euch nun das... Beim BAB handelt es sich um ein Framework, geschrieben in BB, über welches man selbst geschriebene KIs in einer Arena gegeneinander antreten lassen kann. Aber seht selbst(am besten in HD). Im Video seht ihr einige Dummy-KIs, die von einer besseren 'Hunter'-KI auseinandergepflückt werden. ![]() Die Regeln des BAB sind denkbar einfach. Gewonnen hat die KI deren Schiff am längsten überlebt/als letztes übrig bleibt. Hierbei startet jedes Schiff mit 100 Lebenspunkten, verliert davon 10, wenn es getroffen wird und bekommt 20 dazu, wenn es ein anderes Schiff zerstört(heirbei kann es auch passieren, dass ein Schiff mehr als 100 LP hat). Gesteuert werden die Schiffe mit nur drei Variablen, eine zum Beschleunigen, eine zum Drehen und eine zum Schießen, doch dazu später mehr. Hier also der Code des Frameworks: BlitzBasic: [AUSKLAPPEN] Const SCRW = 1024 Um eine eigene KI zu schreiben seht ihr euch am besten zurerst die Beispiel-KIs an. Die entsprechenden Funktionen findet ihr direkt nach der Hauptschleife. Zusätzlich zu einer solchen Update-Funktion braucht jede KI noch eine Konstante, definiert am Code-Beginn und einen Case-Eintrag in der Funktion 'UpdateAI()', durch den die entsprechende Funktion aufgerufen wird. Diese Stellen sind ebenso wie der Teil der Hauptschleife in welchem ihr Schiffe mit euren KIs erstellen müsst durch Kommentare gekennzeichnet. Wir hoffen, dass dieses System nicht zu kompliziert ist, aber durch den Mangel an Funktionspointern in BB geht es leider nicht wirklich einfacher. Wie bereits erwähnt werden die Schiffe über drei Variablen gesteuert. Dies kann man in der Beispiel-"KI" 'AI_KEYBOARD', die sich mit der Tastatur steuern lässt sehr schön sehen. Der Vollständigkeit halber eine kurze Dokumentation: Code: [AUSKLAPPEN] p\accelerating
= 0 -> Schiff beschleunigt nicht <> 0 -> Schiff beschleunigt(mit voller Stärke) p\turning = 0 -> Schiff dreht sich nicht > 0 -> Schiff dreht sich im Uhrzeigersinn(mit voller Stärke) < 0 -> Schiff dreht sich gegen den Uhrzeigersinn(wieder mit voller Stärke) p\shooting = 0 -> Schiff schießt nicht <> 0 -> Schiff schießt(vorausgesetzt Energie ist vorhanden) Dies sind im Prinzip die einzigen drei Variablen die in der Update-Funktion einer KI verändert werden sollten. Weiterhin ist noch eine Bank('p\ki_bank') für das Speichern von beliebigen Daten vorgesehen. Zum Beispiel könnte man hier das Handle eines Schiffes hinterlegen, auf das es die KI gerade abgesehen hat, oder auch ihre Lieblings-Eissorte, sollte das relevant sein. Da es immer spannender ist sich mit anderen zu messen(auch wenn diesmal keiner selber spielen kann) organisieren wir einen offiziellen Wettbewerb. Um teilzunehmen müsst ihr mir nur die Update-Funktion eurer KI (und eure Lieblingsfarbe) per PN schicken. Sobald einige KIs eingegangen sind startet die erste(von hoffentlich zahlreichen) Runde, in welcher diese in mehreren Durchläufen gegeneinandere antreten werden. Hiervon werden wir natürlich ein Video, ähnlich dem bereits gezeigten, veröffentlichen. Natürlich steht es jedem frei, seine KI auch einfach hier zu posten, aber wir denken dass es mehr Spaß macht, das Verhalten der gegnerischen KIs nur mit Hilfe der Videos zu analysieren. Außerdem entwickeln sich so sicherlich vielseitigere KIs, da man sich nicht direkt vom Code der anderen "inspirieren" lassen kann. ![]() Damit das ganze nicht im Chaos endet gibt es ein paar Regeln, die jeder Teilnehmer beachten muss:
kriD und ich werden natürlich als Veranstalter nicht am Wettbewerb teilnehmen. (Wenn die Regeln oder der Code Fragen aufwerten stehen wir natürlich zur Verfügung.) Wir hoffen auf rege Teilnahme. Happy Coding! kriD & aMul EDIT Auf Anfrage hier eine Beispielfunktion, in der noch einmal aufgeführt wird, auf was die KI alles zugreifen darf: BlitzBasic: [AUSKLAPPEN] Function AIExample_Update(p.TPlayer) |
||
- Zuletzt bearbeitet von aMul am Fr, Jan 15, 2010 17:30, insgesamt 4-mal bearbeitet
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Pack ein paar LockBuffers mit ein, so ist es bei mir grottig langsam.
Edit1: Ich finde die Idee nicht schlecht, dennoch wäre es hilfreich zu wissen welche Funktion man ändern soll und wie man die Positionen der Gegner bzw. deren Geschwindigkeiten einlesen kann. Einfach mal so in den bestehen Code reinhacken kann jeder, ist aber keine Vorgabe. Also eine Beispielfunktion erstellen die genau die Werte aufzeichnet aber nichts daraus macht. Also keine KI aufweist. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne mir den Code jetzt angeschaut zu haben.
In Bmax wäre ein KI-Framework sauber lösbar, ohne irgendwelche funktionen ändern zu müssen. Ich hab mir die Tage auch mal gedanken gemacht, wie man sowas am besten strukturell löst Man erstellt sich ne abstrakte klasse Tai und daraus werden dann die KIs abgeleitet, die sich jeder selbst entwickeln kann und denen einen namen nach einer bestimmten Konvention gibt. Der aufrufende code sähe dann wohl etwa so aus: (Natürlich halber pseudocode.. es geht um die struktur) Code: [AUSKLAPPEN] include "game.bmx" include "user1_ki.bmx" include "user2_ki.bmx" field = new TGameField player1 = new TPlayer player1.setAi(new Tai_user1) player2 = new TPlayer player2.setAi(new Tai_user2) field.addPlayer(player1) field.addPlayer(player2) renderer = new TFieldRenderer repeat field.update() cls renderer.render(field) flip until keyhit(1) die update()-methode aus field ruft nacheinander eine update-methode für jeden player auf, die sozusagen einen schritt ausführen soll. Die Struktur ist recht vielseitig. so kann man natürlich auch ein "AI-Modul" schreiben, dass auf tastendrücke reagiert, damit hat man dann den menschlichen spieler implementiert. Oder man schreibt was, dass die bewegungsdaten von einem server bekommt, dann hat man die grundlage für ein netzwerkspiel etc. etc. |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich war mal so frei, das ganze nach BlitzMax zu portieren, allerdings ist es buggy, ich hab irgendwo einen Fehler den ich nicht finde, zu finden in der Funktion SortPlayerListItemUp(), die entsprechende Stelle ist markiert( Z.410 )
Aber zum anschauen reicht es ![]() BlitzMax: [AUSKLAPPEN] SuperStrict Ich wollte es eigentlich schon heute Nacht auf euch loslassen, aber ich dachte ich finde den Fehler noch =/ Übrigens eine sehr lustige Idee und es wäre sicher spannend mal ein paar Kämpfe von unterschiedlichen KIs zu sehen ![]() MfG DaysShadow |
||
Blessed is the mind too small for doubt |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn sich dadurch keiner auf die füße getreten fühlt, würde ich am wochenende mal so ein Framework auf OOP-Basis basteln, wie oben beschrieben.
Grüße, Micha |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@hectic:
Du hast recht. Die Grafik ist nicht unbedingt auf gute Performance optimiert. Bei Gelegenheit werden wir uns da noch einmal ransetzen, der eigentliche Programmablauf bleibt aber von den FPS unabhängig, da alles Frame- und nicht Zeit-basiert ist. Wegen der Funktion: Ich hab gerade den ersten Post editiert, ich hoffe so wird es klar(er). @Smily: ja, in BMax ließe sich die Einbindung neuer KIs eifnacher realisieren. Aber unser Framework ist nunmal in BB, was sicher auch Vorteile hat, da so mehr Leute mitmachen können. Und ich denke, dass wir mit den begrenzten BB-Mitteln eine sehr gute Lösung gefunden haben. @DaysShadow: Ähm.. Nun, wenn man das ganze schon in Bmax schreibst sollte man aber auch gleich die Vorzüge der Sprache nutzen und wie von Smily richtig beschrieben die einbindung von KIs einfacher gestalten. Wie dem auch sei. Es bleibt bei dem oben geposteten Framework. Zumindest die Einbindung der KI und die grundlegende Spiellogik wird nicht mehr verändert. EDIT: @Smily²: Von uns aus kannst du das gerne machen. Nur bitte dann in einen eigenen Thread, das hier ist unsrer. ![]() ![]() |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ausgezeichnete Idee die sehr spaßig werden kann!
Aber noch zum Ablauf: Gibt es unterschiedliche Disziplinen? Werden es nur 1 vs. 1 kämpfe? (Zufällige) Teams? Unentschieden wenn sich zwei nach einer bestimmten Zeit immer noch nicht abgeschossen haben? Gibt es noch einen "chat" in den die Bots schreiben können (zu debug zwecken aber auch zur allgemeinen belustigung)? Wie auch immer, ich bastel denn mal etwas an meinem Bot... |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bisher gibt es nur simples FFA-Deathmatch.
Aber natürlich ließen sich noch weitere Spielmodi einbauen. Aber ich denke, dass einer für den Anfang genug ist. Unentschieden ist bisher auch nicht vorgesehen, die Chance, dass das passiert halte ich auch für ausgesprochen gering. Einen Chat gibt es auch nicht, aber ich werde mich bei nächster Gelegenheit(bin seit gestern Abend wieder zu Hause) mit kriD kurzschließen, ob und wie wir das Framework verändern/verbessern wollen. So oder so danke für die Ideen. Ich sehe großes Potenzial in Wettbewerben wie diesem, und wer weiß wo das hier hinführen wird. ![]() |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
![]() |
ComNik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ach ja die AI Arena Idee...
Lang ists her aber ich hab noch eine Roboter/Auto Grafik von dir kriD ![]() Naja: 1. Kann es sein das ihr da Fliehkräfte mit eingebaut habt, weil sich die Npcs so schön drehen? 2. Ist eine gute Idee, aber nur für "Kampf" Kis geeignet oder? lg ComNik |
||
WIP: Vorx.Engine |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fliehkräfte? Ich weiß nicht genau was du damit meinst. Trägheit haben wir aber, ja. Ansonsten wäre das steuern der Schiffe zu einfach, würde unrealistisch wirken und ein paar interessante Manöver wären nicht möglich. /imho ![]() "Kampf"-KI: Ja, es sei denn, du schaffst es eine KI zu schreiben, die die letzten beiden Spieler dazu bekommt sich im gleichen Moment gegenseitig vom Himmel zu holen. Ansonsten gibt es bisher keine Möglichkeit zu gewinnen ohne zumindest ein anderes Schiff zu versenken. |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tolle Idee eigentlich. Ich finde es nur schade, dass das Ganze in BB ist und noch dazu so starke Einschränkungen existieren (keine eigenen Funktionen etc.).
Werde trotzdem mal probieren, ob ich was vernünftiges hinkriege. ![]() Noch zwei Fragen: in deinen Regeln steht "5. Die Funktion darf alle globalen Variablen und Types auslesen(jedoch nicht verändern)", der Beispielcode führt aber z.B. s\player nicht auf. Wie sieht es denn damit aus? Ist Rekursion erlaubt? |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da die Möglichkeiten der KI doch recht beschränkt ist sehen wir es nicht als notwendig an, zusätzliche Funktionen zu erlauben. Weiterhin sind die gegebenen Einschränkungen ein wichtiger Eckpfeiler des Wettbewerbs. Wenn man z.B. so viel Speicher oder gar eigene Types zur Verfügung hätte würden die KIs nur unnötig komplex werden und es würde nicht mehr der gewinnen der aus limitierten Ressourcen das meiste herausholen kann. Und das ist doch eine der Sachen die am Programmieren so viel Spaß macht. ![]() Zu den Fragen: 1. Ja, s\player darf man benutzen, werde das gleich oben hinzufügen(frag mich nicht, warum es da nicht schon steht). Was die anderen Sachen angeht, s. Regel Nr.6 ![]() 2. Ja, Rekursion ist erlaubt. Also du darfst wenn du willst deine Funktion in derselben nochmal aufrufen(solange man nicht andere Spieler übergibt um an ihren Daten rumzufuschen natürlich ![]() |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mal ein kleiner Tipp. Wäre es nicht vielleicht lustig, noch ein paar "Fähigkeiten" einzubaun?
Ich stelle mir darunter zum Beispiel einen Schub vor, sodass die KI (bzw. das Dreieck) kurzzeitig einen Geschwindigkeitsschub bekommt. Das könnte ja einen cooldown haben, aber das würde die Kämpfe sicherlich interessanter machen, da man eine sehr gute Fluchtmöglichkeit hat ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noch eine Frage: in welchem Maße sind Änderungen an den Spielregeln (also den Konstanten oben) zwischen verschiedenen Spielen zu erwarten? Wär ja doof, wenn jemand viel Zeit investiert, die KI auf alle Eventualitäten einzustellen und am Ende wird nur mit den Standardregeln gespielt ![]() |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
![]() |
kriD |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Tankbuster: Die von dir angesprochenen Fähigkeiten hatten wir auch schon in unsere Überlegungen mit eingeschlossen, ajedoch zunächst verworfen, da es erstens vom eigentlichen ablenken würde und zweitens das spiel unnnötig verkompliziert (und so vielleicht potentielle KI-Schtreiber abschreckt). jedoch lässt der Code solche Fähigkeitenänderungen zu. Ich werde mich mal mit aMul unterhalten um die sache weiter zu besprechen.
@FireballFlame: an spielregeländerungen hatten wir zunächst nicht gedacht. es ist jedoch ein interessanter gedanke. ich will aber wiedermal nichts voreiliges verkünden, das muss erst besprochen werden. alles in einem wiedermal schöne Vorschläge! schön, dass leute gefallen an unserem framework finden ![]() antworten auf die fragen und vorschläge gibts morgen nach rücksprache.. lg kriD |
||
Wenn ich du wäre, wäre ich lieber ich! |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also dafür, dass Regeländerungen überhaupt stattfinden, bin ich auf jeden Fall! Ich finde es viel interessanter, wenn die KI die Konstanten auslesen und sich auf unterschiedliche Bedingungen einstellen muss, anstatt eine "hardgecodete" Taktik zu benutzen ![]() |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie angekündigt, mein Versuch, das ganze mal in bmax umzusetzen
Ich wusste nicht, wo das hinpasst, also hab ichs erstmal ins codearchiv gepostet Grüße, Smily |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Übers Wochenende hab ich die Versionsnummer 04 des ersten Modells meiner AI erreicht:
- Defensive Duck and Cover Taktik (jaja, immer diese camper...) - Richtet sich auf sein Ziel aus - Feuert auf Gegner in Sicht - Erfolgsquote von ~82% bei 7 Dummy Gegnern Video-Demo |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
zum battle selbst:
das is mal ne richtig schöne idee.. sitz auch schon an den ersten ideen einer ki. jedoch hab ich noch 0(komma nix) erfahrung mit künstlichen intiligenzen und vermute, dass zuerstmal viele fehlschläge kommen werden, aber keine angst ich krieg euch noch ![]() Xerxes: deine ki gewinnt gegen die dummys is aber doch recht deffensiv. absicht oder nur der bisherige status und die offensivmanöver noch nicht zu sehen? ![]() allgemein: wie werden die battles ablaufen? 1vs1? 1 vs x dummys? frage: mit welchem tool macht ihr die videos immer? |
||
![]() |
kriD |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Xeres: sehr schön anzusehen, auch toll, das du ein demovideo zu deiner KI gemacht hast. noch toller finde ich deine "winnershow" am ende! hab gehofft, das die leute sowas einbauen.
(ich denke, das am ende (nach dem sieg) auch an den "verbotenen" typeeinträgen, zB player\energy etc rumgeändert werden darf, um eine wirklich tolle winnershow o.ä. zu erstellen.. aber das nur am rande..) @da_poller oder @wettkampfs-ablauf: wenn es nicht zu viele KIs werden (dann müsste man sich ein faires turnier überlegen) wollten wir alle KIs in einem deathmatch gegeneinander antreten lassen. unser video haben wir mit camtasia studio gemacht. @Tankbuster und FireballFlame: die erste runde wird mit den standartregeln statfinden und auch ohne spezial-fähigkeiten auskommen müssen. danach überlegen wir, ob wir zur nächsen runde (vlt zu jeder neuen runde) neue fähigkeiten oder physikalische änderungen vornehmen, um den wettkampf abwechslungsreich zu gestalten, oder ob die regeln wie gehabt bleiben, damit man die KIs perfektionieren kann. sicher hat beides seine reize. also: die regeln bleiben zur ersten runde gleich. lg kriD |
||
Wenn ich du wäre, wäre ich lieber ich! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group