# Kampfspiel - Gegner-KI schreiben "Wettbewerb"



## BRoll (14. Okt 2012)

Hallo ich bins mal wieder 

Also zurzeit arbeite ich wieder an meinem Dragonball Kampf Spiel weiter,
letztens direkt an der künstlichen Intelligenz des Computer Gegners.
Da ich schon öfters solche Steuerungen geschrieben habe wusste ich schon
wie ich es machen kann, jedoch würde es mich mal interessieren wie ihr 
sowas machen würdet.
Und dabei ist mir diese Idee gekommen:
Jeder der Zeit und Lust hat kann (relativ) einfach  eine eigene KI schreiben,
vorgefertigte Klasse für Schnittstellen gibt es schon.
Und dann kann man ja mal die KIs gegeneinander antreten lassen,
denke das wird ganz lustig- und natürlich auch selbst gegen diese antreten.

Ich werde dann jede geschriebene in das Spiel miteinbauen, 
als Feature und Auswahl bei Computerkämpfen, natürlich
wird dann der Autor dazu erwähnt.

Aufgelegt ist das alles auf mein Dragonball Spiel:


Spoiler









(noch nicht fertige) Website: DragonSMASHBallZ



Wer mal sehen will wie die Kämpfe ablaufen hier gibts Videos:
Video 1- Youtube
Video 2- Youtube

Die Steuerung des Kämpfers über die KI ist relativ einfach,
die KI Klasse hat diese generale Methode:


```
public int getMove(Fighter self,  Fighter enemy, Attack[] attacks)
    {    	
    	x1=self.getPos()[0];
    	y1=self.getPos()[1];
    	x2=enemy.getPos()[0];
    	y2=enemy.getPos()[1];   	
    	this.self=self;
    	this.enemy=enemy;
    	this.attacks=attacks;    	

    	playerAktion=0; 
           
             /*
              * Hier folgen dann die Berechnungen für die KI 
              */

    	return playerAktion;
    }
```

Gegeben sind der Kämpfer selber, der aniviserte Gegner und die derzeit aktiven
Angriffe.
- Rückgabe ist ein Integer, der die Aktion des Spielers bestimmt.

Dafür gibts dann diese Werte Tabelle:


```
final int NOTHING=0; // Nothing
	// Movement
	final int MOVE_RIGHT=1,MOVE_LEFT=2,MOVE_UP=3,MOVE_DOWN=4;
	final int FASTMOVE_RIGHT=5,FASTMOVE_LEFT=6,FASTMOVVE_UP=7,FASTMOVE_DOWN=8;
	final int BLOCK=17;
	// Attack
	final int ATTACK_STRAIGHT=9,ATTACK_UP=10,ATTACK_DOWN=11;
	// Energy
	final int LOAD_KI=15,LOAD_AURA=20;
	// Ki Attack
	final int ATTACK_KI=16,SPECIAL_ATTACK=19,ULTIMATE_ATTACK=18;
```

Zusätzlich werden von einer Superklasse (FighterKIMoves) Methoden
für Berechnungen bereits vorgegeben.
(zb. ob der Kämpfer genug Energie hat den Angriff x auszuführen)

Man kann aber auch von Grund auf alles komplett selber machen,
wenn man will.


Das wichtigste wäre erstmal zu schauen wie das Spielgeschehen
funktioniert, Attacken usw...


Ich weiß jetzt nicht was ihr von der Idee haltet,
aber kann ja sein dass es jemand gibt der Lust hat bei sowas mitzumachen 

Ich habe bereits fast alle Implementierungen dafür geschrieben,
jedoch warte ich jetzt erstmal auf Feedback,
bevor ich mir jetzt mit viel Aufwand da ein ganzes System aufbaue.


mfg BRoll


----------



## TimeIsTheKey (14. Okt 2012)

Ich persönlich habe momentan keine Zeit mitzumachen, aber ich wollte dir ein kleines Feedback geben. Erstmals Respekt, sieht sehr gut aus. Wieviel Zeit hast du investiert? Die Steuerung sieht aber zugegebenermassen ein bisschen schwammig aus.

Die Idee verschiedene AI's gegeneinander antreten zu lassen gibt es schon. Ich weiss nicht ob es dafür eine spezielle Bezeichnung gibt, aber bei der AI Challenge von Google wird der Gewinner mit den meisten Siegen ermittelt. Natürlich haben alle die gleichen Chancen und die gleiche Anzahl Kämpfe.


----------



## Marco13 (14. Okt 2012)

Ja, die Zeit ist immer so eine Sache. Aber... gibt's da dann irgendwo eine API-Doku dazu?


----------



## Apo (15. Okt 2012)

Die Videos sehen auf jeden Fall ganz spannend aus. Respekt für die Arbeit bisher. *thumbsup*

Das Duell mit den KI's reizt mich auch immer. Habe ich auch ein paar Mal versucht (ApoIcejump, ApoSoccer, ApoMario, ApoSkunkman etc), aber wenn die Leute nicht gezwungen werden oder durch schöne Preise gelockt, machen die wenigsten mit. So ist jedenfalls meine Erfahrung.

Aber um nicht zu negativ zu klingen, wünsche ich dir viel Erfolg und frage genau wie Marco nach der API-Doku.


----------



## BRoll (15. Okt 2012)

Ja ich wollte erstmal wissen ob da überhaupt jemand interesse hätte 

Ich schreib dafür jetzt extra nochmal eine vereinfachte Steuerungsklasse
die alle Grundmethoden für nötige Berechnungen vorgibt -
dann natürlich mit API-Doku. Im Moment hab ichs so ähnlich gemacht,
aber nocht nicht so ganz benutzerfreundlich.

Mit der investierten Zeit kann ich nicht genau sagen, ich hab das Projekt
vor ein paar Monaten angefangen, nach etwa 3 Wochen sahs dann so aus:
Java Dragonball Z Fighting Game - YouTube
(nur noch ein bisschen älter )

Ja und dann hatte ich in lezter Zeit wieder Lust und genügend Zeit da weiter
zu machen, und jetzt gehts grad hammer schnell voran  xD
Jeden Tag neue Features oder mehr Kämpfer.....
Und an der grafischen Darstellungsweise hab ich viel rumgetüfftelt,
weil mir vieles noch nicht so gefallen hat.

Wie meinst du dass die Steuerung schwammig aussieht?
Versteh ich nicht ganz :noe:


----------



## s4ke (15. Okt 2012)

Zuerst: Super Spiel.

Zum Thema KI-Fight: Aber bitte doch. Würde gerne mitmachen (wenn ich genug Zeit im Semester habe).


----------



## BRoll (21. Okt 2012)

So ich hab mal wieder ordentlich dran weitergemacht.

Dank nun eingebautem Multiplayer ist es auch möglich
mehrere KIs gleichzeitig gegeneinander antreten zu lassen-
aber seht selbst:
Multiplayer Video

Arbeite gerade dran das Lan/Online fähig zu bekommen-
dauert noch ein bisschen aber geht voran.

Am KI-System habe ich auch weitergearbeitet,
da sich aber im Moment noch viel ändert am Projekt
warte ich lieber bis mal eine Version 1.0 fertig ist -
dann könnt ihr hier loslegen mit KIs schreiben.

Ich meld mich wieder wenns was neues gibt 

mfg BRoll


----------



## Robokopp (26. Okt 2012)

Sieht auf jedenfall Klasse aus 
Es gab mal so was ähnliches, das hieß LemmingBallZ, hatte aber ziemliche Macken.
Deine Version sieht ziemlich stabil aus.


----------



## BRoll (28. Okt 2012)

@Robokopp:

Stimmt hab auch mal was von gehört, aber nie selber gespielt.

@DSBZ

War mal wieder am tüffteln:

New Features Video

Und ein bisschen Spaß muss auch sein:

Ultimate Battle 

Inwiefern dies alles die KI Steurung betreffen wird,
kann ich noch nicht genau sagen.
Der Einfachheits halber lassen wir mal Cyborgs außen vor,
da diese anders aufgebaut sind (Ki Laden hat andere Funktion).
Eingebaut wird noch das Transformieren, die Standard-KI weiß dann ob
sie sich transformieren kann und kann dann auch darauf hinarbeiten.
(als Taktik sozusagen)
So Special-Moves wie Körpertausch oder der Sonnenblitz haben
auch einen taktischen Einfluss, ob ich die KI aber so feinfühlig 
gestalte weiß ich noch nicht. 

Bei eigenen KIs kann mans natürlich auch selber entscheiden.


----------

