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:

allgemeine frage zu kollisionen

 
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
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 03.09.2008, 14:54    Titel: allgemeine frage zu kollisionen Antworten mit Zitat

Also in meinem SPiel habe ich das jetzt so dass nach jeder bewegung geprüft wird ob die koordinate auf der sich die spielfigur befindet begehbar ist. Wenn diese Koordinate nicht begehbar ist dann ist die Spielfigur wieder auf der vorherigen koordinate. ABer das ist etwas umständlich bei programmieren dieser orte, ich hab das jetzt in etwa so:

Code:

if koordinatex = 34 and koordinatey = 58 or koordinatex = 37 and koordinatey = 50 or und so weiter
then koordinatex =
koordinatey = alteykoordinate
end if


Man kann aber auch noch etwas vereinfachen aber nur wenn die punkte aneinander liegen:
code]
if koordinatex = 34 or koordinatex = 34 and koordinatey = 58
then koordinatex =
koordinatey = alteykoordinate
end if
[/code]

Aber bei schon wenn man 50 Koordinaten hat die nicht begehbar sind dann ist das schon doof genug aber ich habe noch mehr und frage euch deshalb nach einer anderen möglichkeit. Ich ahbe das bis jetzt mit einer case schleife gelößt aber das ist ja fast das selbe und immernoch viel arbeit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 03.09.2008, 15:10    Titel: Antworten mit Zitat

Ein Array anlegen, in dem gespeichert ist, was begehbar ist und was nicht (steht schon mal im Forum, bin jetzt zu faul zu suchen happy )

Code:
dim as byte feld(100, 100)
feld(34, 58) = 1 ' nicht begehbar
' ...
if feld(koordinatex, koordinatey) = 1 then geheWiederZurueck

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 03.09.2008, 15:18    Titel: Antworten mit Zitat

ich wusste nicht dass man kommas in die array nummer packen kann. Ich hab auch schon an Arrays gedacht aber mit der 2 koordinate kam ich dann nicht zurecht grinsen .


Auf jeden Fall erstmal Danke für die schnelle Hilfe!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 03.09.2008, 15:26    Titel: Antworten mit Zitat

Du packst keine Kommas in die Nummern, sondern es wird ein zweidimensionales Array-Feld erzeugt. lächeln
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 03.09.2008, 16:55    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Du packst keine Kommas in die Nummern, sondern es wird ein zweidimensionales Array-Feld erzeugt. lächeln

Klar, das habe ich schon in einem Tutorial gelesen aber ich hatte das nicht verstanden denn ich dachte es ging um den inhalt der variablen aber durch den beispiel habe ich es sofort verstnaden.

edit:
man kann das doch auch mit "to" in den arrays machen also so:
Code:
dim as byte koordinate(34 to 44 , 50) =1
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 03.09.2008, 17:09    Titel: Antworten mit Zitat

Nein, dieses TO bedeutet, dass du ein Feld anlegst, dessen Indizes von Startwert bis Zielwert gehen.
Code:
DIM as byte var(3 to 5)

jetzt existieren var(3), var(4) und var(5). Ein var(2) existiert z. B. nicht.

Die beiden Anweisungen
Code:
DIM as byte var1(5)
DIM as byte var2(0 to 5)

sind gleichbedeutend.

Wenn du eine Zuweisung über mehrere Einträge machen willst, kannst du zum Beispiel eine Schleife verwenden.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 03.09.2008, 17:29    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Nein, dieses TO bedeutet, dass du ein Feld anlegst, dessen Indizes von Startwert bis Zielwert gehen.
Code:
DIM as byte var(3 to 5)

jetzt existieren var(3), var(4) und var(5). Ein var(2) existiert z. B. nicht.

Die beiden Anweisungen
Code:
DIM as byte var1(5)
DIM as byte var2(0 to 5)

sind gleichbedeutend.

Wenn du eine Zuweisung über mehrere Einträge machen willst, kannst du zum Beispiel eine Schleife verwenden.

So meinte ich das auch aber ich war mir nicht ganz sicher.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 03.09.2008, 17:51    Titel: Antworten mit Zitat

Deine genannte Zuweisung
Code:
DIM AS BYTE koordinate(34 TO 44 , 50) =1

wird allerdings nicht funktionieren.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 03.09.2008, 18:26    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Deine genannte Zuweisung
Code:
DIM AS BYTE koordinate(34 TO 44 , 50) =1

wird allerdings nicht funktionieren.

Wenn ich das to und die 34 weglasse werden dann auch die arrays (43,50) und (22,50) "gedimt"?

SOnst probier ich das morgen einfach mal aus zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 03.09.2008, 18:47    Titel: Antworten mit Zitat

Ja genau, mit
Code:
DIM AS BYTE koordinate(44 , 50)

kannst du jetzt alle koordinate(x, y) verwenden, bei denen x eine Zahl von 0 bis 44 und y eine Zahl von 0 bis 50 ist. Also z. B. auch koordinate(22, 50) oder koordinate(13, 37) usw.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 03.09.2008, 21:41    Titel: Antworten mit Zitat

statt einem 2-dimensionalem array könntest du auch ein UDT nehmen:

Code:

type koordinaten_type
    x as integer
    y as integer
    typ as integer
    'usw...
end type

dim ko(1 to 50) as koordinaten_type
ko(1).x = 255
ko(1).y = 157
ko(30).typ = 1


damit könntest du den einzelnen feldern gleich zuweisen was für grafiken diese haben, was für auswirkungen sie bei berührung haben (z.b. level-ups o.ä,) ohne dafür zusätzliche arrays nehmen zu müssen.
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 03.09.2008, 21:59    Titel: Antworten mit Zitat

@the muh: Ich mach das lieber mit den Arrays weil ich mir das damit besser vorstellen kann, außerdem müsste ich dann ja auch mehr tippen. Aber ich dank dir trotzdem weil ich kann an praktischen beispiel am besten etwas lernen, ich habe dazu nämlich schon das Tutorial überflogen doch weil ich sowas noch nicht brauchte hab ich mir das nie genau angeguckt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 03.09.2008, 22:40    Titel: Antworten mit Zitat

@The_Muh: Ich sehe bei deiner Lösung in diesem Fall den Nachteil, dass ich bei einer Überprüfung, ob das betretene Feld erlaubt ist, erst alle ko() durchwühlen muss, ob eines zu meinen Koordinaten passt. Zu den level-ups: Auch diese passen noch bequem in das eine Array (einfach verschiedene Nummern vergeben, evtl. sogar - damit man sich die Zuweisung besser merken kann - entsprechende Konstanten festlegen). UDTs machen eher Sinn, wenn noch mehr Informationen einfließen, z. B. besondere Bodentypen UND verschiedene herumliegende Gegenstände UND Nebel des Krieges UND ...; aber auch da würde ich bei einem zweidimensionalen Array bleiben, das dann halt nicht vom Datentyp Zahl, sondern vom Datentyp MeinUDT ist. Es lässt sich einfach viel schneller abfragen, wo doch die Spielerposition sowieso schon zweidimensional vorliegt.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
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