 |
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 |
nitron
Anmeldungsdatum: 18.12.2005 Beiträge: 6
|
Verfasst am: 18.12.2005, 14:37 Titel: ASCII RPG -> KOLLISIONSABFRAGE HELP!!!! |
|
|
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
 |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 18.12.2005, 14:54 Titel: |
|
|
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 |
|
 |
Thomas Antoni

Anmeldungsdatum: 12.10.2004 Beiträge: 220 Wohnort: Erlangen
|
Verfasst am: 18.12.2005, 16:25 Titel: Dazu habe ich mir Folgendes für die MonsterFAQ vorgemerkt... |
|
|
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 |
|
 |
nitron
Anmeldungsdatum: 18.12.2005 Beiträge: 6
|
Verfasst am: 18.12.2005, 16:49 Titel: ein txt file lesen und jedes zeichen in ein array speichern |
|
|
danke für die antworten   
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
 |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 18.12.2005, 16:59 Titel: |
|
|
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.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
nitron
Anmeldungsdatum: 18.12.2005 Beiträge: 6
|
Verfasst am: 18.12.2005, 17:21 Titel: .. |
|
|
danke @sebastian für das zeilenweise einlesen programm
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 danke schön |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
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.
|
|