Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : [MCW] - Der Kampf der Microchips ^^



Crash-Override
19.07.2006, 10:06
Gestern hab ich mir meine IRC-Logs durchgleses und dann auf ein Gespräch von DFYX und Dingsi gestoßen über mutierende Programme und als Beispiel "Core Wars". Jedenfalls hab ich mir Core Wars mal angesehen und fand es recht interessant von der Idee her. Den Quelltext allerdings in Redcode (Ein billiger Assembler Abklatsch) zu schreiben und Standards von '94 einzuhalten ist etwas öde. Also habe ich Gegoogled und noch massig andere BOT/Programm-Kampf-Simulatonen gefunden. Am Besten und aktuellsten war imo A.I. Wars (http://www.tacticalneuronics.com/ai.htm). Dort wird in einer Basic ähnlichen Programmiersprache entwickelt, was ich schonmal etwas besser fand ;). Leider ist das Programm Shareware und auch sonst hätte man manches Besser machen können, also dachte ich mir das könnte ich mal nachprogrammieren.
Weil ich Käfer dumm finde und Google-Bilder nix gescheites an Käer-Bildern lieferte (nur VWs und Marienkäfer) hab ich mit Paint rumgemalt und mir kam die Idee für Micro-Chips. Naja wem es net gefällt kann ja gerne die 4 Bilder im data Ordner ersetzen.
Das Ergebnis ist schon spielbar allerdings evt. nicht 100% Bugfree und auch grafisch nicht so gut wie sein Vorbild.
http://img137.imageshack.us/img137/5224/mcwxp0.th.png (http://img137.imageshack.us/my.php?image=mcwxp0.png)
So sieht das Interface aus. Momentan kann man maximal 2 BOTs verwenden, aber das kann man bei bedarf leicht erweitern...
Die Programmierung geschieht in einer ziemlich seltsammen Sprache, welcher ich keinen Namen gegeben habe. Um es euch zu zeigen hier einfach mal der Code eines "Standard"-BOTs:

shield_up
:main
scan_enemy en_found
move_forward
if_blocked block
goto main

:en_found
shield_down
fire_missible
shield_up
turn_right
move_forward
turn_left
goto main

:block
random_turn
move_forward
if_blocked block
goto main

Zugegeben, die Sprache sieht billig aus und die Sprungmarken sind Assembler like, aber der Code ist selbsterklärend, d.h. wer schon ein wenig Ahnung vom Programmieren hat sollte in der Lage sein ihn zu verstehen (hoffe ich). Für eine Beschreibung der einzelnen Befehle lest die README im Archiv. dort ist auch noch der Code eines 2. einfachen BOTs untergebracht.
Der Code (Delphi 7) steht unter GPL (http://www.fsf.org/licensing/licenses/gpl.html) [leider hatte ich gestern abend auf dem Laptop wo ich programmiert hatte kein I-Net [Nachabschaltung der FritzBox] und konnte so die GPL nicht mit ins Archiv und keine Vermerke im Source anbringen, aber ich machs beim nächsten Release] und liegt im Archiv mit drin. Außerdem hab ich mir diesmal echt Mühe gegeben und alles schon kommentiert :D

Hier der Download-Link:
http://wordsbg.uttx.net/dl/MCW.rar
Im laufe des Tages editier ich noch ne Linux Version rein, aber die hier sollte theoretisch ganz gut unter Wine laufen, weil ich nur Win-Standard Kompos benutzt habe.

edit: Linux Version ist auch Online!
http://wordsbg.uttx.net/dl/MCW.tar.bz2

raian
19.07.2006, 11:48
ich habs mir ansgesehen. Sehr vielversprechend, gefällt mir. Aber es sind zu wenig funktoinen. Mit mehr funktionen ist es viel eifnacher ein komplexes script zu schreiben^^

Außerdmem ist alleine durch das hinzufüügen eines
shield_up
shield_down
feuerbefehl den ich vergessen habe
shield_up

Der Sieg vom Damit ausgestatteten chip fast garantiert.^^"

Crash-Override
19.07.2006, 12:13
Außerdmem ist alleine durch das hinzufüügen eines
shield_up
shield_down
feuerbefehl den ich vergessen habe
shield_up

Der Sieg vom Damit ausgestatteten chip fast garantiert.^^"

Nicht ganz. Wenn der Chip getroffen wird wärend das Schild hoch ist ist er sofort zerstört (tritt besonders oft auf wenn man zwei "Standard"-Bots nimmt) und selbst wenn er trifft und das Schild des Gegners ist unten zieht er von den 3 HP des Gegner-Schildes 2 ab. d.h. er muss noch einmal treffen um zu gewinnen. Das Schild vor dem Feuern zu heben ist nicht zwingend, aber wenn man es macht trifft man stärker, wobei man sich einem Risiko aussetzt.

Zu den funktionen: Ich werde auf jeden fall noch einen Befehl amchen um sich um 180° zu drehen und eben move_back, move_left und move_right (Auch wenn diese wohl nicht so oft gebraucht werden. Auserdem if_face_up, if_face_down, if_face_left if_face_right und noch Befehle mit genauer Richtung wo er hinschauen soll also look_right, look_left, look_up, look_down. Und evt. noch andere Waffen (z.B. Laser), da müsste ich mir eben noch andere Effekte für einfallen lassen.
Wer noch Vorschläge oder Anregungen hat kanns mir ja sagen.

raian
19.07.2006, 16:52
Was noch gut wäre:

if_right_blocked usw.
Damit könnte man weitaus effizientere Bots zusammenbauan, was das Bewegen angeht. Es müsste nicht mehr das Try&Error prinzip angewandt werden usw.

Neue Waffen hast du ja selber schon angesprochen. Wie wärs mit EMP? Man setzt das Schild des Gegners außer Kraft, kann dafür ein paar Minuten nicht schießen, oder ähnliches. Sozsuagen taktsiche Waffen. Regeneration des Schildes druch Ruhemodus.

Wofür man dann funktionen wie:
if_lp_low oder if_lp<1 oder ähnlcihes bräuchte.

Dann könnte man



[...]
if_lp_low low_lp //Wenn lp kleiner vier: Gehe zu low_lp
[...]

low_lp:
scan_enemy main //wenn ein Gegner in der Nähe ist: Springe zu main oder danger oder ähnliches
heal_shield //heilt das schild
if_low_lp low_lp //wenn lp immernoch gering sind:springe zurück zu low_lp
goto main //wenn nciht wird zu main gesprungen




Ich freu mich auf die nächste Version!

Heal_shield macht dann zum Beispiel 4Sekunden Bewegungsunfähig und heilt dafür ein Schild. if_low_lp stellt fest ob die LP kleiner 3 sind usw.


Das würde das System noch verbessern ;)


€dit: Erklärung.^^

€dit2: Schreibst du in Delphi oder inw elcher sprache? Mich interessiert das Projekt und ih würde den source gerne mal einsehen können. :P

Crash-Override
19.07.2006, 17:29
€dit2: Schreibst du in Delphi oder inw elcher sprache? Mich interessiert das Projekt und ih würde den source gerne mal einsehen können. :P

Jo, Delphi. Wenn du kein Delphi hast hol dir Lazarus (-> Google) und lad dort den Code der der Linux Version beiliegt, das ist zwar imo nicht so cool wie Delphi selbst aber dafür halt free und portabel.

Danke jedenfalls für deine Vorschläge ich bau es evt. noch heute ein :)

edit. Die Windows Version ist aktalisiert :)
neue Befehle:

if_face_up Wenn der BOT nach oben schaut
if_face_down Wenn der BOT nach unten schaut
if_face_left Wenn der BOT nach links schaut
if_face_right Wenn der BOT nach rechts schaut
look_up Lässt den BOT nach oben schauen
look_down Lässt den BOT nach unten schauen
look_left Lässt den BOT nach links schauen
look_right Lässt den BOT nach rechts schauen
if_blocked_left x Wenn der BOT von links blockiert
wird springe zu x
if blocked_right x Wenn der BOT von rechts blockiert
wird springe zu x
if blocked_behind x Wenn der BOT von hinten blockiert
wird springe zu x
repair_shield Repariert das Schild um einen Punkt
(maximal 3). Dafür setzt der BOT
2 Runden aus (d.h. der Gegner führt
2 Zeilen aus.
if_hit_shield x Wenn das Schild nicht vollständig
(3 Punkte) erhalten ist springe zu x
if_shield_is1 x Wenn das Schild noch einen Punkt hat
springe zu x
if_shield_is2 x Wenn das Schild noch zwei Punkte hat
springe zu x
if_shield_is3 x Wenn das Schild noch drei Punkte hat
springe zu x
fire_emp Feuert mit dem EMP. Reichweite liegt
bei 2 Feldern vor dem BOT. Bei einem
Treffer verliehrt der Gegner sofort
2 Punkte an seinem Schild (sofern es
an ist, sonst stirbt er sofort),
dafür muss der Angreifer 2 Runden
pausieren.

damit lassen sich tolle neue BOTs entwickeln. z.B. für Reperatur

:repair
scan_enemy en_found
repair_shield
if_hit_shield repair
goto main

und auch ein verbessertes laufen ist sehr einfach möglich. In der Readme sind 2 neue Beispielbots zu diesen Themen.
Für weitere Wünsche/Anregungen oder Beispielcodes meldet euch.

edit2: btw: habs schon wieder vergessen. Rechschreibfehler: missible soll missile (=Flugkörper) heißen. Ich glaub ihm nächsten Release nenn ichs "fire_rocket" -__-

edit3: Linux Version auf dem gleichen Stand der Windows Verion,

edit4: Nochmal neue Version. Das Interface ist überarbeitet, eine PDF-Einführung in die BOT-Entwicklung liegt bei und den fehler mir "fire_missible" hab ich so gelöst das "fire_missile" der richtige ist, aber "fire_missible" trotzdem das selbe macht (Kompatibilitäts-Gründe).
Hier sind ein paar neue Screens des Interfaces:
http://img240.imageshack.us/img240/5034/screen1dd5.th.png (http://img240.imageshack.us/my.php?image=screen1dd5.png)
http://img213.imageshack.us/img213/8720/screen2si8.th.png (http://img213.imageshack.us/my.php?image=screen2si8.png)
Die Maps werden im Maps Ordner im data-Ordner abgelegt. Mithilfe des Templates und Paint könnt ihr auch eigene erstellen (weiße Flächen sind begehbar, der Rest nicht).
Linux Version muss ich noch aktualiesieren

toho
27.07.2006, 22:59
der download link geht nicht mehr. kannst dus noch mal hochladen?

Crash-Override
27.07.2006, 23:51
der download link geht nicht mehr. kannst dus noch mal hochladen?

kein Problem. Leider hat uttx.net im Moment mit Server-Updates und Beseitigung eines gelungenen Hack-Versuchs zu tun deswegen ist der Server bis zum 5. unten. Ich up es dir schnell.
inc. Beispiele, Dokumentation als pdf + doc und Source für Delphi. Ist die Windows Version. Die Linux Version hab ich leider nicht mehr, aber es dauert sowieso nur ca. 1-2 Minuten das Projekt zu portieren.
http://upload.npcfighter.de/files/27/589MCW.rar

Rolus
28.07.2006, 15:13
Hm, ich habe es mir eben mal angeschaut und finde es auch sehr schön. Aber als ich einen Bot schreiben wollte, bin ich gleich auf ein Problem gestoßen. Entweder ich verstehe etwas falsch oder if_blocked_right bzw. if_blocked_left arbeiten nicht so richtig.

Nimm zum Beispiel mal deinen Bot "Intelligent Walk" als ersten Bot auf der Map "BG". Zu Beginn schaut der Chip nach oben. Er wird also von vorne, links und hinten geblockt und rechts ist frei. So, bei "if_blocked block1" springt er also zu "block1". Dort steht dann "if_blocked_right block2" gefolgt von "turn_right". Da rechts aber keine Blockade ist, dürfte er nicht zu "block2" springen, sondern müsste sich nach rechts drehen. Er dreht sich aber nach links, was erst in "block2" steht. Aber auch in "block2" müsste er durch die Anweisung "if blocked_left block3" eigentlich nach "block3" springen, da er ja von links geblockt wird. Also habe ich das Gefühl, dass if_blocked_right und if_blocked_left nicht so arbeiten, wie sie es sollten. Oder liegt der Fehler bei mir?

edit: Hm, alles muss man selbst machen. Also:

if copy(S,1,17) = 'if_blocked_right ' then
begin
o := False;
if (Chip.Destination = 2) AND (Chip.Y = 0) then o := True;
if (Chip.Destination = 4) AND (Chip.Y = 12) then o := True;
if (Chip.Destination = 3) AND (Chip.X = 0) then o := True;
if (Chip.Destination = 1) AND (Chip.X = 12) then o := True;
if (Chip.Destination = 2) AND (ImBG.Canvas.Pixels[Chip.X*30+1,(Chip.Y-1)*30+1] <> clWhite) then o := True;
if (Chip.Destination = 4) AND (ImBG.Canvas.Pixels[Chip.X*30+1,(Chip.Y+1)*30+1] <> clWhite) then o := True;
if (Chip.Destination = 3) AND (ImBG.Canvas.Pixels[(Chip.X+1)*30+1,Chip.Y*30+1] <> clWhite) then o := True;
if (Chip.Destination = 1) AND (ImBG.Canvas.Pixels[(Chip.X-1)*30+1,Chip.Y*30+1] <> clWhite) then o := True;
// Wenn blockiert, dann springe zur übergebenen Sprungmarke
if o then
Chip.CodePos := Mem.Lines.IndexOf(':'+copy(S,18,Length(S)));
end;
if copy(S,1,16) = 'if_blocked_left ' then
begin
o := False;
if (Chip.Destination = 4) AND (Chip.Y = 0) then o := True;
if (Chip.Destination = 2) AND (Chip.Y = 12) then o := True;
if (Chip.Destination = 1) AND (Chip.X = 0) then o := True;
if (Chip.Destination = 3) AND (Chip.X = 12) then o := True;
if (Chip.Destination = 4) AND (ImBG.Canvas.Pixels[Chip.X*30+1,(Chip.Y-1)*30+1] <> clWhite) then o := True;
if (Chip.Destination = 2) AND (ImBG.Canvas.Pixels[Chip.X*30+1,(Chip.Y+1)*30+1] <> clWhite) then o := True;
if (Chip.Destination = 1) AND (ImBG.Canvas.Pixels[(Chip.X+1)*30+1,Chip.Y*30+1] <> clWhite) then o := True;
if (Chip.Destination = 3) AND (ImBG.Canvas.Pixels[(Chip.X-1)*30+1,Chip.Y*30+1] <> clWhite) then o := True;
// Wenn blockiert, dann springe zur übergebenen Sprungmarke
if o then
Chip.CodePos := Mem.Lines.IndexOf(':'+copy(S,17,Length(S)));
end;
Bei der if_blocked_right Abfrage wird, wenn der Chip nach oben schaut (Destination = 1), geprüft, ob das Feld links vom Chip (Chip.X-1) blockiert ist und wenn er nach unten schaut, wird überprüft, ob das Feld rechts vom Chip blockiert ist. Bei if_blocked_left ist die gleiche Vertauschung. Also reicht es aus, wenn man in der Destinations-Abfrage jeweils die '3' gegen die '1' tauscht (in den roten Zeilen). Der Intelligent Walk Bot ist dann gar nicht mal so übel.

freundliche Grüße, Rolus

Crash-Override
29.07.2006, 16:04
oh hab dein edit nicht gesehen -__- naja ich habs durch +/- vertauchung gelöst (gestern abend).

Der Int.-Bot enthält alleridngs auch noch einen Fehler wie ich bemerkte "if_blocked_left" nicht "if blocked_left". Naja hier ist die neue Version:
http://upload.npcfighter.de/files/27/113MCW.rar

malu
04.08.2006, 17:21
Jo, mir gefällt es auch sehr. Aber ist das normal das die Bots sich gegenseitig überlaufen können? Intelligent Walk und der Warriors 2-Standart haben sich eben auf BG überrant und keiner hat Schaden genommen.:confused:

Ciao
malu

Edit: Wenn wir daraus mal eine Forenwettbewerb machen sollte es aber aus so einstell bar sein das man den Code verschlüsseln kann und er nich angezeigt wird damit die Anderren nicht den Code klauen.
Was auch nützlich wäre, wäre die Möglichkeit Variablen und Arrays zu speichern.
Achso, eine Kommentarfunktion im Code wäre schön.
Langsam wird meine Wunschlist lang...
Eine Koordinatenabfrage für den eigenen Bot wäre cool.

Crash-Override
04.08.2006, 17:44
Jo, mir gefällt es auch sehr. Aber ist das normal das die Bots sich gegenseitig überlaufen können? Intelligent Walk und der Warriors 2-Standart haben sich eben auf BG überrant und keiner hat Schaden genommen.:confused:

Ciao
malu


Die BOTs haben eben zufällig in dem bereich keinen Scan + Angriff durchgeführt. Die Engine macht was im BOT Code steht, und auch nur das...



Edit: Wenn wir daraus mal eine Forenwettbewerb machen sollte es aber aus so einstell bar sein das man den Code verschlüsseln kann und er nich angezeigt wird damit die Anderren nicht den Code klauen.

Das mit Verschlüsslung habe ich mir auch überlegt, nur das Problem wäre schon allein gegeben da ich das ganze als Open Source entwickeln will und da der Code entschlüsselt werden sollte muss dafür eben auch Code in die Engine rein. Nun wäre es aber kein Problem Copy&Paste das ganze in ein neues Projekt zu tun und locker alles entschlüsseln.
Letztendlich gibt es also 3 Möglichkeiten (meiner Meinung nach):
1) Webserver: Die Engine über PHP realisieren. Das macht den Code ziemlich sicher, der Aufwand ist allerdings relativ groß und außerdem wäre PHP für sowas eigentlich nicht ausgelegt)
2) Bytecode: BOTs werden in Byte-Code umgewandelt (wie Java z.B.), dadurch werden sie unleserlich aber nicht unentschlüsslbar
3) (imo beste, da relativ gut zu realisieren) eine modifizierte Version des Programms ohne die Anzeige der Codes an der Seite wird von einer vertrauenswürdigen Person laufen gelassen und dabei von z.B. SnagIT oder Fraps (oder einem anderen Aufnahme-Programm) gefilmt.

Allerdings weiß ich nicht ob das wirklich soviel bringt. Wenn sich allerdings ein paar Leute melden wäre das kein Problem, obwohl die Leistungsfähigkeit der BOTs eher gering ist. Vielleicht weiß einer auch noch neue Befehle die das ganze Spannender machen würden.

edit:

Was auch nützlich wäre, wäre die Möglichkeit Variablen und Arrays zu speichern.
Achso, eine Kommentarfunktion im Code wäre schön.
Langsam wird meine Wunschlist lang...
Eine Koordinatenabfrage für den eigenen Bot wäre cool.

Variablen aller Art wäre kein Problem, auch wenn ich nicht weiß wie man sie andwenden sollte.
Kommentare gehen schon, nur z.B.



start:
// Kommentar
...


sollte vermieden werden, da wenn der Pointer zu start sptingt ein Tick an den Kommentar verschwendet wird, dadurch lahmt der BOT aus.

Koordinaten wären sicher auch möglich, z.B. als Statische (unveränderbare) Variable gespeichert zum leichten Zugriff. Allerdings braucht man dann umsomehr die Koordinaten des Gegners um zu ihm zu laufen.

Rolus
04.08.2006, 17:50
Edit: Wenn wir daraus mal eine Forenwettbewerb machen sollte es aber aus so einstell bar sein das man den Code verschlüsseln kann und er nich angezeigt wird damit die Anderren nicht den Code klauen.
Solange er den Quellcode des Programmes anbietet wäre das aber recht sinnlos. Sonst kann sich ja jeder in Nullkommanix ein Entschlüsselungs-Tool schreiben. Die einzige sichere Möglichkeit, die mir einfällt, wäre eine Online verseion, bei der die Bots aus einer Datenbank gelesen werden. Allerdings müsste man dazu ein Web-Interface schreiben (also zu aufwändig).
edit: Der vorherige Absatz ist durch C-O's Beitrag etwas obsolet geworden.

Btw, ich poste mal meinen "More Intelligent Walk". Der "Intelligent Walk" kann sich festlaufen, da er bei Links-Und-Rechts-Frei immer nach rechts geht. Außerdem habe ich die Waffensysteme verbessert, indem in der Kampfroutine nicht immer zu main gesprungen wird, sondern - wenn der Feind noch da ist - direkt wieder zum Angriff. Das verschafft dem Bot im Nahkampf erhebliche Vorteile, sodass er den "Intelligent Walk" teilweise mit 10 zu 0 schlägt.

shield_up
:main
scan_enemy feindinsicht
move_forward
if_blocked block
goto main

:feindinsicht
fire_missile
scan_enemy feindinsicht
goto main

:block
if_blocked_right block_right
if_blocked_left block_left
random_turn
goto main

:block_right
if_blocked_left block_both
turn_left
goto main

:block_left
if_blocked_right block_both
turn_right
goto main

:block_both
turn_right
turn_right
goto main
Was ich noch für problematisch halte, sind Bots, die passiv einfach auf Feinde warten und dann kämpfen. Ich habe mir mal so einen "kleinen Feigling" geschrieben, der gemeinerweise sehr häufig gewinnt.

shield_up
:main
scan_enemy feindinsicht
if_blocked blockadevorne
goto main

:blockadevorne
if_blocked_left blockadelinks
turn_right
goto main

:blockadelinks
if_blocked_right blockbeideseiten
turn_left
goto main

:blockbeideseiten
turn_right
turn_right
goto main

:feindinsicht
fire_missile
scan_enemy feindinsicht
goto main
Ich finde so ein Verhalten sollte irgendwie bestraft werden. Beispielsweise könnte man bewegungslosen Chips Schild-Punkte abziehen oder die Schilde am Anfang auf 10 setzen, sodass sich für aktive Bots eine Flucht zum Reparieren lohnt. Bei 5 Schildpunkte bringt das nichts, da man zu schnell tot ist.

freundliche Grüße, Rolus

malu
04.08.2006, 18:57
Beispielsweise könnte man bewegungslosen Chips Schild-Punkte abziehen oder die Schilde am Anfang auf 10 setzen, sodass sich für aktive Bots eine Flucht zum Reparieren lohnt. Bei 5 Schildpunkte bringt das nichts, da man zu schnell tot ist.
Stell dir mal vor, du fliehst mit 1HP. Dann müsstest du 72 Runden waren bis du wieder 10 HP hast. Das würde das Spiel nur unnötig in die Länge ziehen.

Ciao
malu

Rolus
04.08.2006, 19:17
Stell dir mal vor, du fliehst mit 1HP. Dann müsstest du 72 Runden waren bis du wieder 10 HP hast. Das würde das Spiel nur unnötig in die Länge ziehen.
Wenn es standardmäßig mehr Schildpunkte gibt, muss das Reparieren natürlich auch angepasst werden. Sonst wäre die Funktion ja gar nicht mehr attraktiv.

freundliche, Grüße Rolus

Crash-Override
04.08.2006, 19:19
Stell dir mal vor, du fliehst mit 1HP. Dann müsstest du 72 Runden waren bis du wieder 10 HP hast. Das würde das Spiel nur unnötig in die Länge ziehen.

Einstellbare Start-HP Zahl? Wird eingebaut ^^

Variabeln (Mit ifs)
Feste Variabeln für X Y Koordinaten des BOTs + Gegners
Verschiedene Einstellungen beim Start
Blickrichtung des Gegners abfragen

malu
05.08.2006, 20:28
Was ich noch für problematisch halte, sind Bots, die passiv einfach auf Feinde warten und dann kämpfen. Ich habe mir mal so einen "kleinen Feigling" geschrieben, der gemeinerweise sehr häufig gewinnt.
Zitat:
Zitat von Kleiner Feigling
shield_up
:main
scan_enemy feindinsicht
if_blocked blockadevorne
goto main

:blockadevorne
if_blocked_left blockadelinks
turn_right
goto main

:blockadelinks
if_blocked_right blockbeideseiten
turn_left
goto main

:blockbeideseiten
turn_right
turn_right
goto main

:feindinsicht
fire_missile
scan_enemy feindinsicht
goto main
Ich finde so ein Verhalten sollte irgendwie bestraft werden.

Rolus, mein Bot gewinnt gegen deinen 10 zu 0. Der kleine Feigling is also nicht so stark wie du glaubst und Crash-Override kann bezeugen, dass mein Bot auch noch super optimiert ist.

Ciao
malu

Rolus
05.08.2006, 21:55
Rolus Bot gewinnt gegen deinen 10 zu 0. Der kleine Feigling is also nicht so stark wie du glaubst und Crash-Override kann bezeugen, dass mein Bot auch noch super optimiert ist.
Äh, wie meinst du das (welcher Bot gewinnt gegen welchen)? Bei meinen Tests hat der kleine Feigling recht häufig gewonnen (trotz simpler Technik). Natürlich kommt das auch auf die Map an. Aber prinzipiell sind passive/wartende Bots noch im Vorteil, da sie Operationszeit, die der Gegner noch zum Bewegen nutzt, schon zum Kämpfen nutzen können.

freundliche Grüße, Rolus

malu
05.08.2006, 22:25
Sorry, ich meinte dein Bot verliert gegen meinen 10 zu 0. Hab meinen Post editiert.

Ciao
malu

PS: Sagt mal bin ich mit Rolus der einzige der sich dafür interessiert?

Crash-Override
05.08.2006, 22:28
Äh, wie meinst du das (welcher Bot gewinnt gegen welchen)? Bei meinen Tests hat der kleine Feigling recht häufig gewonnen (trotz simpler Technik). Natürlich kommt das auch auf die Map an. Aber prinzipiell sind passive/wartende Bots noch im Vorteil, da sie Operationszeit, die der Gegner noch zum Bewegen nutzt, schon zum Kämpfen nutzen können.

freundliche Grüße, Rolus

Malu hat in seinem BOT einige fiese obtimierungs-Tricks drin wie z.B. 2x fire_missile in der Feuerrutine hintereinander das heißt er feuert 2x (2x1Tick fürs Feuern) wärend der Kleine Feigling 1x feuert (1 Tick feuern, 1 Tick goto). Dannach muss der Malu-Bot zwar auch ein goto nutzen aber insgesammt ist er im feuern doch schneller und vor allem da die feuerutine schnell kommt. In der nächsten Version gibt es dieses Problem allerdings nicht mehr (Gotos kosten keine Ticks).

Imo müssen passive Bots nicht bestraft werden, dürfen aber nicht an irgendwelchen Wettbewerben teilnehmen für den Fall das mal zwei dieser Art gegeneinander kämpfen müssten (das würde sich ne Weile ziehen ;) ).

edit:

PS: Sagt mal bin ich mit Rolus der einzige der sich dafür interessiert?

Es ist geekig und es hat mit programmieren zu tun, das sollte reichen um die meisten abzuschrecken.

Rolus
06.08.2006, 09:24
Malu hat in seinem BOT einige fiese obtimierungs-Tricks drin wie z.B. 2x fire_missile in der Feuerrutine hintereinander das heißt er feuert 2x (2x1Tick fürs Feuern) wärend der Kleine Feigling 1x feuert (1 Tick feuern, 1 Tick goto). Dannach muss der Malu-Bot zwar auch ein goto nutzen aber insgesammt ist er im feuern doch schneller und vor allem da die feuerutine schnell kommt. In der nächsten Version gibt es dieses Problem allerdings nicht mehr (Gotos kosten keine Ticks).
Man kann auch gleich 5 oder 6 mal fire_missile hintereinander schreiben. In einem Gefecht haut man den Gegner so auf alle Fälle weg. Was natürlich sinnlos wird, wenn die GOTOs nichts mehr kosten. Gilt das dann eigentlich für alle bedingten Sprünge (wie if_blocked / scan_enemy)? Dann könnte man ja ordentlich viele Abfragen ohne Geschwindigkeitsverlust einbauen.

freundliche Grüße, Rolus

malu
06.08.2006, 09:52
Klar kann man 5mal fire_missile da rein schreiben aber das is sehr uneffektiv, weil, wenn der Gegner schon wieder weg ist, der Bot noch 4 oder 3mal schießt und somit Ticks "verschenkt".

Ciao
malu

PS:Ich hab jetzt auch einen Bot-Editor geproggt in dem man sich die Bots änlich wie im RPG-Maker zusammenklicken kann. Kann ich dir bei Bedarf ja mal schicken.

Crash-Override
06.08.2006, 11:29
Man kann auch gleich 5 oder 6 mal fire_missile hintereinander schreiben. In einem Gefecht haut man den Gegner so auf alle Fälle weg. Was natürlich sinnlos wird, wenn die GOTOs nichts mehr kosten. Gilt das dann eigentlich für alle bedingten Sprünge (wie if_blocked / scan_enemy)? Dann könnte man ja ordentlich viele Abfragen ohne Geschwindigkeitsverlust einbauen.

Die kosten weiter Ticks, nur einzelne gotos gibt's gratis, damit die Bot-Ersteller nicht 500 mal irgendwelche Abläufe Copy&Pasten nur um keinen TickVerlust zu haben. Bei gotos muss der PC ja auch weniger abeiten als bei ner if Anfrage, also ist ein goto eher ne Code Hilfe und if ein richtiger Befehl.



PS:Ich hab jetzt auch einen Bot-Editor geproggt in dem man sich die Bots änlich wie im RPG-Maker zusammenklicken kann. Kann ich dir bei Bedarf ja mal schicken.

Schon fertig? :eek:

----
@Topic: Ich habe nun ein Wiki und eine eyeOS (Webbasierendes Betriebssystem, einige der App Verbesserungen entstammen von mir, siehe eyeOS Forum) basierendes WebSystem für MCW aufgesetzt.

Die Adresse lautet http://mcw.dl.am/ oder http://mcw.webhop.net/
Wer informiert bleiben will kann sich ja im eyeOS-System anmelden. Es gibt auch Spiele :D

Rolus
06.08.2006, 12:12
Klar kann man 5mal fire_missile da rein schreiben aber das is sehr uneffektiv, weil, wenn der Gegner schon wieder weg ist, der Bot noch 4 oder 3mal schießt und somit Ticks "verschenkt".
Das macht aber nichts. Es gibt ja nur einen Gegner. Wenn er bleibt, wird er durch den 5er Angriff zerstört, wenn er abhaut, verliert er mehr Schildpunkte. Also ich denke schon, dass die 5er Attacke was bringt. Also neue Version meiner Bots: Kleiner Feigling (http://people.freenet.de/rolus/mcw/kleinerfeigling.txt) und More Intelligent Walk (http://people.freenet.de/rolus/mcw/MoreIntelligentWalk.txt).

Die kosten weiter Ticks, nur einzelne gotos gibt's gratis, damit die Bot-Ersteller nicht 500 mal irgendwelche Abläufe Copy&Pasten nur um keinen TickVerlust zu haben. Bei gotos muss der PC ja auch weniger abeiten als bei ner if Anfrage, also ist ein goto eher ne Code Hilfe und if ein richtiger Befehl.
Nun gut, aber dann macht es teilweise immer noch Sinn, Abläufe x-mal hinzuschreiben. Wie eben 5-mal fire_missile.

freundliche Grüße, Rolus

Crash-Override
06.08.2006, 13:42
Nun gut, aber dann macht es teilweise immer noch Sinn, Abläufe x-mal hinzuschreiben. Wie eben 5-mal fire_missile.

Stimmt allerdings, manchmal macht es Sinn. Der Entwickler muss also selbst sehen wie er seinen Code schreibt, durch solche Masnahmen (gotos kosten keine Ticks) versuche ich nur zu verhindern das die Entwickler ewig langen Code schreiben müssen um ein/zwei Ticks zu sparen (denn wenn sie es nicht tun um den Code Sauber zu halten ist die Chance zu verlieren größer).

Das gibts auch bei A.I. Wars, dort schreiben entwickler beabsichtigt Sachen wie:

If scan found enemy then move bakwards
If scan found enemy then launch missile
statt

If scan found enemy then
move backward
launch missile
end if

Erlichgesagt sieht das ziemlich dumm aus, auch wenn es zwei Ticks spart. Was ich versuche zu erreichen ist einen schönen Code zu bekommen, der auch noch wunderbar optimiert ist. Klappt nicht immer, aber ich arbeite dran. ;)
Um dieses If-Debakel nicht mit zu übernehmen von A.I. Wars hab ich ja alles auf Sprungpunkten aufgebaut. Auch wenn anständige Programmierer bei goto's Atemnot bekommen und an QBasic denken :D

Maisaffe
06.08.2006, 14:26
Was mich noch stört:
Man kann (jedenfalls habe ich kein Kommentar dazu im Thread gefunden) die Performancefunktion nicht abbrechen - oder geht das doch?

Crash-Override
06.08.2006, 14:42
Was mich noch stört:
Man kann (jedenfalls habe ich kein Kommentar dazu im Thread gefunden) die Performancefunktion nicht abbrechen - oder geht das doch?

geht nicht, aber ich werde es einbauen.

malu
08.08.2006, 13:11
Es gibt jetzt auch ein Forum für MCW. Zu erreichen ist es unter http://wordsbg.uttx.net/mcwboard/. Und ein Wiki ist unter http://wordsbg.uttx.net/mediawiki-1.7.1/index.php/Main_Page zu erreichen. Außerdem wurde MCWbe( Microchip-Wars-bot-editor) fertig gestellt. Die Downloadlinks findet ihr im Wiki.

Ciao
malu

Crash-Override
08.08.2006, 14:16
Und Release 0.01 Final ist erschienen. Changes gibts hier: http://wordsbg.uttx.net/mediawiki-1.7.1/index.php/Changes0.01F
Hauptsächlich wird es nun in Lazarus der freien Pascal IDE entwickelt, d.h. Open Source in Open Source (thx. für den Vorschlag an Rolus). Malu hat seinen BE (BotEditor) auch fertig gestellt (in Lazarus) und auch dafür gibts Binaries für Linux und Windows. :)

Deathball
11.10.2006, 17:32
Hm, ich würd mir ja gern das Wiki/Forum anguggen, nur krieg ich immer gesagt "die Seite kann nicht angezeigt werden" - liegt der Fehler bei mir oder stimmt was mit dem Server nit?
Das Spiel macht im übrigen fun :D .

Rolus
11.10.2006, 19:28
Da scheint's wohl gerade Probleme mit den Datenbanken zu geben. Typisches Freehoster-Problem, würde ich mal sagen. Außer abwarten kann man da nicht viel machen.

freundliche Grüße, Rolus

Crash-Override
11.10.2006, 19:50
Da scheint's wohl gerade Probleme mit den Datenbanken zu geben. Typisches Freehoster-Problem, würde ich mal sagen. Außer abwarten kann man da nicht viel machen.

freundliche Grüße, Rolus

Nä der MySQL Server ist vollkommen in Ordnung, allerdings wurde vor zwei Wochen oder so die Server-Adresse geändert. hab nicht dran gedacht sie im wiki anzupassen, aber ich kann es jetzt nicht tun weil der FTP-Server down ist. von wegen FreeHoster hätten Datenbank-Probleme :D

Lukas
11.10.2006, 20:31
Nä der MySQL Server ist vollkommen in Ordnung, allerdings wurde vor zwei Wochen oder so die Server-Adresse geändert. hab nicht dran gedacht sie im wiki anzupassen, aber ich kann es jetzt nicht tun weil der FTP-Server down ist. von wegen FreeHoster hätten Datenbank-Probleme :DAlso bei uttx hab ich oefter mal kurzzeitige Ausfaelle gesehen...
Und Webspace kostet echt nicht die Welt, da kriegt man schon fuer <5 Euro ziemlich brauchbare Sachen...

Jesus_666
17.10.2006, 16:16
PS: Sagt mal bin ich mit Rolus der einzige der sich dafür interessiert?
Nun... Erstens war ich die letzten beiden Tage nicht wirklich da, zweitens ist KI nicht sooo mein Ding (allerdings habe ich in den nächsten beiden Semestern die Kurse KI 1 und KI 2) und drittens sehe ich da keine OS X-Version - und ich werde einen Teufel tun und meine Rootpartition weiter gefährden, indem ich auf dem instabilen Mainboard Linux boote.

Ich könnte mir natürlich die Windows-Version ziehen und VPC anschmeißen... Kann ich damit rechnen, daß das Programm auf emulierten 200 MHz brauchbar läuft? (Es wäre aber weit netter, eine Carbon-Version zu haben... Mal sehen, ob ich den Kram hier kompiliert kriege.)


PS: Was, Lazarus ist auch auf OS X eine X-Anwendung? Ih.

Manuel
17.10.2006, 20:07
Auch wenn anständige Programmierer bei goto's Atemnot bekommen und an QBasic denken :D Wieso QBasic? Du meinst bestimmt GW-Basic. In QBasic kann man im Gegensatz zu GW-Basic strukturiert (und wie in Notepad, nicht nur Zeile für Zeile) programmieren... Aber das nur nebenbei^^.

Ehrlich gesagt hat mich dieser Thread dazu bewogen, so ein Programm selbst zu schreiben. Ansonsten: Eine sehr schöne Idee :) . Mich wundert es, dass ich von derlei Programmen noch nie was gehört habe^^. Ich werde mich mal intensiver damit befassen... Ich bin - verglichen mit den anderen Usern hier - noch eher sowas wie Anfänger... Kein Noob, aber immerhin Anfänger^^...

Rolus
18.10.2006, 22:56
Ich denke bei GOTOs eher an Assembler und Maschinensprachen und bekomme schöne Gefühle, statt Atemnot und Gedanken an QBasic. Schleifen sind doch intern auch nur GOTOs und mit GOTOs kann man auch nette Dinge anstellen. Manchmal nehmen es die anständigen Programmierer zu genau mit ihren Prinzipien.
Naja, warum nutzt du nicht einen Freehoster ohne PHP und MySQL für die Downloads und eventuell eine kleine Info-Seite? Solche Anbieter sind meistens zuverlässiger als die mit PHP und MySQL. Wiki und Forum kannst du ja bei einem anderen Anbieter laufen lassen.

freundliche Grüße, Rolus

Crash-Override
18.10.2006, 23:52
Eigentlich versteh ich nicht wieso es nicht geht. Hab im config Ordner die LocalSettings.php auf den neuen MySQL Server einegstellt und er will immernoch auf localhost connecten....