# Zum Ziel bewegen



## Krypthor (6. Jan 2012)

Hi,

ich bin dabei ein kleines Strategiespiel zu entwickeln und jetzt hab ich mich gefragt wie man
eine Armee zu einem Zielpunkt bewegt.
Dabei ist das Fadenkreuz der "Spieler" und wenn man auf einem bestimmten Feld eine Taste drückt, soll sich die Armee (oder was anderes) zum Fadenkreuz bewegen, wie eine Schachfigur. 
Ich weis leider nicht wie man das so macht, dass sich die Armee Feld für Feld bewegt und auch Hindernisse umgeht. 

Kann mir vielleicht jemand einen Tipp geben?

Vielen Dank schonmal für Hilfe,
Krypthor


----------



## Apo (6. Jan 2012)

Ist ein weites Feld ...

Wie hast du das Spielfeld bis jetzt abgespeichert? Kannst du es in ein Graphen umwandeln? hast du ein 2dimensionales Feld?
Auf jeden Fall die Keywords die du brauchen könntest ist entweder Dijkstra, mein Liebling A* oder best first search oder oder oder =)


----------



## schmitzi9000 (6. Jan 2012)

Ich nehme mal an, es geht um ein Realtime Game? 
Bei kleineren tilebasierten Maps in einer 2D Umgebung leistet der gute alte A* immer noch brauchbare Ergebnisse. A* skaliert aber schlecht und verbraucht schnell viel Speicher und Performance. 
Werden die Maps größer kannst du dir mal hierarchisches Pathfinding anschauen - Tiles werden zu Clustern zusammengefasst über die dann wieder der normale A* läuft.
In einer 3D Umgebung lautet das Stichwort Navigation meshes.

Bei dynamischen Echtzeitkollisionen wird es komplizierter. Da brauchst du Strategien, wie sich Einheiten verhalten sollen, wenn sie sich gegenseitig blockieren.


----------



## Krypthor (6. Jan 2012)

Das Spiel ist 2D und hat nur 10*10 Felder. Ist auch eher zum ausprobieren gedacht.
Das Prinzip soll so ähnlich funktionieren wie bei Warcraft.
Und was ihr mir geschickt habt sieht noch recht komplitziert aus, gibt es da vielleicht eine einfachere Methode die auch eher für Anfänger geignet ist? Z.B. das, wenn die Armee auf ein Hidnerniss stößt, sie sich um 90° nach rects dreht und dann versucht ein Feld weiter zu rücken, wenn das nicht klappt noch mal 90° usw., bis es irgendwann funktioniert?!


----------



## Krypthor (8. Jan 2012)

Ich hab mal ausprobiert es so zu machen :

```
if(laufen == true){
				if(pp1 != p1){
					if(pp1 > p1){
						pp1 = pp1 - 1;
					}else if(pp1 < p1){
						pp1 = pp1 + 1;
					}
				}
				if(pp2 != p2){
					if(pp2 > p2){
						pp2 = pp2 - 1;
					}else if(pp2 < p2){
						pp2 = pp2 + 1;
					}
				}
				if(pp1 == p1 && pp2 == p2){
					laufen = false;
				}
			}
```
Da wird abgefragt ob eine Taste fürs laufen gedrückt wurde, und wenn ja, dann wird immer geguckt ob die Koordinaten der Armee (pp1, pp2) gleich dem Spieler(p1, p2) sind.
Das Problem da ist, dass sobald die Armee noch über alle Hindernisse läuft, und auch noch dem Fadenkreuz hinterherläuft, wenn dieses nach Tastendruck noch bewegt wird.
Kann man das nicht auch noch mit if-else Bedingungen festlegen?


----------

