# Kollisionserkennung bei Jump'n'Run



## Apo (2. Nov 2009)

Hi,

ich habe mal wieder etwas programmiert. Mein Ziel war/ist ein SuperMario Klon. Jetzt versuche ich die Kollisionserkennung gut hinzubekommen. Aber so richtig zufrieden bin ich nicht. Ich muss es einfach perfekt hinbekommen, weil es wie immer nicht nur für mich ist, sondern ich noch etwas mehr damit vorhabe. =)

Wie gehe ich vor bei der Kollisionserkennung?
Alle Objekte im Spiel sind Rechtecke. Ich überprüfe, ob sich zwei Sachen schneiden, wenn sie sich bewegen. So weit die Theorie und klappt auch ganz gut. Bloss leider nicht immer perfekt so wie ich es gerne möchte.
Zum Beispiel bei einer Situation wie:
##########
###SSS####
######P###
##S###P###
##SSSSSSSS

S ist ein Stein und P der Spieler. Wenn ich jetzt nach links SCHNELL laufe und im richtigen Moment springe komme ich noch zwischen die Steine nach links. Was suboptimal ist. Das finde ich unschön. Wenn jemand Zeit und Lust hat, würde ich mich freuen wenn ihr mal in den Code schauen könntet. Die Kollisionserkennung ist in der ApoMarioEntity-Klasse.

Habt ihr vielleicht eine andere Idee der Kollisionserkennung?


Applet und Download der aktuellen Alpha Version: Klick mich
Der Source ist in der Jar dabei. Einfach die Jar entzippen.

Es besitzt Zufallslevels. Wenn euch eins nicht gefällt oder zu schwer ist einfach "n" drücken. Ich finde bis Schwierigkeitsstufe 150 geht es, danach werden einige Levels recht "schwer" 

Ich danke euch!


----------



## Marco13 (2. Nov 2009)

Hab mal kurz draufgeschaut ... es geht um thinkCollision!? Ist jetzt ein bißchen schwer nachzuvollziehen ... ob das jetzt an der Uhrzeit, fehlenden Kommentaren oder so leicht irritierenden Zeilen wie

```
if ((cut.width > [b]0 * [/b]ApoMarioConstants.SIZE) || (cut.height > 0 * ApoMarioConstants.SIZE)) {
```
liegt, weiß ich nicht.

Aber ganz allgemein: Du überprüfst die Rechtecke am ANFANG und am ENDE des Schrittes auf Überschneidungen? Kann es sein, dass man auch ("continuous collision detection") den Weg auf mögliche Kollisionen testen muss? (Oder ein bißchen gestochert: Inwieweit hängt die Häufigkeit des Auftretens des Problemes mit der Größe des 'delta' zusammen?)


----------



## Apo (2. Nov 2009)

Danke schonmal fürs reinschauen. =)
Oh die 0*Size hatte ich zu Testzwecken implementiert und immer mal variiert (mal mit 1 mal 1.5f usw), deshalb stehen die noch drin. *hust*

Das Delta ist mit 10 schon sehr klein und auch fest. Ich habe es mit kleineren Werten schon versucht, aber das Problem bleibt. Deshalb bin ich etwas überfragt derzeit.

Was mache ich genau. Als erstes teste ich, ob eine Kollision mit einem unteren Tile vorliegt. Falls ja setze ich die Geschwindigkeit in y-Richtung auf 0.
Danach teste ich, ob das Objekt mit Sachen links, rechts und darüber kollidiert. Und falls ja dann setze ich es so zurück, damit keine Kollision mehr vorliegt.

Ich kommentier den Code aber mal (hast ja recht Papa Marco  ) und melde mich dann wieder. =)


----------



## Apo (8. Nov 2009)

Hi,

sorry das ich mich jetzt erst wieder melde. War unterwegs und hatte leider keine Zeit und kein Internet.

Ich habe nun den Code in der ApoMarioEntity Klasse kommentiert und die wichtigsten Sachen aus ApoMarioPlayer und ApoMarioEnemy auch. Desweiteren habe ich die Updatezeit halbiert in der Hoffnung, das dies die gewünschten Verbesserungen mit sich bringt.

Ich würde mich immer noch freuen, wenn ihr mir helfen könntet. Den "sinnlosen" Code habe ich erstmal drin gelassen, da ich damit immer noch ein bisschen rumspiele.

Würde mich auch sehr freuen, wenn ihr es testen könntet. Läuft das Spiel? Macht es irgendwelche Probleme? Was würdest ihr euch noch wünschen Gameplaytechnisch? Applet und Download gibt es wie immer hier

Ich danke!


----------



## Steev (8. Nov 2009)

Hi Appo,

das Spiel läuft wunderbar und flüssig. Was ich mir noch wünschen würde währe ein Level-Editor und die Möglichkeit, aus erstellten Leveln eine Art Kampagne zu erstellen. Das dürfte auch technisch gar nicht so schwer sein, man müsste ja nur eine Startposition und eine Endposition bestiimmen können und bei der Endposition sagen können, welcher Level als nächstes geladen werden soll.
Was in dem Zusammenhang vieleicht nicht schlecht ist, ist eine Art Triggerbox, die man im Level platzieren kann. Wenn der Spieler in diese hineinkommt, dann könnte zum Beispiel ein Text als Untertitel erscheinen.

Ansonsten kann ich nur sagen: :toll:
Aber das ist ja bisher bei allen deinen Spielen so gewesen ;-)


----------



## OliverKroll (8. Nov 2009)

Das Spiel ist großartig.:toll:
Das Springen ist etwas ruckelig. Im Programmtext sind "links-rechts"-Steuerung und Springen tatsächlich an unterschiedlichen Stellen.
Es sollte eine Mindest-Sprunghöhe geben.
Eine feinere Kollisionsprüfung als mit einem Rechteck sollte zu schaffen sein.


----------



## Apo (8. Nov 2009)

Danke fürs Testen!

Das Spiel ist erst im Alpha-Stadium und wird ständig weiterentwickelt. Als nächstes wird ein Menu folgen, wo der User selber einstellen kann, wie schwer das Level sein soll und wie lang.

Level-Editor wird noch folgen. Ein Storymodus ist bis jetzt nicht geplant, sondern ein Duell mit einer KI, die durch das Level läuft. Wer aus dem Bildschirmbereich fliegt verliert bzw. wer als erster im Ziel ist gewinnt. =) Das ist der sehr abstrakt gefasste Plan. Die Idee mit der KI kam mir durch diesen Contest. Ich wollte erst mitmachen, hatte aber leider keine Zeit und habe mich jetzt entschieden es selber zu programmieren. Und ein Freund von Wettbewerben bin ich auch. 

Das mit der Triggerbox ist auf jeden Fall aber eine Idee. Habe ich auf meine ToDo-Liste mit aufgenommen.

Zum Springen: Eine Mindesthöhe wäre möglich. Ich wollte es einer KI nur ermöglichen so genau wie möglich zu springen und laufen, deshalb gibt es bis jetzt keine Mindesthöhe. Für den menschlichen Spieler würde es sich anbieten (ist beim Original ja auch so)

Zur Kollisionserkennung: Inwiefern eine feinere Kollisionsprüfung? An was hast du gedacht? Man könnte die Bilder nehmen und schauen, ob sie sich wirklich bildmäßig schneiden.

Ich werde mal versuchen die Kollisionserkennung neu zu schreiben, weil sie immer noch Löcher hat und das nicht sein darf/soll. Falls wie gesagt jemand eine Idee zur Umsetzung hat, würde ich mich darüber sehr freuen. =)


----------



## Steev (9. Nov 2009)

@Appo - Kollisionserkennung:
Ich würde für die Spieler eine Pixelgenaue Kollisionsüberprüfung machen. Dazu würde ich eine Interface "Hitable" programmieren in der du mithilfe einer Methode "boolean hitAtRGB(Object source, int x, int y, int rgba)" überprüfst, ob an einer bestimmten Position mit einem bestimmten Alpha-Wert eine Kollision vorliegt. Dann würde ich in deinem Player-Objekt (ich habe mir deinen Code jetzt nicht angeguckt, denke aber, das du es so gemacht hast ;-)) eine Methode "boolean hitAt(int x, int y)" machen, in der ich mithilfe der Interface und der aktuellen Bitmap überprüfe, ob an der enstprechenden Position (absolute Position) in deinem Spiel eine Kollision mit deinem Spielerobjekt vorliegt. Auserdem würde ich dann noch eine Methode "hitWith(Spielobjekt target)" programmieren, in der du überprüfst, ob dein Spieler mit irgendeinem anderen Spielobjekt kollidiert. Dafür würde ich erst eine Bounding-Box-Kollision prüfen. Sollte diese erfolgreich sein, so würde ich eine Pixelgenaue kollision überprüfen. Das würde ich folgendermaßen tun: errechne für jeden sichtbaren Pixel des Spielerobjektes die absolute Position, rufe dann mithilfe dieser absoluten Position die "hitAt"-Methode des Spielobjektes auf. Gibt diese "true" zurück, so liegt eine Kollision vor und du kannst "true" zurückgeben.

Pseudocode:
[Java]
public class Hitable {
    public boolean hitAt(Object source, int x, int y, int rgba);
}
[/Java]

[Java]
public class YourHitableAdapter implements Hitable {
    public boolean hitAt(Object source, int x, int y, int rgba) {
    int alpha = (argb >> 24) & 0xff;
    int red = (argb >> 16) & 0xff;
    int green = (argb >> 8) & 0xff;
    int blue = (argb) & 0xff;
    return alpha == 255;
  }
}
[/Java]

[Java]
public class Gameobject {
  Hitable hitable = new YourHitableAdapter();
  // [...]
  public boolean hitAt(int x, int y) {
    int relativeX = x - camera.getX() - this.getX();
    int relativeY = y - camera.getY() - this.getY();
    return hitable.hitAt(this, relativeX, relativeY, getCurrentImage().getRGB(relativeX, relativeY));
  }
  // [...]
}
[/Java]

[Java]
public class Player extends Gameobject {
  // [...]
  public boolean hitWith(Gameobject target) {
    int absoluteX = 0;
    int absoluteY = 0;
    if (this.hitWithBoundingBox(object.getBounds()) {
      for (int x = 0; x < this.getCurrentImage().getWidth(); x++)
        for (int y = 0; y < this.getCurrentImage().getHeight(); y++) {
          if (!this.hitable.hitAt(this, x, y, this.getCurrentImage().getRGB(x, y))
            continue;
          absoluteX = x + camera.getX() + this.getX();
          absoluteY = y + camera.getY() + this.getY();
          if (target.hitAt(absoluteX, absoluteY))
            return true;
        }
    }
    return false;
  }
  // [...]
}
[/Java]

Das ist jetzt natürlich nur ein Konzept 

Ich würde vieleicht noch, bei dem verschieben eines Spielers diese Kollisionsabfrage pro Pixel durchführen. Wenn du also deinen Spieler um 5 Pixel verschiebst, dann würde ich für jeden Pixel (Zwischenschritte) überprüfen, ob eine Kollision vorliegt.


----------



## Apo (14. Dez 2009)

Hi,

sorry für die späte Antwort. Ich habe bald mal wieder Zeit und werde mich mal darum kümmern können. Die Idee mit dem Testen jeder Pixelbewegung ist eine gute Idee. =) Ich muss nur mal schauen wie lange so etwas dauert und ob es für mein Konzept umsetzbar ist.

Ich habe mich gegen eine Pixelperfektkollisionserkennung ausgesprochen, weil es später ein Wettbewerb werden soll, wo jeder einfach die Möglichkeit hat zu berechnen, wo er genau in X-Millisekunden bzw. Schritten ist. Deshalb finde ich die Rechteckvariante verständlicher. Was denkt ihr?

Ich habe jetzt erstmal ein paar kleine Sachen verändert (Fallgeschwindigkeit verkleinert, Kollisionsbetrachtung mit den Gegnern vereinfacht, Punktezähler verbessert etc.) und einen Optionsbutton hinzugefügt. Jetzt könnt ihr bestimmen, wie schwer und lang das Level sein soll.


----------



## fastjack (14. Dez 2009)

Sieht very nyce aus  Da soll mal noch jemand sagen, das man mit Java keine vernünftigen Action-Spiele machen kann.


----------



## w0ddes (14. Dez 2009)

Also ich hab grade mal etwas "getestet" ;D 
Spiel ist schon sehr cool, jedoch is die Steuerung noch etwas verwirrend .... Springen würde ich auf "Space" erwarten und so kam ich des öfteren n bisschen durcheinander  
Und (klar, es ist eine Alpha) es sind noch einge Bugs drin  

An sich ein sehr interessantes Projekt .. vorallem da es Erinnerung an "Früher" mit dem SNES wieder aufkommen lässt


----------



## Apo (14. Dez 2009)

Danke fürs Testen. =)

Also für Bugs bin ich immer zu haben. Also ruhig her damit. =) Würde mich freuen.

Die Steuerung habe ich an den Emulator angepasst, da ist die Standardkonfiguration auch: Pfeiltasten und a und s. Aber ich habe zusätzlich noch Space für Springen und Shift für Sprinten eingebaut.
Desweiteren passen die Untergrundtiles nun auch wirklich zu ihren Nachbarn und die Menupunkte können nun auch mithilfe der Tastaturen erreicht werden. (Also Beenden mit ESC, weiter mit Enter usw.)


----------



## tiger (2. Feb 2010)

hi,

bei der suche nach einem kollisionsabfragekonzept (falls es sowas gibt) bin ich auf diese seite gestoßen und habe es mir nicht nehmen lassen, das spile mal zu testen. es ist gut geworden, nur bin ich bei einem level an einer stelle angekommen, wo die breite eines abgrundes zu groß ist um darüber springen zu können und auch keine gegner in der nähe sind, auf die man springen kann, um über den abgrund zu kommen. und somit ein unschaffbares level kreiert wurde... keine ahnung ob sowas beabsichtigt wurde, aber falls es ein bug ist, wollte ich es mal erwähnen.

gruß tiger


----------



## Apo (3. Mai 2010)

Danke für den Bug. Er kann theoretisch immer noch auftreten. 
Jetzt wurde erstmal die "Engine" die dahinter steht verändert und dadurch würde ich mich freuen, wenn es noch einmal kurz getestet werden könnte, ob es nun flüssig läuft? 
Danke =)

Werde mich in nächster Zeit mal damit beschäftigen, das Spiel fertig zu stellen. Melde mich dann wieder.


----------



## Marco13 (3. Mai 2010)

Es läuft flüssig, aber der Rechner ist auch nicht der langsamste. Aber es ist frustrierend. Ich hab' eben bestimmt 15 mal versucht, ein und dasselbe Level zu lösen. Die sind wohl gar nicht dazu gedacht, gelöst werden zu können? ???:L


----------



## Quaxli (4. Mai 2010)

Bezüglich der Animationen und Bewegungen habe ich auch keine Beanstandungen. Allerdings bin ich schonmal nicht über die ersten beiden Abgründe gekommen. ;( Daher kann ich das nur für den Anfang des Spieles beurteilen.


----------



## Apo (4. Mai 2010)

Naja es sind ja Zufallslevels. Wenn der Schwierigkeitsgrad bei > 300 ist, dann wird es für einen Menschen recht schwer. Aber in der Theorie sollte es möglich sein.  Bei den Options kann man ein Level mit Schwierigkeitsstufe 0 und Levellänge von 100 einstellen. Wer das nicht schafft ... der .. nunja 
Auch die Levellänge ist wichtig. Bei einer Levellänge von 100 habe ich selbst schon ein Schwierigkeitsgrad von 500 geschafft. Aber je länger desto schwieriger ist es.

Falls es ein Level gibt, was ich schwer lösen kann, dann drücke ich einfach "n" und lasse mir ein neues Zufallslevel erstellen. Der Zufallsalgorithmus kann es derzeit in seltenen Fällen noch schaffen, dass er Abgründe erstellt die man zwar überspringen könnte, da er aber noch eine Kanone am anderen Ende aufstellt, schafft man den Sprung dann doch nicht. Wird noch verbessert. =)


----------



## Apo (26. Mai 2010)

So ich habe mal aus Spaß an der Freude nun die ersten "KI"'s mit eingabaut. Die ihren Namen natürlich noch nicht verdient haben.
Die erste besteht aus 2 Zeilen (player.runRight; und player.jump()) und die zweite besteht aus 3 Zeilen (wie davor + player.runFast()). War zu Testzwecken, ob es fkt. Und es ist ein Wunder, dass bei einfachen Levels die KI es häufig schafft ins Ziel zu kommen. 
Ich werkel mal ein bissl an den KI's rum, damit man Spaß hat. Zum derzeitigen Einstellen der KI's einfach auf die Pfeilbuttons gehen.

Eine Frage noch. Derzeit verliert der Spieler der aus dem Bildschirm gedrängt wird ... Aber bei schnellrenenden KI's passiert das sehr schnell. Habt ihr andere Ideen, wie man das machen könnte? Welche Gewinnbedingungen würdet ihr gut finden?

Ich danke euch!
Zum ausprobieren einfach hier drauf klicken


----------



## Marco13 (26. Mai 2010)

Och, was heißt schon "KI" - Ich hab' damals mit dem Lego Technic Control Center so ein Ding gebaut, das zumindest den ersten Teil von "Super Mario World" auf dem Gameboy spielen konnte


----------



## ne0n2005 (29. Mai 2010)

Hi, 
erstmal möchte auch ich mein Lob für deine wirklich guten Spiele aussprechen. Auch der Mario Clone ist meiner Meinung nach sehr gut geworden. Mir ist nur aufgefallen das sich das Hintergrundbild des Levels teilweise ändert, jedoch kann ich nicht sagen ob es sich hier um einen Bug handelt, da ich nie Mario gespielt hatte (ich hatte Sega). 
Was ich jedoch äußerst gewönungsbedürftig finde, ist die Tatsache, dass wenn ich die Leertaste ganz kurz antippe einen nur sehr kleinen Sprung mache. Eventuell würde ich die "Grenze" für den kleinst möglichen Sprung ein wenig erhöhen oder gar eine Taste binden, welche unabhänging von ihrer Drückzeit immer einen höchstmöglichen Sprung veranlasst.

mfg neon


----------



## U2nt (29. Mai 2010)

Ich finde die Anzahl an Blumen ein bisschen zu hoch, ich würde für die Maps sogar eher ein neues Teil wie G für Großmachteil (xD) machen, weil in dem Spiel bin ich eigentlich DURCHGEHEND mit einer Blume ausgestattet 

Ansonsten gefällts mir richtig gut.

PS: Für die, die nicht über abgründe kommen: Man sprintet mit Shift! xD


----------



## Apo (1. Jun 2010)

Vielen lieben Dank fürs Testen. =)



ne0n2005 hat gesagt.:


> ... Mir ist nur aufgefallen das sich das Hintergrundbild des Levels teilweise ändert, jedoch kann ich nicht sagen ob es sich hier um einen Bug handelt, da ich nie Mario gespielt hatte.



Naja das war für Performancesachen gedacht. Wenn er länger als 10 ms zum Zeichnen braucht im Schnitt über 100 mal Malen, dann soll er einfach den Mittelhintergrund ausblenden, was einige Frames bringt. Habe das mal leicht angehoben.



ne0n2005 hat gesagt.:


> ... Was ich jedoch äußerst gewönungsbedürftig finde, ist die Tatsache, dass wenn ich die Leertaste ganz kurz antippe einen nur sehr kleinen Sprung mache. Eventuell würde ich die "Grenze" für den kleinst möglichen Sprung ein wenig erhöhen oder gar eine Taste binden, welche unabhänging von ihrer Drückzeit immer einen höchstmöglichen Sprung veranlasst.



Im Original gibt es nur 2 Varianten. Ein kleiner Srpung und ein großer Sprung. Ich habe mir überlegt es flexibler zu gestalten und dem Spieler die Entscheidung zu lassen, wie hoch er springen will. Da es aber wieder ein Wettbewerb für 1tis an der FIN wird, werde ich es wahrscheinlich noch umschreiben und nur einen kleinen und großen Sprung ermöglichen.



U2nt hat gesagt.:


> ... Ich finde die Anzahl an Blumen ein bisschen zu hoch, ich würde für die Maps sogar eher ein neues Teil wie G für Großmachteil (xD) machen, weil in dem Spiel bin ich eigentlich DURCHGEHEND mit einer Blume ausgestattet



Jaein. Es richtet sich nach dem Schwierigkeitsgrad wieviel Blumen bzw. Pilze versteckt sind. Kann aber sein, dass die Verteilung prozenttechnisch noch zu hoch ausgefallen ist. Ich spiele mal damit rum. =)



U2nt hat gesagt.:


> ... Für die, die nicht über abgründe kommen: Man sprintet mit Shift! xD



Nicht nur mit Shift auch mit 'a' wie im Emulator kann man sprinten und mit der Leertaste oder 's' springen. 


So ich habe mal ein paar kleiner Fehler bei den Kanonen usw entfernt. Als nächstes folgt nun eine Simulation der KI (vor dem eigentlichen Abspielen wird das ganze schon durchgerechnet und danach einfach per Replay wiedergegeben).


----------



## Apo (23. Jun 2010)

Ich habe jetzt mal viele Kleinigkeiten verbessert und ein bisschen mit den KI's rumgespielt.
Dabei sind 2 schöne Videos entstanden. Wer Lust hat kann sie sich gerne anschauen. =)
Video 1 und Video 2. Vor allem das zweite Video macht mir selber immer wieder Spaß zuzuschauen.  Ich glaube das Programm kann wirklich ganz gut werden


----------



## Quaxli (24. Jun 2010)

Ist ja schonmal beruhigend, daß Du selbst auch in die Abgründe stürzt.


----------



## cz3kit (24. Jun 2010)

Könntest du vielleicht die Source Dateien hochladen? Ich würde da gerne einfach mal aus neugier reinschauen, wenn es dich nicht stört. 

Ansonsten muss ich mich den anderen anschließen. Ich finde das es super gelungen ist, es macht Spaß zu spielen  Was mir gefällt ist, das unten die Map klein eingeblendet ist, da weiß man wie weit man es noch hat. Echt cool


----------



## matze8426 (24. Jun 2010)

Ich habe jetzt nicht jeden Eintrag gelesen. Aber bei Java ME gibt es Sprites, die eine pixelgenaue Kollisionserkennung bieten. Evlt. kann man deren Verhalten ja nachprogrammieren.


----------



## Apo (25. Jun 2010)

cz3kit hat gesagt.:


> Könntest du vielleicht die Source Dateien hochladen? Ich würde da gerne einfach mal aus neugier reinschauen, wenn es dich nicht stört.



Wird natürlich gemacht. Aber erst wenn ich zufrieden bin. Derzeit arbeite ich noch an einer besseren Unterstützung für die Leute, die mal eine KI schreiben wollen. =)
Wenn das alles steht, lade ich alles mit hoch. Bloss derzeit wird wie erwähnt noch viel hinzugefügt und auch verändert, sodass sich die Source Dateien nicht lohnen bzw noch fehlerhaft sind. =)



Quaxli hat gesagt.:


> Ist ja schonmal beruhigend, daß Du selbst auch in die Abgründe stürzt.



lol  ja irgendwie schon 


So heute das Symposium der Telemedizin in Mitteldeutschland genutzt und mir Gedanken gemacht, was ich noch hinzufügen könnte. Ich habe ich ein paar Fehler verbessert, ein Debug-Fenster hinzugefügt und mit "p" kann man das Spiel nun pausieren. Die KI darf nun auch Rechtecke, Kreise und Linien malen, wenn sie mag. Ein Replay wird intern nun auch schon gespeichert ... doch war ein erfolgreicher Tag  Mal schauen was ich am Wochenende dann noch schaffen kann, einige Ideen sind noch offen. =)


----------



## Apo (27. Jun 2010)

So nun gibt es ein einfaches Analysetool, damit man sich die Spiele nicht anschauen muss  und Replay speichern und laden fkt auch. =)
Außerdem ein wie immer tolles Feature  und zwar Speed einstellen (oder einfach "q" bzw. "e" drücken im Spiel). Das Spiel 5 mal langsamer, da erkennt man viele schöne Fehler.
Des Weiteren einige Fehler beseitigt, sodass bei einem restart nun wirklich das gleiche Ergebniss immer rauskommt. =)
Es wird sag ich mal =)


----------



## Quurks (28. Jun 2010)

Schönes Spiel.

Tile Map Path Finding with A Star (A*) | Coke And Code - Java Games and Games Development gerad "zufällig" gefunden, kannst du evtl gebrauchen


----------



## Apo (8. Jul 2010)

So mal wieder ein Zwischenstand von mir!

Ich habe mal das Optionsmenu verbessert und nun kann man seine Lieblingslevel immer wiederholen (indem ihr euch einfach nur die Breite, den Schwierigkeitsgrad und die Zufallszahl merkt und sie beim nächsten mal wieder einstellt). Ich hoffe es ist intuitiv genug.
Dann kann man noch Spiele simulieren und den Debugmodus einstellen. Im Spiel sieht man die Kollisionsboxen und in der JFrame-Version öffnet sich ein Analyseframe.
Die Spielgeschwindigkeit kann wie erwähnt mit den Pfeilbuttons während des Spiels verändert werden (oder halt mit q und e).
Außerdem kann die JFrame-Version auch schon class Datei laden (also externe KIs).
Auch die Punktevergabe und einige kleine optische Sachen wurden verändert bzw. verbessert.

Des Weiteren geht die A*-KI gut voran, aber bevor ich die mit online stelle, muss erstmal die Kollisionserkennung komplettiert werden.
Das ist mein nächster geplanter Milestone. Das könnte ein großer werden, denn dann bleiben in der Theorie nur noch optische Verbesserungen und einarbeiten der Wünsche der User. Das Grundgerüst müsste dann fertig sein.

Eine Frage habe ich noch. Weiß jemand wie ich an den Zwischenspeicher (Stichwort strg + v) rankomme? Dann kann ich mein eigenes "Textfield" weiter verbessern. Ich danke! =)

Die neuste Version ist wie immer hier zu erreichen.


----------



## Marco13 (8. Jul 2010)

An die Zwischenablage müßte man mit dem Clipboard (Java Platform SE 6) kommen...


----------



## Apo (23. Jul 2010)

So noch einmal vielen Dank für den Tipp, Marco13.  Im Textfeld kann man nun per Strg + c, x oder v seine zwischengespeicherten Werte einfügen bzw löschen.

Eine neue stark verbesserte Version ist online. Neben viele kleinen Bugs (irgendwann müssten doch mal alles raus sein ...), müsste jetzt die Kollisionsbetrachtung so hinhauen, wie ich es möchte.  Derzeit ist nur noch Walljump an ... da bin ich mir noch nicht sicher, ob ich das drin lasse oder nicht.
Des Weiteren gibt es nun eine halbwegs ordentliche Website (wird noch weiter ausgebaut in den nächsten Wochen). =)
Außerdem kann man nun Replays speichern, laden und abspielen. (wobei noch ein KLITZEKLEINER Fehler drin ist ...)
Und last but not least kann man nun in einem extra ausgelagerten Propertiesfile Sachen, wie die Größe des Frames und ob man im Debug Modus spielen möchte, einstellen. (ob man in 320x240, 640x480 oder 960x720 spielen will z.B.).

Es wird ... ich sage mal es wird. Wer es ausprobieren möchte, der möge hier klicken oder für immer schweigen. =)


----------



## Marco13 (23. Jul 2010)

Ja, hab's mal kurz angesehen - das nähert sich inzwischen schon Copyrightverletzungsverdächtig dem Original an  Ist es eigentlich Absicht (bzw. war es im Original so) dass man nicht zurücklaufen kann?


----------



## Apo (23. Jul 2010)

Bei einigen Teilen konnte man wirklich nicht zurück laufen. Aber hier ist es so geplant, damit man leicht gegen die Gegner-KI gewinnen kann. =)

Ich habe Nintendo schon angeschrieben und gefragt wie es aussieht. Das Programm hat ja das Ziel einen lehrenden, forschenden Charakter zu haben und "nur" ein Wettbewerb an der Universität ist. Das heißt es wird kein Geld verdient und ist eher positive Publicity für Nintendo. Ihre Antwort war ein Standardblabla, dass sie gegebenenfalls dagegen vorgehen werden ... Da das Programm aver nicht so bekannt werden wird und einen positiven Effekt für Nintendo hat, glaube ich nicht, dass sie dagegen vorgehen werden.

ABER ich habe schon Computervisualisten an meiner Uni angefragt, ob sie nicht Lust haben neue Zeichnungen/Charaktere zu entwerfen. Sieht ganz gut aus, aber wird noch einige Zeit dauern. Kann also sehr gut sein, dass es später anders aussieht. =)


----------



## Marco13 (23. Jul 2010)

Notfalls kannst du ihnen ja sagen, dass sie sich erstmal die ca. 1 Million Google-Ergebnisse ansehen sollen, die erscheinen, wenn man nach "Super Mario Clone" sucht  Eigentlich ist das ja "Abandonware". Aber als Grundlage für ein Uniprojekt, und insbesondere nicht-kommerziell, sollte das ja OK sein.


----------



## Apo (1. Okt 2010)

So nun habe ich einiges verändert. Was auffallen könnte, nun verliert man beim Duell nicht mehr, nur weil man aus dem Bildschirm rutscht. Es wird einfach ein Player mit der Kamera zentriert. Wenn ihr euch den anderen anschauen wollt, drückt einfach 'c'.

Des Weiteren wird grad ein neues TileSet gezeichnet. Wenn ihr im Menu mal auf 't' drückt, seht ihr den derzeitigen Stand (einige Gegner und der eigentliche Spieler fehlen noch und wurden deshalb noch nicht geändert, aber man erkennt es schon sehr gut, was das Ziel ist denke ich mal). Über Meinungen und Feedback zum TileSet würde ich mich sehr freuen. Ein gewisse "Sozialkritik" wollte ich üben. Erkennt man es?


----------



## Apo (5. Okt 2010)

Ich wollte mal ausprobieren wie schnell am die Jump And Run Engine in andere Spiele implemntieren kann und ich muss sagen 3 Stunden Arbeit und man bekommt ein völlig neues Spiel. Wäre super wenn es jemand mal Testen könnte. Ich will gar nicht viel mehr sagen. Vielleicht ist es ja selbererklärend. Ich werde es die Tage mal weiter ausbauen und extra Levels dafür bauen.

Testen: Bitte klick here


----------



## Marco13 (5. Okt 2010)

Hm. Als demo ganz lustig, aber "Fun und Action" ist was anderes. (Wenn man gegen eine Wand läuft, beendet es sich?! Ansonsten könnte es ja sogar interessant sein...)

Beim Original:
Exception in thread "Thread-12" java.lang.NullPointerException
	at apoMario.game.panels.ApoMarioGame.mouseButtonReleased(ApoMarioGame.java:98)
	at apoMario.game.ApoMarioPanel.mouseButtonReleased(ApoMarioPanel.java:333)
	at apoMario.ApoMarioComponent.think(ApoMarioComponent.java:442)
	at apoMario.game.ApoMarioPanel.think(ApoMarioPanel.java:390)
	at org.apogames.ApoThread.think(ApoThread.java:239)
	at org.apogames.ApoThread.run(ApoThread.java:211)
	at java.lang.Thread.run(Unknown Source)

Das mit dem 't' scheint auch nichts zu bewirken... :bahnhof:


----------



## Apo (6. Okt 2010)

Vielen lieben Dank fürs Testen.

Im "Kommando"spiel habe ich mal die fehlenden Kommandos hinzugefügt und es mal ausgestellt, dass man gleich stirbt bei einem Aufprall. Ich muss nur mal überlegen wie man den Spieler ansonsten fordern kann. Ich habe die Zeit mal etwas runtergesetzt. Vielleicht ist es ja jetzt besser. Jetzt hat der Schwierigkeitsgrad auch direkten Einfluß auf das eigentliche Spiel, das Level und die Geschwindigkeit.

Zum "Original": Danke für den Fehler. Wurde verbessert. Er sollte nicht mehr auftauchen. Des Weiteren einfach im Startmenu selber einfach 't' drücken. Nur dort klappt es mit dem Umstellen.


----------



## MiDniGG (6. Okt 2010)

Hm. Also Kommando ist stressig da jedes mal eben das Kommando zu tippen. Aber sehr lustige Idee. :-D

Beim Original finde ich den neuen Hintergrund lustig! Mc Donald's Coins :-D Fehler hab ich in meiner 2 Minuten Testphase keine gefunden :-D


----------



## Apo (6. Okt 2010)

Danke fürs Testen. 
Zu ApoCommando: Irgendwie sind doch alle gleich. Ich hatte aus Spaß ein paar sinnlose "Befehle" hinzugefügt und die Leute haben echt versucht alle herauszufinden. Aus diesem Grund habe ich noch wesentlich mehr hinzugefügt. Es ist einiges dabei ... von sinnfreien Sachen, wo man einfach nur eine Antwort vom System bekommt (wie z.B. 'woman') über informative ('stats') bis hin zu spielentscheidenen versteckten Sachen. 
Als nächstes möchte ich ein Achievement-System mit integrieren. Mal schauen wie man das am Besten umsetzt, damit es in den Stil passt.
Findet ihr den Zeitdruck ausreichend, um das Spiel anspruchsvoll zu machen? Ich hatte ja erst wie Marco es getestet hat, noch die Kollision mit Wänden drin um zu verlieren. Aber so richtig gewünscht war es ja nicht.

Zum Wettbewerb: Super, wenn es einwandfrei fkt hat. =) Und auch hier danke fürs Testen!


----------



## Apo (7. Okt 2010)

So nun ist beim Commando-Spiel ein einfaches Achievementsystem dabei und 3 speziell angepasste Level. Es werden weitere Levels folgen, aber so kann man es auf jeden Fall spielen. =)


----------



## Apo (9. Okt 2010)

Ein letztes Mal zu ApoCommando. Irgendwie kam das gut an in anderen Foren, was mich wirklich motiviert hat ein paar weitere Levels zu machen und die Ideen der anderen umzusetzen. 
Jetzt gibt es einen Schwierigkeitsgrad, wo es keinen Zeitdruck gibt. Außerdem gibt es nun 9 Levels und viele versteckte Kommandos, die entdeckt werden wollen.
Würde mich auf jeden Fall freuen, wenn ihr es nochmal testen könntet, ob es auch bei euch gut läuft. 
Ich danke euch.

Achtung Spoiler: Wer keine Lust hat alle Level durchzuspielen, kann sich mit 'levelcodes' die Codes der einzelnen Levels anschauen. =)


----------



## Apo (4. Dez 2010)

Ich habe mal wieder an ApoMario weitergearbeitet.

Was ist neu?
 - neues verbessertes Menu
 - neue Punkteberechnung
 - komplettes neues Tileset ingame

Wäre wie immer super, wenn es jemand testen könnte und über Feedback (was ich gut, was nicht?).

Vielen lienen Dank!

Link zum Game: Click here


----------



## Quaxli (6. Dez 2010)

Ich hatte hier auf der fast 4 Jahre alten Büro-Möhre immer wieder mal Lags. Die FPS lagen eigentlich konstant bei ca. 60 FPS (eigentlich kein schlechter Wert) aber trotzdem blieb der Spieler immer wieder mal hängen - mein Eindruck war, daß das vor allem beim Springen passiert - allerdings habe ich nur 5 Minuten auf den Test verwendet, bin also nicht 100%ig sicher 
Was mir gut gefällt ist die Anzeige am unteren Bildschirmrand, wie weit es noch bis zum Levelende ist. 

Das Menü gefällt mir persönlich gut. Die kleinen Animation sieht auf jeden Fall besser aus, als ein einfaches Klick-Menü. Das rundet das Ganze meiner Ansicht nach schön ab. 

Das einzige was mir nicht gefallen hat ist das vollgefressene Männchen. Spricht mich optisch einfach nicht an. Als "Anzeige", daß man jetzt "Munition" zur Verfügung hat, finde ich die Idee gut, nur die grafische Umseztung gefällt mir persönlich halt nicht.


----------



## Apo (6. Dez 2010)

Danke fürs Testen! =)



Quaxli hat gesagt.:


> Ich hatte hier auf der fast 4 Jahre alten Büro-Möhre immer wieder mal Lags. Die FPS lagen eigentlich konstant bei ca. 60 FPS (eigentlich kein schlechter Wert) aber trotzdem blieb der Spieler immer wieder mal hängen - mein Eindruck war, daß das vor allem beim Springen passiert - allerdings habe ich nur 5 Minuten auf den Test verwendet, bin also nicht 100%ig sicher


Leider muss ich dir recht geben, aber ich weiß nicht so richtig warum. =( Ich habe verschiedene Sachen ausprobiert (BufferedStrategy, nur Offscreenimages oder wirklich bösaritg Swing mit paint malen lassen), aber nichts hat wirklich geholfen und das frustriert mich etwas. Deshalb habe ich mich mit den "Mikrorucklern" abgefunden, weil ich es auch einfach nicht herausgefunden habe, wann und wieso sie auftreten. Das mit dem Springen war es leider nicht ...



Quaxli hat gesagt.:


> Was mir gut gefällt ist die Anzeige am unteren Bildschirmrand, wie weit es noch bis zum Levelende ist.
> 
> Das Menü gefällt mir persönlich gut. Die kleinen Animation sieht auf jeden Fall besser aus, als ein einfaches Klick-Menü. Das rundet das Ganze meiner Ansicht nach schön ab.


Danke schön. Finde auch, dass das neue Menu besser passt.



Quaxli hat gesagt.:


> Das einzige was mir nicht gefallen hat ist das vollgefressene Männchen. Spricht mich optisch einfach nicht an. Als "Anzeige", daß man jetzt "Munition" zur Verfügung hat, finde ich die Idee gut, nur die grafische Umseztung gefällt mir persönlich halt nicht.


Mir gefällt der Dicke ganz gut, aber wie du geschrieben hast, ist das wirklich eine subjektive Sache. Im Menu kann mit noch auf 't' drücken und so auf das Original Mario zurückschalten.


----------



## Sonecc (8. Dez 2010)

wirds dazu auch nen Download Link geben?

Edit: vl machst du mal ein Sammelthema mit deinen Spielen auf, sind ja nicht wenige und sie sind qualitativ hochwertig


----------



## Apo (8. Dez 2010)

Wird auf jeden Fall einen Download samt Source geben, aber erst wenn der Wettbewerb an der Universität startet. Ende Januar ist es soweit. Wird ein Pflichtwettbewerb für alle Erstis und eine Klausurvoraussetzung für das 2te Semester werden. Dadurch werden auch genug mitmachen *freu* Bis dahin möchte ich es noch verbessern, mehr und bessere KI's hinzufügen, das Replay zum Laufen bekommen, einige Ideen zur Unterstützung einer KI einbauen, die Website mit mehr und besseren Infos vollstopfen, weitere Sponsoren ranholen und und und ... Also noch ein bisschen zu tun über Weihnachten.

Das mit dem Sammelthread ist eine Idee.
Pro: - weniger Threads von mir und eine gute, zentrale Anlaufstelle zum Schauen, was gibt es neues
Contra: -vlt werden dann einige Spiele eher misachtet und das wäre ja auch doof, obwohl ich in letzter Zeit eh schon nicht mehr alle Spiele hier veröffentliche, um euch nicht zu nerven. =)

Naja mal schauen. =)


----------



## Marco13 (8. Dez 2010)

Sammelthread? Wie wär's mit einem Unterforum? :smoke:


----------



## Sonecc (8. Dez 2010)

Ich denke in einem sammelthread wären sie sogar weniger missachtet als hier^^
ApoCommander hab ich z.B. nur durch Zufall entdeckt


----------



## Apo (4. Jan 2011)

So das Programm/Spiel ist jetzt fertig, wenn es keinen Fehler mehr gibt!

Jetzt funktioniert das Replay, ich habe einen ordentlichen Simulationsmodus implementiert und Fehler habe ich auch schon eine Weile nicht mehr gehabt. Ein gutes Zeichen das der Wettbewerb am 17.01.2011 starten kann. Freue mich schon. =)

Danke für alle, die den Thread so lange mitverfolgt haben. 

Ich bin sehr zufrieden damit. Wenn der Wettbewerb vorbei ist, werde ich bestimmt mal ein kleines Jump'n'Run mit Story daraus basteln. So schwer ist das ja nicht. =)

Für alle die das Applet gerne testen möchten, die mögen hier klicken. Der Download des Programms mit integrierten Source Dateien folgt am 17.01.2011!


----------



## darekkay (5. Jan 2011)

Hm, klingt gut ^^ Beim ApoSoccer hatte ich leider nicht genug Java-Kenntnisse, vielleicht mach ich dieses Jahr mit, wenn die Zeit es zulässt =)

Das Applet sieht schon mal ziemlich cool aus ^^


----------



## Apo (17. Jan 2011)

So Contest ist gestartet und der Download samt Source ist auf der Website verfügbar. Falls jemand noch fragen hat, kann sie gerne hier oder im eigenen Forum stellen. =)


----------



## xehpuk (17. Jan 2011)

Hi!

Hab das Spiel mal kurz angetestet und schwupps:

```
Exception in thread "Thread-12" java.lang.ArithmeticException: / by zero
	at apoMario.level.ApoMarioLevel.thinkPlayer(ApoMarioLevel.java:937)
	at apoMario.level.ApoMarioLevel.think(ApoMarioLevel.java:888)
	at apoMario.game.panels.ApoMarioGame.thinkLevel(ApoMarioGame.java:247)
	at apoMario.game.panels.ApoMarioGame.think(ApoMarioGame.java:174)
	at apoMario.game.ApoMarioPanel.thinkLevelGame(ApoMarioPanel.java:480)
	at apoMario.game.ApoMarioPanel.think(ApoMarioPanel.java:474)
	at org.apogames.ApoThread.think(ApoThread.java:240)
	at org.apogames.ApoThread.run(ApoThread.java:212)
	at java.lang.Thread.run(Unknown Source)
```
Das kam, nachdem ich das erste Level durch hatte und mir das Replay anschauen wollte.


----------



## Apo (17. Jan 2011)

War so klar ... Danke ist verbessert worden. Verbesserte Version ist on!


----------



## Sonecc (18. Jan 2011)

Die Replays stimmen nicht immer. Habe gerade eines gestartet und er hängt nun an einer stelle. Ich glaube, dass meine Aktionen (springen) zwar ausgeführt werden, er kommt aber nicht weiter. Das Level habe ich aber definitiv erfolgreich beendet

Edit: Replay ist angehängt. Nicht lachen, musste erstmal verstehen, dass man mit space springt, statt mit Pfeil nach oben :lol:


----------



## xehpuk (18. Jan 2011)

Der Fehler scheint nun nicht mehr aufzutreten. 

Dafür zeigt mir das Replay nicht genau das an, was vorgefallen ist. Hab das Level geschafft, bin im Replay aber gestorben. 

Meine Vermutung: Hatte zwischendurch zwei kleine Lags während des Spiels, dadurch kommts vielleicht durcheinander.


----------



## darekkay (18. Jan 2011)

Die Lags kann ich nur bestätigen - keine Ahnung, woran das liegt :/


----------



## Sonecc (18. Jan 2011)

Jap, im nachhinein stelle ich auch lags fest


----------



## Apo (14. Feb 2011)

Das mit den Lags kenne ich auch und weiß noch nicht woran das liegt ...

Das Problem mit dem Replay, wenn ein Mensch gespielt hat, ist leider immer noch da ... ich hoffe es bald mal zu fixen.
Ein paar kleine weitere Bugs sind aber behoben (wichtig wenn jemand eine KI erstellen will =) )


btw: Zur Feier des Tages gestern schnell gebastelt: Valentinstagapplet mit leichtem Nerdfaktor


----------



## Quaxli (14. Feb 2011)

Deins ist wirklich das Beste


----------



## Apo (27. Mrz 2011)

So mal wieder was neues vom Jump'n'Run und Programmierwettbewerb.
Viele kleine Fehler habe ich beseitigt (und hoffentlich keine neuen eingebaut) und was jetzt aber vlt. interessant für einige sein könnte, es gibt nun einen Editor. In der Appletversion könnt ihr auch gerne bauen und testen, aber nur in der Offline Version könnt ihr eure Meisterwerke speichern und laden.
Auch in Sachen Performanceproblemen ... ich habe ein bisschen dran rumgespielt und vlt fkt es bei euch jetzt besser. Bei mir habe ich auf jeden Fall das Gefühl als ob die Kleinigkeiten, die ich verändert habe, was bewirkt haben.

Über Leute, die es testen und Feedback geben könnten, würde ich mich sehr freuen. Vielen Dank!

Link zum Applet


----------



## Apo (28. Mrz 2011)

Ich fasse es nicht ... nach gefühlten Jahren habe ich nun endlich den Replaybug gefunden oder besser gesagt 10000 Bugs, die ihn verursacht haben. Wisst ihr was? Ich bin verdammt glücklich! =)
Außerdem wurden 2 Kleinigkeiten im Editor verbessert, die kaum auffallen werden.
Außerdem habe ich in der offline Version gleich mal 3 Levels mitgeliefert, die eure KI's mal testen können oder auch ihr selber als Mensch. Ein Level ist für Sprünge gedacht, das nächste für Sackgassen, Sprünge und Gegner und das letzte Level ist das erste Level nachgebaut aus Super Mario Bros. 1. Ich hoffe es gefällt und ich muss das Programm nun nicht mehr verbessern. Aber das hoffe ich eigentlich immer. 

Wie immer würde ich mich freuen, wenn es jemand testen könnte, aber grad bin ich nur froh die *piep* *piep* *piep* *zensiert* *piep* *zensiert* Bugs gefunden zu haben. Aber vielleicht reisst mich auch jemand aus meinem Traumland und sagt mir es funktioniert doch nicht. Aber egal.


----------



## Quaxli (29. Mrz 2011)

Erstmal Glückwunsch, zum Auffinden des Bugs. Da würde sich wohl jeder tierisch freuen. 

Ich habe mal ein bißchen mit dem Editor gespielt: Ich finde ihn sehr gelungen. Das die Tiles, sich teilweise intelligent verhalten, finde ich wirklich gut gemacht! :applaus: Besonders bei dem Tile für den Untergrund, das sich je nach Position verformt, finde ich das gut gelöst!
Die Anzahl der auswählbaren Tiles finde ich noch etwas begrenzt. Planst Du hier noch eine Erweiterung oder ist das erstmal so gewollt (wg. des Wettbewerbs)?
Irgendwelche Lags sind mir nicht mehr aufgefallen, ich habe aber nicht sehr ausführlich getestet und nur ein paar Minuten rumgespielt (braucht gerade mal ein "Gegengift"  ).
Insgesamt, finde ich den Editor (wie mittlerweile von Dir gewohnt) toll gemacht. :toll::toll::toll:


----------



## Apo (29. Mrz 2011)

Danke danke fürs Testen und das positive Feedback.

Es ist korrekt die derzeitige Auswahl an Tiles ist arg beschränkt. Aber in der Theorie sollten schon fast alle Original-Levels erstellbar sein. Aber wie schon vermutet, ist er so beschränkt aus Gründen des Wettbewerbes. =)
Aber eine Ausweitung des Editors habe ich später wirklich geplant. Ich hatte einerseits an neue Tiles gedacht als auch an Textmeldungen, die kommen wenn bestimmt Aktionen ausgelöst wurden. Und damit wollte ich dann ein kleines Solo-Jump'n'Run erstellen. Dazu ist das Baby einfach mir zu sehr an Herz gewachsen als es nur für den Wettbewerb zu verbraten. =) Ein kleines Solospiel wird später (x > ein paar Monate) noch folgen und wenn alles klappt wie geplant, sogar eine wissenschaftliche Auswertung der Daten des Wettbewerbes (siehe z.B. die GIC 2011. =)


----------



## Apo (24. Mai 2011)

Tja der Wettbewerb geht in die heiße Phase nun und die ersten Bots sind schon abgegeben und das Studenten kreativ sind, hat sich wieder mal bewiesen. Einer hebelt mithilfe der Reflections einfach das ganze System aus und kommt an die Physik des Spiel ran und manipuliert sie nach seinem belieben. Diese KI ist natürlich nicht zugelassen für den Wettbewerb, aber ich finde der Icarus hat es verdient extra erwähnt zu werden und ich habe auch ein kleines Video ihm gewidmet.


----------



## Apo (1. Jun 2011)

So die Abgabe ist vorbei und es haben 113 Leute ihren Bot abgegeben und 110 haben bestanden (gefordert war Levellänge von 200 bei einer Schwierigkeitsstufe von 100 bei mindestens 2000 Zufallslevels zu 50% ins Ziel kommen).
Ergebnisse könnt ihr hier begutachten.
Es sind zu > 80% typische if-Bots. Aber ein paar Perlen sind dabei wie der NNETbB der ein neuronales Netz benutzt und einige (vor allem die derzeit oben stehen) benutzen typischerweise A* oder Dijkstra.
Jetzt werte ich das ganze noch in Ligen aus, um die beste KI herausfinden.

Falls es noch wen interessiert wie es der "Cheaterbot" (wie im Video vorheriger Post) angestellt hat, für den lege ich einfach folgenden Code ans Herz.
Die eigentliche Spieler Klasse ApoMarioPlayer ist in der KISpielerklasse ApoMarioAIPlayer als private Variable enthalten. Und diese holt er sich "einfach" und damit kann er den Spieler komplett manipulieren und da das eigentliche Level dort auch als private Variable enthalten ist kommt er auch an das komplette Level heran und kann ALLES so manipulieren wie er will. Eine Lexikon die ich nun gelernt habe und beim nächsten Spiel in der Architektur verbessern werde. 
Code:

```
private static Field getField(Class<?> cls, String name) throws NoSuchFieldException, SecurityException {
		Field field = null;
		while(cls != null) {
			try {
				field = cls.getDeclaredField(name);
				break;
			} catch(NoSuchFieldException e) {}
			
			cls = cls.getSuperclass();
		}
		
		if(field == null)
			throw new NoSuchFieldException();
		
		return field;
	}
	
	private static <T extends ApoMarioEntity> T getBaseEntity(ApoMarioAIEntity entity, Class<T> cls) throws IllegalArgumentException, IllegalAccessException {
		return cls.cast(entityField.get(entity));
	}
	
	static {
		try {
			entityField = getField(ApoMarioAIEntity.class, "entity");
			entityField.setAccessible(true);
		} catch(NoSuchFieldException e) {
			e.printStackTrace();
		}
	}
	public void think(final ApoMarioAIPlayer player, final ApoMarioAILevel level) {
		try {
			ApoMarioPlayer hacker = getBaseEntity(player, ApoMarioPlayer.class);
                        //... now u can do everything u want. ;)
		} catch(Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}
```


----------



## Apo (10. Jun 2011)

Ich glaube das Programm (vor allem das Replay) bringt mich mal noch ins Grab ... aber bis dahin verbessere ich es weiter.
Jetzt funktioniert das Replay wirklich immer. Ok das habe ich schon mal gesagt, aber nun könnte es stimmen. Ich habe jetzt einen HiWi bekommen, der noch x-weitere kleine Bugs gefunden hat. Den hätte ich echt mal früher gebrauchen können. Tausend Dank an ihn!!!

Neu:
- Doppelklick zum schnellen Laden und Starten nun wirklich ohne Nebeneffekte möglich
- Gefühlte tausend weitere Replaybugs behoben (von der Anzeige bis hin zur Simulation des Replays)
- 2 neue Methoden zum leichteren Schreiben eines neuronalen Netzes (wird grad versucht und sieht ganz gut aus =) )
- wie FPS angezeigt werden sollen, kann nun in der Properties File eingestellt werden (zwischen 10 und 100)

Wie immer lange Rede kurzer Sinn: Die neue Version ist online und die erste Runde der Auswertung ist auch gelaufen. Die zweite Runde ist auch fast abgeschlossen und wenn alles klappt ist bis nach Pfingsten auch die finale Runde 3 fertig simuliert. =)


----------



## Apo (14. Jun 2011)

So es gibt ein neues Video mit dem Cheater und seiner gerechten Strafe, die ich ihm nun kurz vor dem Ende zufüge. =)
Aber er zeigt einige schöne Editorlevels, die ich neben den ganzen Zufallslevels zur Auswertung benutzt habe.
Video: Click mich

Die Auswertung ist nun durch und die Auswertung wird am Montag, 27.06.2011 sein und dann stehen sie auch online.

Wenn ich jemanden mit den Posts nerve, einfach schreiben. Aber vielleicht interessiert es ja noch einen. =)


----------



## Sonecc (14. Jun 2011)

Also mich interessierts


----------

