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:

ASCII RPG -> KOLLISIONSABFRAGE HELP!!!!

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



Anmeldungsdatum: 18.12.2005
Beiträge: 6

BeitragVerfasst am: 18.12.2005, 14:37    Titel: ASCII RPG -> KOLLISIONSABFRAGE HELP!!!! Antworten mit Zitat

peinlich hilfe!
ich bin dabei ein ASCII rpg zu programmieren und habe probleme mit der kollisionsabfrage!

wenn auf dem bildschirm ein zeichen -sagen wir "#" steht, wie kann ich dann eine kollisions abfrage machen? also mein spieler steht immer auf " " und er soll reagieren wenn er auf ein "#" steigt (was am bildschirm steht steht allerdings in keinem string oder variablen, ich muss es direkt vom screen abfragen können!!) könnte mir bitte jemand zu dem pseudocode einen "echten" code schreiben?

IF das zeichen "#" = (meine Y position - 1) then
z.b. BEEP
END IF
mit dem Kopf durch die Mauer wollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 18.12.2005, 14:54    Titel: Antworten mit Zitat

Was du suchst, ist die Funcktion SCREEN(Zeile, Spalte). Sie liefert den ASCII-Code des sich an der Stelle
(Zeile|Spalte) befindlichen Zeichens auf dem Bildschirm zurück.

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 18.12.2005, 16:25    Titel: Dazu habe ich mir Folgendes für die MonsterFAQ vorgemerkt... Antworten mit Zitat

Dazu habe ich mir Folgendes für die QB-MonsterFAQ vorgemerkt...

--------------------------------------------------------------------------------

Frage deutsch
~~~~~~~~~~~~~~
Wie realisiere ich eine Kollisionserkennung ?
(Ergänzung der bestehenden Frage))


Kolisionserkennung ( Michel | 20:39:13 | 17.3.2004 )

Hi leute kann mir einer erklären wie dat mit der kolisionserkennung funkt?
Ich hab schon auf flipcode.com geschaut aber dort ist alles auf Englisch und ich
hab nichts gefunden? Ich möchte nämlich ein Labyrinth programmieren.

Question English
~~~~~~~~~~~~~~
How to ?


Antwort 1
~~~~~~~~~
[ von Marzec im QB-Forum, 18.3.2004 ]


also...

wenn Dein Punkt auf Position x, y ist, und Du ihn um einen Pixel nach rechts
verschiebst kriegst Du eine neue Koordinate heraus:

xneu = x + 1
yneu = y

jetzt testest Du die Hintergrundfarbe an den Koordinaten (xneu, yneu) falls die
besagt, das der Pixel nicht begehbar ist bleiben x und y so wie sie sind
andernfalls:

x = xneu
y = yneu

natürlich muß man auch noch andere Sachen in Betracht ziehen:

x = aktuelle Position
0 = neue position nach Bewegung
| = mauer

x|0 !!!

d.h. wenn Dein e ursprüngliche Position vor der Mauer und Dein e nächste Position
hinter der Mauer ist und Du nur die neue Position auf Kollision testest, wird
Dein Object natürlich durch die Mauer gehen. Eine Lösung wäre, alle Pixel zwischen
aktueller und nächster Position auf Kollision zu testen. Damit gewährleistest du,
dass Dein spieler nicht durch eine Mauer rennen kann..

hoffe das hat geholfen

mario


Antwort 2
~~~~~~~~~~~~
[ von Andreas Meile ( www.dreael.ch ) im QB-Forum, 6.6.05 ]

Es kommt immer darauf an, wie präzise die Kollisionsabfrage sein soll.

Die früheren Commodore-Rechner (C 64 und Amiga) hatten eine präzise Kollisionsabfrage in ihrer Video-Hardware implementiert, welche wirklich nur dann das Bit auf 1 setzte, wenn ein Pixel mit dem Hintergrund überlappte.

All dies fehlt natürlich beim PC, so dass man dies softwaremässig lösen muss. Für einfache Ansprüche genügt der Rechteckumriss-Koordinatenvergleich. Wenn es dagegen C 64-mässig ebenfalls präzise sein muss, so würde ich eine Art Kollisionsbitmap generieren: Unsichtbarer Bildbereich (z.B. nicht dargestellte Seite in SCREEN 7), wo jeder Pixel einem bestimmten relativen Abstand der beiden Sprites entspricht und entweder 0 oder 1 als Farbe besitzt => diese Bitmap als einmalige Initialisierung zu Beginn des Spiels berechnen. Tipp dazu: Sihouetten bilden, die eine Farbe 1 und die andere Farbe 2, beide jeweils mit XOR übereinanderPUTten und nach POINT(x,y)=3 im Überlappungsbereich suchen.

Im Spiel selber würde ich den Rechteckvergleich anwenden. Trifft dieser zu, so würde ich das zum relativen Abstand der beiden Sprites zugehörige Kollisionsbitmap-Pixel mit POINT() abfragen und entsprechend -1 (TRUE) oder 0 (FALSE) zurückgeben.

-------------------
_________________
+++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nitron



Anmeldungsdatum: 18.12.2005
Beiträge: 6

BeitragVerfasst am: 18.12.2005, 16:49    Titel: ein txt file lesen und jedes zeichen in ein array speichern Antworten mit Zitat

danke für die antworten grinsengrinsengrinsengrinsen
noch eine frage zu meinem ascii rpg:
ich habe eine datei "map.txt" und will jetz diese datei einlesen
das kann ich auch mit line input
aber was ich will, ist jedes zeichen in ein array map(i,j) schreiben damit ich
dann abfragen auf einzelne zeichen machen kann und soweiter..
ich hab das schon auf 1000 varianten versucht aber habs nicht geschafft bitte helft mir!!! danke grinsen


happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 18.12.2005, 16:59    Titel: Antworten mit Zitat

Hallo.

Wie wär's hiermit?

Code:
DECLARE SUB ErmittelGroesse(Datei$, Hoehe%, Breite%)

ErmittelGroesse "map.txt", h%, b%
ReDim Karte (1 to h%, 1 to b%) As String * 1

OPEN "map.txt" FOR INPUT AS #1
zeile%=1
DO UNTIL EOF(1)
 LINE INPUT #1, Z$
 FOR i%=1 TO b%
  Karte(zeile%, i%) = MID$(Z$, i%, 1)
 NEXT i%
 zeile%=zeile%+1
 IF EOF(1) THEN EXIT DO
LOOP
CLOSE #1

PRINT "Datei ist im Array (je nach Aussprache reimt's sich... lol)"
SLEEP: END

SUB ErmittelGroesse(Datei$, Hoehe%, Breite%)
OPEN Datei$ FOR INPUT AS #1
LINE INPUT #1, Z$
Breite%=LEN(Z$)
tmp%=1
DO UNTIL EOF(1)
 LINE INPUT #1, Z$
 tmp%=tmp%+1
 IF EOF(1) THEN EXIT DO
LOOP
CLOSE #1
Hoehe%=tmp%
END SUB

Hab den Code nur hier in der Forumseingabemaske geschrieben. Könnten also noch kleine Fehler drin sein. zwinkern

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
nitron



Anmeldungsdatum: 18.12.2005
Beiträge: 6

BeitragVerfasst am: 18.12.2005, 17:21    Titel: .. Antworten mit Zitat

danke @sebastian für das zeilenweise einlesen programm grinsen
ich hab jetz leider nur noch ein problem: ich kanns einlesen, aber ich schaffs nicht es zeichenweise auf den bildschirm zu schreiben weil immer ein "index ausserhalb des gültigen bereiches" kommt. das war nämlich schon gestern mein problem als ich es mit einem array versucht hab. es wäre wirklich total nett wenn du mir die schleife dazu aufschreiben könntest es sind ja nur ein paar zeilen happy danke schön
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 18.12.2005, 17:46    Titel: Antworten mit Zitat

Hallo.

Code:
FOR zeile%=1 TO h%
 FOR spalte%=1 TO b%
  LOCATE zeile%,spalte%: PRINT Karte(zeile%,spalte%)
 NEXT spalte%
NEXT zeile%


Viele Grüße!
Sebastian

PS: Dein Array sollte nicht größer sein als die verfügbare Fläche. Dann gibts nämlich auch Fehlermeldungen, wenn er rechts neben den Fensterrand schreiben soll... zwinkern
_________________

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
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. 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