 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ThommyBee
Anmeldungsdatum: 30.03.2006 Beiträge: 14
|
Verfasst am: 07.07.2006, 10:48 Titel: Sortieren nach Größe |
|
|
Hi, ihr werdet euch vielleicht erinnern, dass ich vor einiger Zeit mal angefragt habe, wie ich ein Spielfeld hinbekomme.
Ich wollte einen Kampf mit rundenweisen Zügen auf einem Spielfeld ermöglichen.
So weit, so gut. Habe es sogar so weit, dass der Computergegner automatisch seinen Weg zum Spieler findet und auf ihn zugeht.
Das Problem ist jetzt: Wenn der Spieler mehrere Figuren kontrolliert, soll der Computergegner auf die Figur zugehen, die ihm am nächsten ist.
Entfernung ausrechnen, kein Problem, aber dann die richtige Reihenfolge finden, das ist der Punkt. Da ich immer noch nicht viel Ahnung habe, kam mir erst der Gedanke, es so zu machen:
Erst die Entfernungen ausrechnen lassen (Entfernung von Figur des Computers zu 1. Figur des Spielers ist entf1%, zu Figur 2 entf2% usw.), dann eine if-Abfrage:
IF entf1% < entf2% and entf1% < entf3% and.... THEN
(auf Spielfigur1 zubewegen)
ELSEIF entf2% < entf1% and entf2% < entf3%.... THEN
....
Aber ihr seht schon, dass das sehr umständlich ist und es doch bestimmt eine schönere Lösung gibt, die die Entfernungswerte sortiert.
Vielen Dank schon mal! |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 07.07.2006, 12:22 Titel: |
|
|
Hallo.
Du solltest die Entfernungen der Spielfiguren in ein Array speichern. Am besten wäre sogar, wenn du einen UDT (=TYPE) - Array für die Spielfiguren anlegen würdest.
Code: | TYPE Spielfigur
PosiX AS INTEGER
PosiY AS INTEGER
FigName AS STRING * 16
Entf AS INTEGER
END TYPE
DIM Spielfiguren(1 TO 8) AS Spielfigur
Spielfiguren(1).entf = ... |
Wenn du keinen Type verwenden willst, solltest du wie bereits gesagt wenigstens ein Array anlegen:
Code: | DIM Entf(1 TO 8) AS INTEGER 'Datenfeld für 8 Figuren, Nr. 1-8
'--- Werte festlegen ---
Entf(1)=321
Entf(2)=...
'--- Groesse des Datenfelds ermitteln ---
min%=LBOUND(Entf)
max%=UBOUND(Entf)
'--- Sortieren ---
k%=Entf(min%)
index%=min%
FOR i%=min%+1 TO max%
IF Entf(i%) < k% THEN
k%=Entf(i%)
index%=i%
END IF
NEXT i%
'--- Resultat ausgeben ---
FOR i%=min% TO max%
PRINT "Entfernung von Figur "; LTRIM$(STR$(i%)); ": "; LTRIM$(STR$(Entf(i%)));
IF index%=i% THEN
PRINT " <= kuerzeste Entfernung!!!"
ELSE
PRINT ""
END IF
NEXT i%
SLEEP: END |
Wenn mehrere Figuren die gleiche Entfernung haben, wird die mit dem kleinsten Index als kleinste (index%) ausgegeben. Der Code ist getestet und funktioniert.
Zum Thema: Artikel von dreael
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
ThommyBee
Anmeldungsdatum: 30.03.2006 Beiträge: 14
|
Verfasst am: 07.07.2006, 13:24 Titel: |
|
|
Oje...
Erst mal vielen Dank.
Wie schon gesagt, bin nicht besonders bewandert, und bei dieser Fülle wurde ich ganz schön erschlagen.
Das ist mir zu komplex, meine bisher geschriebenen Spielchen sind vom Code her eher simpel geschrieben.
Werde mal versuchen, dahinter zu kommen, was aber ganz schön haarig wird - ansonsten muss wohl die umständliche Methode herhalten. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|