# ApoSoccer - Programmierwettbewerb 2009



## Apo (9. Apr 2009)

Hallo,

ich habe eine kleine Frage und möchte nebenbei etwas Werbung für mein neustes Programm machen.
Diesmal geht es um ApoSoccer, einem Fußballspiel, was an den Robo-Cup angelehnt ist.
2 Teams mit jeweils 4 Spieler stehen sich gegenüber und versuchen in das Tor des anderen Teams zu treffen.
Dabei teilt sich das Team in 1 Stürmer, 1 Torwart und 2 Verteidigern auf.

Beschränkungen um das Spiel interessanter zu gestalten:
    * Der Torwart darf sich nur im 16 Meterraum bewegen
    * Der Stürmer darf sich nur in der gegnerischen Hälfte bewegen. Dadurch ist das angreifende Team im Vorteil, wenn es alle Spieler in die gegnerische Hälfte schickt. =)

Ziel ist es, eine KI für eine Mannschaft zu schreiben. Als Hilfestellung wird auf dieser Website ein Spieler exemplarisch entwickelt, um zu zeigen, wie ein Spieler angesprochen und bewegt wird. Für weitere Frage steht ein Forum zur Verfügung.

Die besten KI's werden mit einem tollen Preis honoriert, wie z.B. einer Wii oder einem iPod touch. Mitmachen lohnt sich also! =)

Mehr Informationen und Download gibt es unter Apo-Soccer.

Screenshot:







Nun zu meiner *Frage*: Ich habe einen menschlichen Spieler ermöglicht. Dazu drückt ihr im Menu auf player control und schon dürft ihr das Team steuern. Mit welchen Tasten steht oben im Programm. Bloss gefallen mir die Tastenbelegungen noch nicht so. Habt ihr da bessere Vorschläge?


----------



## Lulumann6 (10. Apr 2009)

das spiel mit der tastertur zu steuern ist warscheinlich schwierig,
ich könnte mir gut eine maussteuerung vorstellen.
mit der gedrückten rechten maustaste läuft der spieler in die gewünschte richtung, die entfernung der maus zum spieler würde seine geschwindigkeit steuern.
und mit der linken maustaste schießt man dann.

ich hätte auch mal eine frage bezüglich wer den anstoß hat. kann man herausfinden wer den anstoß hat wenn setPosition aufgerufen wird?


----------



## Apo (12. Apr 2009)

Mit der Maussteuerung ist eine Idee. Aber wie soll der Spielerwechsel dann von statten gehen? Mittlere Maustaste? Dann ist mein Laptop wieder raus 

Bis jetzt konnte man noch nicht herausfinden, ob man selber Anstoss hat oder nicht. Jetzt habe ich eine Methode isKickOff hinzugefügt, wo abgefragt werden kann, ob man grad Anstoss hat oder nicht. Da ich das selber gar nicht braucht bzw. in Betracht gezogen hatte, war es noch nicht umgesetzt. Wenn du noch weitere Vorschläge zur Verbesserung hast, dann immer her damit. =) Ich bin für alles offen. =) Danke auf jeden Fall dafür!!
Einfach nun wieder auf Download gehen und die neuste Version herunterladen!


----------



## Lulumann6 (12. Apr 2009)

> Mit der Maussteuerung ist eine Idee. Aber wie soll der Spielerwechsel dann von statten gehen? Mittlere Maustaste? Dann ist mein Laptop wieder raus


ich würde sagen mausrad oder alternativ tastertur mit den zahlen 1-4


----------



## ModellbahnerTT (12. Apr 2009)

Ich bekomm immer nur so ein Fenster: http://img26.imageshack.us/img26/9264/dooflrc.jpg und vergrößern geht nicht !?!?


----------



## Apo (12. Apr 2009)

Zur STeuerung: Ist eine Idee. Setze ich morgen mal um.

Zum Fensterproblem: Kannst du die properties.txt löschen und es dann nochmal versuchen? Ich danke


----------



## ModellbahnerTT (13. Apr 2009)

In der properties.txt steht nur:
//Properties for ApoSoccer//
BirdEyeView: false
Debug: true

und löschen der Datei behebt den Fehler nicht.


----------



## Lulumann6 (13. Apr 2009)

den selben fehler bekomme ich auch hin und wieder,
aber ich kann ihn nicht reproduzieren.


----------



## Apo (13. Apr 2009)

Mit der neusten, gerade hochgeladenen Version sollte dieser Fehler nicht mehr vorkommen. Nun wird die properties.txt erst nach dem Erscheinen des MainWindows gelesen und ausgewertet. Auch wird das DebugFrame erst danach erstellt. Falls es diese Fehlerquelle war, ist sie auf jeden Fall erledigt. Also ich bekomme den Fehler nun nicht mehr. Aber ich habe ihn vorher auch nur 1 Mal erhalten.
Die neuste Version kann wie immer auf der Site heruntergeladen werden.

Außerdem gibt es nun ein GhostTeam-KI. Wenn ihr das ladet, dann könnt ihr den Ball steuern (mithilfe der Pfeiltasten und mit 's' kann der Ball gestoppt werden). Für die Entwicklung des Torwarts eine sehr gute Sache. =)

Ich danke auf jeden Fall für den Bug und hoffe das das Programm nun fehlerfrei ist. =)


----------



## ModellbahnerTT (13. Apr 2009)

Habe den selben Fehler noch immer, anders ist nur, dass sich das Debug Fenster offenbar nach dem öffnen direkt wieder schließt.


----------



## Apo (13. Apr 2009)

Es ist richtig. Nun wird das DebugFrame erst nach dem Öffnen des MainWindows erstellt. Ich habe extra für dich eine Version hochgeladen, wo du das Frame resizen kannst. Downloaden kannst du es hier. Ich hoffe nun hast du keine Probleme mehr =)


----------



## Xams (14. Apr 2009)

Schöne Idee
Muss man sich für den Wettbewerb anmelden? Wenn ja, mach ich das hiermit (ich will den Ipod touch )
Die Probleme mit dem Fenster hab ich auch. Was machst du denn mit FreeTTS? 
Mein System
Asus A6VA 2.0 GHZ
ATI Radeon X700 512 MB
Win Xp Home
Java 1.6 13


----------



## 0x7F800000 (14. Apr 2009)

Kann man als gewöhnlicher zivilist (genauer: als einkommensloser student ohne eigene hobby-werkstatt im keller / ohne eigenes robotik-labor an der uni) denn irgendwas mit dem ersten Preis anfangen? ???:L Ich meine: solange ich an dieses Ding nichts dranbauen kann, kann ich doch genausogut mit der virtuellen Simulation von diesem Teil rumspielen... Wobei ich dann auch nicht wüsste, was ich damit rein virtuell anstellen sollte :bahnhof:

Aber der Wettbewerb sieht lustig aus, ich glaub ich schick zum spaß meinen Vorschlag ein, wenn die Zeit während des Semesters nicht zu knapp wird 

*thema zu abonemments hinzufüg*


----------



## Apo (14. Apr 2009)

Ich finde es schön, dass der Wettbewerb auf ein bisschen Gegenliebe stösst. =) Unter den 2tis sieht es auch ganz gut aus.

Wer die Fensterprobleme hat, bitte nutzt den Download, der hier im Forum 3 Einträge drüber geschrieben wurde. Dort könnt ihr das Fenster resizen. =) Ich versuche gerade herauszufinden, woran es genau liegt. Wenn ich es nicht sehr bald finde, dann werde ich den Originaldownload auf resizable machen.

Zu FreeTTS: Ihr könnt Sprüche die Spieler sagen lassen. Und die werden von dem Synthesizer vorgelesen, wenn der Sound auf on ist.  Einfach ein witziges Spielzeug. =)

Zu dem Preis von SUN. Ich habe bei SUN bezüglich Sponsoring angefragt und die wollten das gerne sponsern. Es ist richtig, das Teil ist etwas "freakig", aber zu Testzwecken würde ich es auch gerne mal nehmen. Und nein ich habe auch keinen Hobbykeller. Ich mache eigentlich alles mit meinem kleinen süßen Laptop in der Uni im Büro.  Was das SunSpot genau kann: Schaut mal auf Youtube oder ähnlichem, da gibt es eingie lustige Ideen, was man damit machen könnte.


----------



## Steev (15. Apr 2009)

Das Fensterproblem ist auch bei deinen anderen Programmen wie ApoBot usw. vorhanden.

Schätzungsweise liegt das Problem in der Klasse ApoMainBufferedStrategy, in der setzt du ganz am Anfang des Resizable auf false. In den überschriebenen Klassen rufst du dann das pack auf, was aber nicht greift, da das Fenster nicht in der Größe verändert werden kann.

Ich werde aber noch mal genau nachgucken.


----------



## Steev (15. Apr 2009)

Ok, das Problem lag in der oben beschriebenen Klasse.

Zur Lösung habe ich in der init-Window-Methode vor dem pack() ein setResizable(true) und danach ein setResizable(false) eingefügt.

        private boolean resizableFlag = true;
	private void initWindow() {
		this.setIgnoreRepaint(true);
		this.setUndecorated(false);
		super.setResizable(true);
		this.pack();
		super.setResizable(resizableFlag);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}
        public void setResizable(boolean resizable) {
                resizableFlag = resizable;
		super.setResizable(true);
        }


----------



## Apo (15. Apr 2009)

Hi,

danke für den Tipp. Ob er immer funktioniert kann ich nicht sagen, da der Fehler bei mir leider nicht auftrat. (bzw 1 Mal vor ganz langer Zeit  )
Ich habe es mal verändert in der Hoffnung, dass es nun bei allen anderen auch funktioniert. Der einzige kleine Schönheitsfehler der noch bleibt, ist die Tatsache, dass das Fenster jetzt irgendwie 10 Pixel zu breit und 10 Pixel zu lang angezeigt wird. Aber das eigentliche Canvas hat weiterhin die richtige Größe, aber das krieg ich auch noch gelöst. =)
Lange Rede kurzer Sinn. Danke für die Hilfe. Und an alle leidgeplagten, die den Fehler hatten. Zieht euch die neuste Version, dann sollte er weg sein (und diesmal hoffentlich wirklich komplett für immer  ).

Ich entschuldige mich nochmal für die Probleme, die das Programm bei einigen verursacht hatte.

Auf einen fairen Wettbewerb nun. Morgen habe ich ein Interview mit der Volksstimme *freu*


----------



## Xams (15. Apr 2009)

Volksstimme = Bild? Hoffentlich gibts nicht so viele Gegner 
Bewegen sich die Spieler mit Ball eigenltich langsamer als ohne?
Mit den Preisen würde ich vorschlagen, dass sich zuerst der Sieger etwas aussuchen kann, dann der zweite, dann der dritte... Wenn man es festlegt, wäre es z.B für den Sieger mies, wenn er z.B die Wii bekommt, obwohl er 50 ist und stattdessen unbedingt dieses SUN Teil da haben will( das hört sich aber sehr interressant an das Teil)


----------



## Xams (15. Apr 2009)

ach so, die neue Version geht perfekt. Bei mir steht nichts über. *daumen hoch*
Wo gibt es eigentlich FreeTTS auf Deutsch?


----------



## Apo (15. Apr 2009)

Die Volksstimme ist nicht die Bild. Sie wird hier nur in der Region von vielen gelesen. Ich erhoffe mir einfach ein paar Teilnehmer. Ein externer Wettbewerb mit nur 3 Teilnehmern wäre traurig. =)

Das mit den Preisen hatte ich mir auch schon so in der Art überlegt. Aber für den externen Wettbewerb müsste man das per E-Mail oder so klären. Da vielleicht nicht jeder zur Auswertung in die schöne Landeshauptstadt Magdeburg kommen kann. Komplett fest steht es auf jeden Fall nicht.

Da es im Spiel kein richtiges "Führen" des Balles gibt, gibt es eine andere Beschränkung. Wenn man mit dem Ball "kollidiert", dann sinkt die Geschwindigkeit auf eine bestimmt Konstante. Das heisst wenn man nur gegen den Ball läuft, ist man nicht so schnell als wenn man ihn immer leicht vorraus schiesst. =)

Eine deutsche Stimme für freeTTS gibt es, kostet aber Geld. Und das wollte ich mir nicht leisten. Es ist die kostenlose englische Stimme dabei.


----------



## Apo (17. Apr 2009)

Hi,

leider muss ich sagen, es gab noch einen Bug im Programm. Auf der Gästeseite bekam man die falschen Werte für die Gegner übergeben. Dies ist in der neusten Version 1.03 behoben. Wenn euch die generischen Werte interessieren, dann ladet bitte die neuste Version herunter.
Sorry wieder mal für die Umstände. =)


----------



## Steev (17. Apr 2009)

Kein Problem, es gibt kaum ein komplexeres Programm, das nach dem release vollständig fehlerfrei ist.

PS: Wie war das Interview?


----------



## Xams (21. Apr 2009)

Hi Apo 
Schreib mir doch mal eine PN bitte zurück.
Ich hab ein paar Fragen, ob meine Ideen regelgerecht sind...


----------



## Apo (21. Apr 2009)

Frage ist beantwortet und nun gibt es wieder eine neue Version on. Nun könnt ihr bei euren Spielern auch abfragen wieviele Tore die Mannschaft schon geschossen hat.
Wie immer downloadbar auf der Website. =)


----------



## Xams (21. Apr 2009)

> Was gibt getGoals() denn zurück?
> 
> MFG



Hi,

du kannst nur von jedem Spieler getGoals() aufrufen. Und der gehört zu einem Team. Das heisst egal ob du vom Verteidiger oder Stürmer die getGoals()Methode aufrufst du bekommst immer die gleiche Zahl zurück. 

Also wenn ich den Spielstand haben will, muss ich bei einem von meinem Spieler getGoals aufrufen und bei einem Gegner. Welcher Spieler ist aber egal? Oder muss ich noch zusammenzählen?

(ich habs mal hier rein geschreiben, das interressiert ja auch andere)

MfG


----------



## Apo (21. Apr 2009)

Ist egal von welchem Spieler du das getGoals() ausrufst, du bekommst immer die Tore der Mannschaft.
Bsp: es steht 2 zu 3, dann ist es egal welchen Spieler du von der Heimmannschaft befragst du bekommst immer 2 zurück =)

€dit: Nun gibt es wieder eine neue Version. Es gab einen Bug und zwar konnte man den Gegner in die eigenen Spieler umwandeln und sie somit manipulieren. Auf die Idee bin ich gar nicht gegekommen. Nun kann man nicht mehr fröhlich hin udn hercasten. Versucht man das nun bekommt man eine ClassCastException und verliert das Spiel sofort mit 10 zu 0 =)


----------



## Apo (24. Apr 2009)

Heute gibt es wieder eine neue Version.
Gestern fragte mich jemand, ob man das Spiel nicht verlangsamen kann zu Debugzwecken. Zwar konnte man auf den Pausebutton drücken und dann mit jedem Mausklick einen Tick weiter gehen. Aber das ein Spiel durchzuhalten, war etwas schwer. Jetzt kann man, während Pause ist, einstellen, ob das Spiel normal, 10 mal oder 100 mal langsamer ablaufen soll, wenn man wieder auf den Pause Button geht. So erspart ihr euch die Klickarbeit.

Es ist wie immer ein Feature und verändert am eigentlichen Spiel nichts. Das heisst, ihr müsst es nicht ziehen, könnt es aber gerne tuen, wenn ihr das Feature nutzen möchtet. =)


----------



## Xams (29. Apr 2009)

Kann es sein, dass die drawCircle Methode nen Bug hat? Es ist eigentlich egal, was ich da als Wert übergebe, der Kreis bleibt immer gleich groß?


----------



## Apo (29. Apr 2009)

Naja ich hatte zu Testzwecken eine maximale Größe von 50 zugelassen. Daran könnte es liegen. =)
Bei kleineren Werten fkt es super.
Wenn du möchtest kann ich aber dieses Limit noch anheben


----------



## Xams (29. Apr 2009)

Das wär schön 
ich will damit meine Methode testen, mit der ich die Distanz berechne...

MFG


----------



## Apo (30. Apr 2009)

Nun ist Version 1.05 on.
Du kannst nun Kreise malen bis zu einer Größe von 1800 (was einer doppelten Feldllänge entspricht). Das müsste ausreichen. =)
Außerdem wurde noch ein klitzekleiner Darstellungsfehler bei der Vogelperspektive und der Kreisdarstellung behoben.


----------



## Xams (30. Apr 2009)

Danke schön...
Der Darstellungsfehler bei der Vogelperspektive ist mir auch aufgefallen.


----------



## Apo (5. Mai 2009)

Es gibt wieder eine neue Version.

Gestern im Tutorium fragte mich jemand, ob es möglich sei beim Replay vor- bzw. zurückzuspulen. Und ich erfülle doch gerne Wünsche. =)
Nun kann man das Replay pausieren, normal laufen lassen oder jeweils 2 bzw. 4-fach vor- bzw. zurückspulen. Für die Analyse von Spielsituationen und Fehlern sehr hilfreich wie ich finde. =)


----------



## Apo (18. Mai 2009)

Es gibt wieder eine neue Version:
Diesmal wurden Sachen im DebugFenster verbessert:
- Debug-Fenster und damit verbunden Debug-Textfeld größer
- Debug-Textfeld scrollt nun immer automatisch zum letzten Eintrag
- Exceptions erscheinen nun auch im Debug-Textfeld
- Sortierung der Ausgabe im Debug-Textfeld nun wie in der KI aufgerufen und nicht mehr nach Spielern sortiert

Wie immer verändert die neue Version nichts am eigentlichen Spiel, sondern fügt Wünsche einzelner Programmierer hinzu. Wenn ihr auch Wünsche habt, dann schreibt sie einfach. Ich versuche so viele wie möglich davon umzusetzen, wenn sie sinnvoll sind. =)


----------



## Apo (20. Mai 2009)

Heute gibt es wieder eine neue Version:

Ab jetzt düfrt ihr die Kamera nicht nur auf den Ball zentrieren, sondern auch auf einzelne Spieler. Dazu muss der DebugModus an sein. Danach einfach auf den Spieler eurer Wahl klicken und schon folgt die Kamera diesem Spieler.
AUßerdem seht ihr nur nicht dargestellte Spieler, als kleines Rechteck am Rand. Das gibt die Position des Spielers an. Je größer das Rechteck, desto weiter weg ist der Spieler. Klickt ihr auf dieses Rechteck, wird der Spieler mit der Kamera zentriert. Ist hilfreich beim Erstellen einer guter KI.

Beispielbild, je größer das Rechteck, desto weiter weg ist der Spieler. Die Farben stehen für die Mannschaften:





Wie immer gilt: Programm ist nur verbessert. Die alten KI's funktionieren weiterhin wie gehabt. =)


----------



## Apo (23. Mai 2009)

Heute gibt es wieder ein kleines Update:

Es gab einen Bug in der kickOff-Methode zur Halbzeit. Dieser ist behoben worden. Ansonsten wurde nichts verändert.


Und dran denken in nicht mal einem Monat ist Abgabe. =) Ich freu mich schon!


----------



## Apo (27. Mai 2009)

So seit heute gibt es eine neue Version. Es wurden nur Kleinigkeiten verbessert.

Außerdem und das ist noch wichtiger: *Die Anmeldung ist online*


----------



## Apo (28. Mai 2009)

Hi,

ich bin es noch einmal.
Aufgrund vieler Anfragen und dem Buschfunk, dass viele Leute den Code decompilieren, habe ich mich dazu entschieden, den SourceCode für alle mit in die Jar Datei zu packen. Jetzt könnt ihr euch die Berechnungen des Balls und des Spielers anschauen und so hoffentlich eine noch stärkere KI erschaffen.
Dieser Schritt war notwenidig, weil die Leute, die den Code decompilieren, ansonsten einen Vorteil gegenüber den anderen Mitbewerbern hätten.


----------



## Xams (28. Mai 2009)

Danke für das Update, werde gleich mal rein schauen.


----------



## Apo (4. Jun 2009)

Heute gibt es wieder ein Update:

Die Berechnung der neuen Geschwindigkeit des Balls nach einem Schuss ist vereinfacht worden.
Auch wenn es wie ein relativ großer Einschnitt klingt, aber nun wird die von euch geplante Geschwindigkeit genommen und nur bei der Freshnessberechnung wird der eigene Speed und Blickwinkel mit betrachtet. Sodass jemand der schon 60 läuft und den Ball mit 65 vorschiessen will, weniger Freshnessabzug bekommt als jemand der steht und den Ball mit 65 schiessen will.
Es wurde mit den mitgelieferten KI's getestet und auch mit den 2 schon abgegebenen KI's und am Resultat hat sich nichts verändert. Die Platzierungen der Teams in einer Liga haben sich nicht verändert!!!
Trotzdem empfiehlt es sich, die neue Version zu ziehen.


----------



## Apo (15. Jun 2009)

Neue Version:

Die Spieler bekamen mit der getTimeElapsed()-Methode nicht immer die korrekte Zeit in ms wieder. Dieser Bug wurde entfernt.
Desweiteren Stop-Button im AnalyseFrame und getTimeInMinutes()-Methode beim Ball und Spieler hinzugefügt (Rückgabe der Zeit in Minuten).


Und denkt dran am *21.06.2009* ist Abgabetermin!!!


----------



## Apo (2. Jul 2009)

So heute war die Auswertung und Siegerehrung während der Vorlesung. Ich gratuliere allen Gewinnern.
Intern Wettbewerb Preise:
Erster Platz: Wii + Sportspiel + WiiFit
Zweiter Platz: 2 x iPod touch
Dritter Platz: 2 x gute Digitalkamera
Vierter Platz: 2 x Büchergutschein im Wert von jeweils 100 Euro

Externer Wettbewerb Preise:
SunSpotWorld, iPod nano

Ihr seht mitmachen hätte sich gelohnt 

Die Ergebnisse gibt es unter Wettbewerb .
Ich danke an alle die mitgemacht haben. =)


----------

