Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Sortieren nach Größe

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ThommyBee



Anmeldungsdatum: 30.03.2006
Beiträge: 14

BeitragVerfasst am: 07.07.2006, 10:48    Titel: Sortieren nach Größe Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 07.07.2006, 12:22    Titel: Antworten mit Zitat

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. lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ThommyBee



Anmeldungsdatum: 30.03.2006
Beiträge: 14

BeitragVerfasst am: 07.07.2006, 13:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz