# ApoIcejump



## Guest (6. Dez 2007)

Hi,

letztes Jahr um diese Zeit, hatte ich als Tutor an der Uni die ehrenvolle Aufgabe, den "neuen" Studenten mit einfachen Aufgaben die Lust am Programmieren zu wecken. Unter anderem hatte ich TutorVolley als Aufgabe gestaltet. Das kam unter den Studenten sehr gut an, sodass die Uni wieder auf mich zugekommen ist und gefragt hat, ob ich nicht Lust habe dieses Semester (obwohl ich bei IBM grad im Praktikum bin), wieder einige Aufgaben zu stellen.
Lange Rede "kurzer" Sinn. Natürlich wollte ich und habe mir auch dieses Jahr etwas schönes einfallen lassen.

Es geht wieder darum eine KI zu schreiben und einen bestimmten vorgegebenen Spieler zu schlagen.
Der Download und weitere Hinweise für ApoIcejump findet ihr hier!

Jetzt meine Frage bzw Bitte an euch. Hat jemand Zeit und Lust es schon einmal zu versuchen. Damit ich gegebenenfalls noch Änderungen vollziehen kann, bevor ich es auf die Studenten loslasse.

Ich danke euch 


Eine kleine Frage habe ich aber auch noch ...
Im Applet kann ich irgendwie kein KeyListener hinzufügen. Er meckert nicht oder sonstwasirgendwas. Er ruft auch addKeyListener(this); auf ABER er reagiert trotzdem nicht auf die Tastenkommandos. Die Maus funktioniert wiederbar. Bloss hilft das nicht so richtig, wenn man den Spieler mit der eigentlich Tastatur steuert.
Ich habe das gleiche Prinzip wie bei meinem Spiel ApoHarry gemacht. Dort funktionert es wunderbar (falls es jemand probieren möchte, einfach auf den Link gehen und dann "7" drücken). Aber jetzt hier nicht. Und dadurch verstehe ich es nicht.

Ich habe mir mir folgende 2 kleine Klassen geschrieben, um das Applet zu starten:


```
public class ApoApplet extends JApplet {

	private static final long serialVersionUID = 1L;

	private JComponent currentComponent;
	
	private ApoComponent component;
	
	public static ApoApplet main;
	
	private int width, height;
	
	public ApoApplet( int width, int height ) {
		super();
		this.width = width;
		this.height = height;
	}

	public void init() {
		main = this;
		
		ApoConstants.B_APPLET = true;
		
		this.setSize( this.width, this.height );
	}
	
	public void destroy() {
		this.component = null;
		this.currentComponent = null;
		System.gc();
	}
	
	/**
	 *	entfernt die jetztige JComponent und schaltet auf das übergebene JComponent Objekt
	 */
	public void setComponent( ApoComponent component )
	{
		if ( this.component != null ) {
			this.component.stop();
		}
		this.currentComponent	= (JComponent)this.getContentPane();
		this.currentComponent.setPreferredSize(new Dimension(component.getWidth(),component.getHeight()));
		this.component = component;
		this.currentComponent.add( this.component );
		this.component.init();
		this.component.start();
		System.gc();
	}
	
}
```


```
public class ApoIcejumpApplet extends ApoApplet {

	private static final long serialVersionUID = 1L;
	
	private ApoIcejumpGame game;

	public ApoIcejumpApplet() {
		this( ApoIcejumpConstants.GAME_WIDTH, ApoIcejumpConstants.GAME_HEIGHT );
	}
	
	public ApoIcejumpApplet(int width, int height) {
		super(width, height);
	}
	
	public static void main( String[] args ) {
		new ApoIcejumpApplet();
	}
	
	public void init() {
		this.game = new ApoIcejumpGame( true, true );
		this.game.setSize( ApoIcejumpConstants.GAME_WIDTH, ApoIcejumpConstants.GAME_HEIGHT );
		
		super.init();
		
		super.setComponent( this.game );
	}

}
```

Der dazu interessant Teil der ApoComponent ist:

```
public void start()
	{
		if ( ( this.timer == null ) && ( this.bTimer ) )
		{
			this.setBThink( true );
			
			this.timer = new ApoTimer( this, WAIT_TIME );
			this.timer.start();
		}
		if ( this.bMouse ) {
			this.addMouseListener( this );
			this.addMouseMotionListener( this );
			this.addMouseWheelListener( this );
		}
		if ( this.bKey ) {
			if ( !ApoConstants.B_APPLET ) {
				ApoMain.main.addKeyListener( this );
			} else {
				ApoApplet.main.addKeyListener( this );
			}
		}
	}
```

Wie gesagt er added sowohl Mouse als auch den KeyListener ... bloss nur der MouseListener funktioniert und ich weiß beim besten Willen nicht warum.


----------



## Guest (6. Dez 2007)

Huch, das war natürlich mein Beitrag. Hatte vergessen mich anzumelden. Als grad ich ein paar Sachen editieren wollte, hab ich bemerkt, dass was nicht stimmt ...
Freu mich trotzdem über Hilfe


----------



## Apo (6. Dez 2007)

Letzter Versuch für heute.  :x 
Sorry für den "Tripplepost".


----------



## Quaxli (6. Dez 2007)

Cooles Game.


----------



## Apo (9. Dez 2007)

Hi,

keiner eine Idee wie ich das Applet-Keylistener-Mouselistener Problem in den Griff bekommen könnte?


----------



## Neolity (9. Dez 2007)

Welches Semester sind die Studenten denn und was für eine Veranstaltung ist das? Ich bin im ersten Semester und wäre froh, wenn ich solche Aufgaben hätte... Bei uns sind eher so kleine Beispiele angesagt als wirkliche Programme bei denen auch etwas rauskommt.


----------



## Apo (10. Dez 2007)

Es ist für die Erstsemestler in der Vorlesung AuD (Algorithmen und Datenstrukturen).
Die Tutorien sind sonst auch eher so "Standard" wie: Lese eine Datei ein, erstelle eine Klasse Student mit folgenden Attributen ...., ordne sie mit Bubble Sort und Quicksort und erkläre daran, ob der Sortierungsalgorithmus stabil ist oder nicht. (um mal ein Beispiel für eine Tutoraufgabe zu nennen)
Da wir Tutoren aber auch Vorschläge geben dürfen ... kam ich halt auf die Idee mit dem kleinen Spiel. Hätte mir damals auch mehr Spaß gemacht. 

Möchte nicht jemand versuchen eine KI zu schreiben und sie dann hochzuladen bzw. mir dann schicken? (dauert auch nicht wirklich so lange  ) Und falls sie gut ist, dann könnte ich sie als Zusatzaufgabe mit einbauen. Schlagt nicht Apo, sondern eure KI dann (mit Credtis natürlich) 

Kann mir niemand bei dem Applet Problem helfen?   (Der SourceCode ist auch beim Download dabei ...)


----------



## EgonOlsen (10. Dez 2007)

Apo hat gesagt.:
			
		

> Kann mir niemand bei dem Applet Problem helfen?   (Der SourceCode ist auch beim Download dabei ...)


Nur ein Schuss ins Blaue und ohne den Code wirklich beguckt zu haben, aber hast du mal mit den Threadprioritäten gespielt (z.B. dem Spielthread mal eine niedrigere Prio geben)? Ich hatte früher ab und an das Problem, dass Tastendrücke nicht ausgewertet wurden, weil der Event-Thread scheinbar einfach keine Zeit dafür hatte.


----------



## trazzag (10. Dez 2007)

Hey Apo!

Ich hab' mir gerade mal den Spaß gegönnt und eine kleine KI geschrieben, die alle von dir mitgelieferten Spieler schlägt (in 9 von 10 Spielen).

Der Trick an der Sache ist einfach: den eigenen Spieler über den Gegner bewegen und sobald er dort ist, ihn weiter über dem Gegner halten.
Mein Code funktioniert leider nicht mehr, wenn ich meine KI gegen sich selbst antreten lasse ;-).

Bezüglich des Applet-Problems kann ich dir leider nicht helfen.
KI kommt gleich per Mail.


----------



## Apo (10. Dez 2007)

Erst einmal Danke. 
Du hast Recht. Gegen Easy schlägt er ihn eigentlich immer. Außer wenn er gleich ins Wasser fällt. 
Aber gegen "Apo" verliert er leider meistens.  Ich habe gerade 21 Runden spielen lassen und Apo hat 15 zu 6 gewonnen. (Ich habe doch 3 Spieler (easy, Middle und Apo) mitgeliefert)
Und "schlagt den Apo" war die Zusatzaufgabe. Also ein bisschen müsste er noch gepimpt werden, der "trazzag", damit ich ihn als offizielle Zusatzaufgabe mit reinnehmen kann. 

Meinen gepimpten "MasterApo" (den ich selber irgendwie nicht mehr schlagen kann) gibt es erst beim Tunier (bzw. falls es zu einem Tunier kommt (Ich hoffe es ja  ).


Das mit den Thread-Prioritäten teste ich gleich, wenn ich zu Hause bin. Danke für die Idee.


----------



## trazzag (10. Dez 2007)

hm... hatte ihn nur drei mal gegen Apo spielen lassen und alle drei mal mit Sieg - war wohl nicht häufig genug ;-).

Ja, die ins Wasser-Spring Problematik habe ich gerade auch gesehen (und das Problem in meinem Source entdeckt).
Werd mich da (wahrsch. erst die Tage) nochmal ransetzen, sobald ich ein wenig Zeit habe.


----------



## trazzag (10. Dez 2007)

So, hab doch nochmal ein wenig Zeit gefunden .

Mein neuer "Trazzag" ist deinem Apo jetzt zumindest ebenbürtig und fällt auch nicht mehr einfach so ins Wasser.
Meine 20 Testspiele gerade ergaben ein 12 : 8 für "Trazzag".

Ich schick ihn dir dann gleich mal zu .


----------



## Apo (11. Dez 2007)

So habe nun das Spiel noch ein wenig ergänzt. Man kann nun ein Stringarray noch zurückgeben, um den Gegner ab und zu zu "erniedrigen". Außerdem ist man nun "langsamer" wenn man über dem anderen ist. Somit kann man immer entkommen, wenn man möchte (und man immer in eine Richtung geht). Dadurch sind noch andere Taktiken gefragt 
Auch sonst ist das Programm an 1 bis 2 Stellen umgeschrieben worden. Der Spieler von trazzag funktioniert natürlich trotzdem noch und wurde gleich mal mit eingebaut.

Das mit der Thread Priorität habe ich versucht, aber irgendwie verändert das nichts ... leider. Das Applet ist nun noch das enzige was noch fehlt. Dann bin ich mal zufrieden mit einem Projekt 
Aber bis dahin ...


----------



## masta // thomas (11. Dez 2007)

Ich liebe deine Games 
Wenn ich nach dem Semester wieder Zeit hab, werd ich auch eine KI schreiben


----------



## Templon (11. Dez 2007)

Werde vielleicht auch noch eine schreiben 

Was man noch ein bauen könnte für Duelle wäre, dass man angeben kann wie viele Runden gespielt wird, und dann kann man einstellen wie schnell die Speiele laufen. Um schnell an Resultate zwischen den AI's zu kommen. Und am Schluss sieht man das Resultat.

Mfg Templon


----------



## Apo (11. Dez 2007)

Das habe ich gestern auch schon gemacht, weil ich es leid war, mir es immer bis zum Schluss anschauen zu müssen (und ohne Ausgabe und Wartezeiten geht es auch viel schneller) *g* 
Wusste nicht, dass das auch andere nutzen würden. Kann ich online stellen, wenn ich zu Hause bin.

Hab auch an eine Art Replay gedacht (wo nur die Anfangspositionen gespeichert werden und welche KI's mitspielen). Vorteil: Dadurch bleiben die Replays sehr klein. Nachteil: Man braucht die KI's und die sollten kein Zufall drin haben *g*. Aber diese sind ja auch nicht sehr groß.
Könnte man dann auch als Applet online stellen, wo jeder sehen kann wie man spielt gegen andere KI's. Das lohnt sich aber erst wenn wirklich 5 bis 10 KI's da sind. *zwinker* *g*

€dit: YES YES YES: Nun funktioniert auch das Applet (mit Maus und Tasten  ). Lade es nachher gleich mal hoch auf die Seite.  

€dit²: Applet funktioniert zwar aber leider kann ich noch keine Klassen von einer URL laden. Da muss ich noch ein bissl "rumfrimmeln". Habe aber das Spiel wieder etwas verbessert (wieder nur Kleinigkeiten). Jetzt müsste es wirklich langsam fertig sein. Das Tool zum Testen der Klassen schreibe ich grad noch um und werd es dann on stellen.


----------



## der JoJo (14. Dez 2007)

moin, hab jetzt auch mal schnell ne KI gebaut, ich habe aber mal durch meine klasse debugt, und festgestellt, das indem Array iwie nicht alle Böcke stehen, und diese außerdem nicht richtig sortiert sind???

naja, macht nichts.

Noch während ich dabei wahr die KI zu entwickeln hab ich es (frag mich nicht wie) geschaft, das meine unfertige KI alle gegner problemlos schlägt ? Iwas ist an der unfertigen KI so falsch, das es schon wieder gut ist.

also beat this: 
http://www.file-upload.net/download-556137/JoJo.class.html


----------



## Apo (16. Dez 2007)

Hi JoJo. Vielen Dank für die KI und vor allem für die Fehler  

OMG ... what a mistake ...
danke fürs Testen. Jetzt bekommt man immer alle Blöcke (hatte vergessen welche hinzuzufügen   ), ein bis 2 Änderungen sind noch mit eingebaut (die aber keine Auswirkungen auf die KI's haben  )
Als neues Feature gibt es nun auch ein Replay. Bzw sollte es geben.
Man kann im Menu auf Replay gehen. Dann die Rundenanzahl einstellen und auf Start drücken. Dann rechnet er die Spiele aus. Ich wollte die Replays auch speichern, aber irgendwie macht er bei der Wiedergabe der Replays nur ****.
Manchmal funktioniert es und manchmal nicht. Ich bin mir aber recht sicher, um nicht zu sagen SEHR sicher, dass er beim Ausrechnen der Replays keiner Fehler macht. Nur scheinbar noch beim Speichern bzw bei der Wiedergabe. Ich hoffe das bekomme ich noch in den Griff.

Ob die "unfertige" JoJo KI so gut ist, kann ich nicht sagen. Der Apo, der dabei ist, hat mich 20 Minuten gekostet. Den MasterApo gibt es auch erst später im Tunier.  (ob der dann wirklich gut ist, wird sich zeigen  )

€dit: Habe JoJo mal ein bissl getestet. Also viele Runden spielen lassen. Sowohl im Replay als auch so. Und so unschlagbar ist er auch nicht. Wenn erstmal Apo z.B. drüber ist, dann schafft es Apo


----------



## der JoJo (17. Dez 2007)

alles klar, jetzt kann ich weiter entwickeln.  

grml* seit dem in dem array die richtigen werte drine stehen verliert der JoJo immer 

da muss ich mal noch was machen


----------



## CyD (17. Dez 2007)

:applaus: Respekt an Apo  :applaus: 

Kleines nett gemachtes Spiel mit Suchtpotential!
Bei mir steht es jetzt vor Moorhuhn und IcyTower!

Ist vielleicht noch eine Netzwerkvariante geplant?


lg
CyD


----------



## Braini (22. Dez 2007)

Ich bin einer der Erstsemestler, die sich dieser netten Aufgabe annehmen dürfen und ich bin auch schon fleißig dabei. Nu wollt ich mit den Bewegungsvektoren der Eisblöcke arbeiten, aber da kam nur Mist bei raus. Hab mir die also mal ausgeben lassen und hatte das Gefühl, dass die nicht ganz stimmen. Könnte man da vielleicht nochmal drübergucken? Brauch die Vektoren nämlich.
btw: geiles Game


----------



## Apo (22. Dez 2007)

Oh next mistake  :shock: 

Habe ihn gleich mal entfernt. Man hat immer nur die Geschwindigkeit bekommen, wenn der Spieler sie nicht angeschubst hat. Wurde jetzt verbessert. Jetzt bekommt man immer die korrekte Geschwindigkeit.
Da sieht man wieder, dass meine Spieler diese Features einfach gar nicht nutzen  :lol: 
€dit: next mistake   ... früher konnte man sich nach links beamen ... jetzt nicht mehr jetzt wird das abgefangen.
Wenn noch weitere Fehler gefunden werden, immer her damit (Ich hoffe es gibt nicht mehr zu viele ...).

Zu der Idee mit der Netzwerkversion. Bin derzeit eher abgeneigt, weil ich sowas noch nie gemacht habe. Wenn ich mal zu viel Zeit habe, dann werde ich es aber mal versuchen.


----------



## Apo (21. Jul 2008)

Nach langer Zeit ist auch die Auswertung des kleinen Tuniers nun online (wie immer hier unter ApoIcejump -> Tunier)
Falls jemand einen Spieler des Tuniers haben möchte, der sollte hier einfach schreiben oder mir eine E-Mail schicken.
Gegen die Topspieler hat man als Mensch kaum noch eine Chance. 



Wenn jemand Zeit und Lust hat, mir bei meinem neunen Projekt (screenshot 1, screenshot 2, screenshot 3) zu helfen, indem er eine KI schreibt, dann würde ich mich sehr freuen. Auch andere "Arbeiten" wie die Gestaltung Menus, den Live-Ticker usw. sind noch zu vergeben, falls jemand Lust dazu verspührt. 
Es wird wieder ein großer Programmierwettbewerb an einer Universität.


----------



## Siassei (22. Jul 2008)

Apo hat gesagt.:
			
		

> Nach langer Zeit ist auch die Auswertung des kleinen Tuniers nun online (wie immer hier unter ApoIcejump -> Tunier)
> Falls jemand einen Spieler des Tuniers haben möchte, der sollte hier einfach schreiben oder mir eine E-Mail schicken.
> Gegen die Topspieler hat man als Mensch kaum noch eine Chance.
> 
> ...


Hallo,

eine KI fürs Fussballfeld :? Das ist mal ne echte Herausforderung. Leider weiß ich nicht wie es bei mir in den nächsten Monaten im privaten Bereich aussieht, aber vielleicht kann ich die eine oder andere Stunde investieren :wink: Schon aus persönlichen Interssen wegen. Schick mir einfach mal die Anbindungsinformationen für die KI per Mail oder PM.


----------

