# Programmierung eines Bots



## Ference (21. Dez 2012)

Hallo Zusammen 

Wie man in der Überschrift schon lesen kann möchte ich einen kleinen Bot programmieren.

Er soll für ein recht simples Spiel sein. Man muss 3 Kugeln einer Farbe in eine Reihe schießen,
dann gehen die Kaputt und die Schlange aus Kugeln zieht sich zusammen 

Durch den geplanten Bot möchte ich den Highscore von jemandem knacken und mal schaun,
ob ich das überhaupt schaffe.
Natürlich hätte ich da ein Paar fragen ???:L

Das Programm muss ja Informationen aus dem Spiel bekommen ... wo welche Farbe ist, welche Farbe gerade in der "Kanone" liegt usw. Wie kann ich das Programm diese abfragen lassen?

Das nächste Problem ist wie ich am besten Das Programm die Maus bewegen lasse um ein Ziel anzuvisieren.

Bin über jede Antwort dankbar :toll:
Gruß Ference


----------



## Trolllllll (21. Dez 2012)

Du willst betrügen, und da du es nicht alleine schaffst, fragst du hier nach hilfe?
Ich bin kein Freund von sollchen schummelereien und werde deswegen auch nicht groß was dazu sagen, außer vielleicht gibt es ja eine API zu dem spiel, die sowas erlaubt


----------



## Marco13 (21. Dez 2012)

Lösung = Robot (Java 2 Platform SE 5.0) + vieeel Arbeit


----------



## Final_Striker (21. Dez 2012)

Bist du dir sicher, dass du Java und nicht JavaScipt meinst?


----------



## ARadauer (21. Dez 2012)

Ich würds auch mit der Robot klasse machen und je nach dem ist es gar nciht so viel arbeit.. kommt auf das Spiel an...


----------



## Kilinat (21. Dez 2012)

Der Link, der oben gepostet wurde, ist sicherlich schon ein Anhaltspunkt. 
Allgemein ist es nicht einfach einen Bot zu schreiben, wenn man sich da als Laie hinsetzt. 
Bei dem Spiel sollte es aber nicht so schwer sein, wenn du dich ein bisl damit beschäftigst.


----------



## Ference (22. Dez 2012)

Danke für die Antworten 

Durch den Robot kann ich die Maus bewegen, das ist gut 
Aber wie bekomme ich die Daten aus dem Spiel, wo Kugeln mit mit der selben Farbe sind?


----------



## Marcinek (22. Dez 2012)

Es ist schon witzig, dass man versucht bei einem Spiel zu betrügen. Noch witziger ist es, dass man es nicht mal alleine schafft.

Bitte erkundige dich über die Funktionen des Robots. U.a. kann dieser auch Screenshots machen.

Diese kann man dann pixel für Pixel ansehen, oder bessere heuristiken nutzen, um Kreise zu identifizieren und dann ist es nur noch eine Sache des Klicks ;D

:bloed:


----------



## darekkay (22. Dez 2012)

Ist es ein Java-Applet? Ist es ein Flash-Spiel? Ist es ein HTML5-Spiel? Ist es ein....

Der Allarounder für solche Geschichten bleibt AutoIt.


----------



## Ference (22. Dez 2012)

Was der Robot so kann habe ich mir schon durchgelesen 

Hier mal ein Video zu diesem Spiel, das macht es evtl. leichter 
Zuma PC Game - YouTube

Bis der Screenshot gemacht ist und analysiert ist sind die Kugeln ja schon wieder ganz wo anders ....


----------



## Kilinat (22. Dez 2012)

Willst du das wirklich unbedingt mit Java machen ?
Wie darekkay schon sagte, ist AutoIt genau für solche Fälle entwickelt worden und noch dazu ziemlich leicht zu lernen. 

MfG Kilinat


----------



## tröööt (23. Dez 2012)

ach ... das geht schon mit [japi]Robot[/japi] ... und wenn man die auflösung gering hält und man pro level bereits ne "map" hat ist das analysieren schnell durch und sollte noch im rahmen liegen das die aktuelle position nicht zuweit verschoben ist ...

sicher wärs mit aufwand verbunden ... aber wir sind hier nicht dafür da dir einen bot zu schreiben nur weil du jemanden in der highscore überholen willst ...
wenn du zu konkreten problemen konkrete fragen hast kann man sicher helfen ... aber grundlegend kann man sagen : alles was du dafür brauchst sollte sich hier im forum finden lassen ... und zur not gibts google ...

AutoIt wäre hier allerdings deutlich besser da es für genau solche aufgaben entwickelt wurde ... und das bisschen basic-like sollte man auch schnell lernen ... habs mir allerdings noch nie selbst angesehen ...

wenns also mit java sein muss solltest du dir wirklich angucken wie man mit [japi]Robot[/japi] performant arbeitet ... denn das ist hier echt kein problem ... wenn man wie gesagt vorher sich entsprechende mühe macht und die einzelnen "level" so aufarbeitet das man ne map bekommt bei der man weis WO überhaupt die kugeln lang können und in welcher richtung ...
dann geht man das ganze nur vom ziel zum anfang durch und vergleicht ...
natürlich gehört auch bisschen logik dazu das auch die beanchbarten kugeln betrachtet werden und vielleicht auch kombos und so ...

aber ob der aufwand den nutzen wert ist ? ... ich würde hier nein sagen ... wenn man in sowas halt schlecht ist sollte man es akzeptieren anstatt sich bots basteln zu wollen anstatt richtig zu üben


----------



## Ference (23. Dez 2012)

Ok, ich probier einfach ein bisschen und wenn es nicht klappt mach ich halt was anderes


----------



## ARadauer (23. Dez 2012)

Ference hat gesagt.:


> Bis der Screenshot gemacht ist und analysiert ist sind die Kugeln ja schon wieder ganz wo anders ....


dann muss das halt schneller werden... zeig mal code.. wie lange brauchst du für einmal analysieren?
du kannst ja ein Rectangle mitgeben, also die größe des Ausschnitts, das sollte schon halbwegs schnell gehen


----------



## Ference (23. Dez 2012)

ich habe es probiert, es ist schon zu schwer die farben 100% herauszufinden... das klappt nicht


----------



## Helgon (23. Dez 2012)

Also ka worans bei Java oder Robot liegt das es so "lange" dauert die Screens zu machen.. ich hab vor einiger Zeit mal etwas ähnliches in C++ gemacht und da liefs mit über 100 screenshots - per second. war auch ne art aimbot - so sparrt man sich nen dll inject und praktisch 100% undetectbar oO

Wie auch immer.. du sprichst die farben an. 







so ist die Farbe des Aktuellen balls wohl nicht zu schwer zu finden (und natürlich die position).. ich würd jedoch einfach versuchen das gesamte bild linear zu interpolieren so dass du am ende praktisch nur noch 20 farben oder so im bild hast. dann ist der farbabgleich ja sowas von witzlos einfach


----------



## ARadauer (23. Dez 2012)

Ference hat gesagt.:


> ich habe es probiert, es ist schon zu schwer die farben 100% herauszufinden... das klappt nicht


musst du ja nicht, genau mit == auf den Wert zu überprüfen wird nciht gehen, da die bälle ja einen verlauf haben... ber aus einem RGB wert raus zu finden, ob das was blaues oder rotes ist... kann man schon schaffen


----------



## Ference (24. Dez 2012)

Helgon hat gesagt.:


> so ist die Farbe des Aktuellen balls wohl nicht zu schwer zu finden (und natürlich die position).. ich würd jedoch einfach versuchen das gesamte bild linear zu interpolieren so dass du am ende praktisch nur noch 20 farben oder so im bild hast. dann ist der farbabgleich ja sowas von witzlos einfach



was ist interpolieren? ich bin noch ein ziemlicher Anfänger  hab zwar schon Spiele wie TicTacToe programmiert oder Schach aber bei solchen Sachen kenn ich mich nicht aus, ich weiß garnicht was alles Möglich ist in Java ....

und die Farbspektren hab ich schon eingekreist aber immer den passenden Pixel zu treffen ist schwer 
ich habe versucht den Frosch immer nach oben schauen zu lassen un den passenden Pixel zu treffen ...


----------



## Marcinek (24. Dez 2012)

Kann man Fachbegriffe nicht ergoogeln?


----------



## tröööt (24. Dez 2012)

tja ... wenn man posts nicht liest oder nicht versteht ...

ich hatte bereits einen tipp gegeben : "map" erstellen ... und darin den pfad speichern den die kugeln laufen und wo die "kanone" sitzt ... dadurch spart man erheblich rechenzeit weil man so nur noch einen bruchteil des gesamten bildes analysieren muss ...

die idee die "kanone" in einen festen winkel zu stellen um das analysieren hier einfach zu machen ist schon mal gar nicht so verkehrt ... aber deine umsetzung genau ein pixel analysieren zu wollen ist schon wieder nicht ganz so toll ...
lieber ein rectangle um die position machen und die farb-werte zusammenrechnen und dann mit konstanten abgleichen ... das kostet unwesentlich mehr und ist dafür präzieser ...

und die bewegung der kugeln kannst du auch interpolieren ... dafür brauchts dann nur n bissl logik wie sich die kugeln überhaupt bewegen ... sollte aber auch machbar sein ...


wenns performant geschrieben ist und dein system relativ schnell ist solltest du auf sehr hohe fps kommen und damit schnell genug reagieren können bevor die angepeilte position auf die du schießen willst bereits ungültig ist ... aber da kann man ja vor dem "schuss" noch mal schnell ein bisschen interpolieren und prüfen ... zur not halt immer der map entsprechend "vor" die ziel-kugel feuern ... dann kann man kleinere spikes durchaus umgehen ...


----------



## Ference (24. Dez 2012)

die maps sind als bild in den Ordnern vom Spiel zu finden  
ich muss nur schauen wie das mit einem größeren Feld funktioniert ^^


----------



## tröööt (24. Dez 2012)

sorry ... aber du hast scheinbar nicht verstanden was ich mit der "map" meinte ...

ich meinte damit eine liste von möglichen punkten die die kugeln überhaupt nehmen können ... denn wenn man sich nur diese betrachtet muss man nicht das ganze image durchkramen ...
aber gut ... scheinbar solltest du doch lieber üben in diesem "spiel" besser zu werden anstatt hier verkrampft irgendwas basteln zu wollen .. denn dafür scheint dein wissen nicht auszureichen ...

also kleinen tipp noch : Hough-Transformation ...


----------



## Ference (24. Dez 2012)

mit der Map kann ich die Punkte herausfinden, hab ich so auch gemacht .. ich dachte du meinst ich soll ein screenshot machen um dann die rauszufinden


----------



## tröööt (24. Dez 2012)

*facepalm*
naja ... zur erzeugung der "maps" wird das sicher einmal für alle level nötig sein ... aber an sich dachte ich da schon eher an etwas effizienteres


----------

