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:

Problem mit ASCII Wand

 
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
WinterStorm



Anmeldungsdatum: 14.11.2005
Beiträge: 198
Wohnort: Linz

BeitragVerfasst am: 15.06.2006, 17:11    Titel: Problem mit ASCII Wand Antworten mit Zitat

moin,

also ich habe folgendes problem:

ich möchte ein spiel proggen,
bei dem man mit einem ascii smiley herumlaufen kann.
natürlich soll es auch wände geben, in die man nicht hineinlaufen darf.
bis jetzt hab ich alles schon, also fast. mein problem ist, dass
ich bei einer wand immer nur von einer seite gestoppt werde.
achwas, schaut euch einfach mal den code an:

Code:

CLS
SCREEN 9
SCREEN 0

x = 1
y = 1


'WAND
 
  LOCATE 9, 33
   COLOR 8, 7
    PRINT "²"


'SCHLEIFE
DO

LOCATE x, y
 COLOR 14, 0
  PRINT CHR$(1)

DO: t$ = INKEY$: LOOP UNTIL t$ <> ""

  LOCATE x, y
   PRINT " "

SELECT CASE RIGHT$(t$, 1)
  CASE "H": x = x - 1: schri% = schri% - 1
  CASE "K": y = y - 1: schri% = schri% - 1
  CASE "M": y = y + 1: schri% = schri% - 1
  CASE "P": x = x + 1: schri% = schri% - 1
  CASE CHR$(27): END
END SELECT

'Bediengungen

   IF x = 9 AND y = 33 THEN x = 8: y = 33

'

LOOP



in diesem fall bleibt der smiley nur stehen, wenn ich von oben komme.

danke schon mal für alle antworten.

mfg
WinterStorm
_________________
Me
lastfm...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

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

Hallo

Der Fehler ist der, dass du den Smilie immer auf die gleiche x-y-Position zurücksetzt wenn er die Wand berührt, egal aus welcher Richtung er kommt. Übrigens wird bei LOCATE zuerst die Zeile dann die Spalte angegeben, x und y sind bei dir also vertauscht wenn man es genau nimmt. Du musst also prüfen, ob das Zielfeld frei ist bevor du die Spielfigur dorthin verschiebst.

Mit der SCREEN-Funktion (nicht Anweisung!) kannst du übrigens prüfen welches Zeichen an einer bestimmten Bildschirmposition angezeigt wird. Wenn du das benutzt, brauchst du nicht die Koordinaten aller Wandelement in der Schleife einzeln durchzuprüfen.

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
WinterStorm



Anmeldungsdatum: 14.11.2005
Beiträge: 198
Wohnort: Linz

BeitragVerfasst am: 15.06.2006, 17:38    Titel: Antworten mit Zitat

ok, danke für die antwort.

dass x und y bei mir vertauscht sind weiß ich, bin allerdings im moment zu
faul um es zu ändern grinsen

die screen funktion kenne ich leider nicht, da ich noch ziemlicher anfänger bin. ich dachte eigentlich eher an eine leichtere lösung,
etwas in der art wie:

Code:

IF x = 8 AND y = 33 AND INKEY$ = CHR$(0) + "P" THEN x = 9: y = 33


...und dann eben von jeder seite eine bediengung einbauen.
allerdings funzt das nicht, kp warum... oder kennt ihr vllt. noch eine andere leichte lösung?

mfg
_________________
Me
lastfm...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Manuel



Anmeldungsdatum: 23.10.2004
Beiträge: 1271
Wohnort: Bayern

BeitragVerfasst am: 15.06.2006, 17:50    Titel: Antworten mit Zitat

btw, wenn wir gerade beim Thema sind...

Ganz ehrlich, aber wenn du auf diese Weise versuchst, ein "etwas" komplexes Spiel zu erstellen, wirst du dir wohl früher oder später die Haare ausraufen lächeln . Stell dir vor, du möchtest sowas wie ein Labyrinth-Spiel machen... Da bräuchtest du eine Menge an IF-Zeilen. Wenn da ein Fehler dabei rauskommt, muss man an den Spruch "wer suchet, der findet" rechnen... zwinkern .

Ich empfehle dir, wenn du ein bisschen komplexere Spiele programmieren willst, dieses Tutorial. Da wird über den Verwendungszweck von sog. "Arrays" gesprochen... wenn du das durchhast, kannst du so ziemlich jedes 2D-Draufsicht-Spiel erstellen zwinkern .
_________________
DL Walk (Denkspiel) | DL Malek (Denkspiel) | DL Warrior (ASCII-Adventure) | DL Sokodos (Sokoban-Klon)
---
www.astorek.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 15.06.2006, 18:04    Titel: Antworten mit Zitat

So ist es viel einfacher zum Programmieren:
Code:
SCREEN 0
CLS

x = 1
y = 1


'WAND
 
  LOCATE 9, 33
   COLOR 8, 7
    PRINT "²"


'SCHLEIFE
DO

LOCATE x, y
 COLOR 14, 0
  PRINT CHR$(1)

DO: t$ = INKEY$: LOOP UNTIL t$ <> ""

  LOCATE x, y
   PRINT " "

dx = 0
dy = 0
SELECT CASE RIGHT$(t$, 1)
  CASE "H":
        dx = -1
        schri% = schri% - 1
  CASE "K":
        dy = -1
        schri% = schri% - 1
  CASE "M"
        dy = 1
        schri% = schri% - 1
  CASE "P":
        dx = 1
        schri% = schri% - 1
  CASE CHR$(27): END
END SELECT

'Bediengungen

   IF SCREEN(x + dx, y + dy) <> ASC("²") THEN
        x = x + dx
        y = y + dy
   END IF

'

LOOP

_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 15.06.2006, 18:14    Titel: Antworten mit Zitat

Hallo

Ich habe das Programm mal etwas umgeschrieben. Das mit der SCREEN-Funktion ist ganz einfach. Du gibst die Koordinaten an und erhälst den ASCII-Wert des Zeichens zurück, das dort steht. Der ist 178 für dein Wandsymbol das hier im Forum als ² angezeigt wird, anders als im QB-Editor. Zusätzlich kann man nun nicht mehr aus dem Bildschirm laufen.

Code:
'WAND
 
  LOCATE 9, 33
   COLOR 8, 7
    PRINT "²"


'SCHLEIFE
DO

LOCATE x, y
 COLOR 14, 0
  PRINT CHR$(1)

DO: t$ = INKEY$: LOOP UNTIL t$ <> ""

  LOCATE x, y
   PRINT " "
   xtest = x
   ytest = y

SELECT CASE RIGHT$(t$, 1)
  CASE "H": xtest = x - 1: schri% = schri% - 1
  CASE "K": ytest = y - 1: schri% = schri% - 1
  CASE "M": ytest = y + 1: schri% = schri% - 1
  CASE "P": xtest = x + 1: schri% = schri% - 1
  CASE CHR$(27): END
END SELECT

'Bedingungen

 IF xtest = 0 THEN xtest = 23
 IF xtest = 24 THEN xtest = 1
 IF ytest = 81 THEN ytest = 1
 IF ytest = 0 THEN ytest = 80

 IF SCREEN(xtest, ytest) <> 178 THEN x = xtest: y = ytest

LOOP


Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
WinterStorm



Anmeldungsdatum: 14.11.2005
Beiträge: 198
Wohnort: Linz

BeitragVerfasst am: 15.06.2006, 22:00    Titel: Antworten mit Zitat

danke für alle antworten,
jetzt funzt's.

[EDIT]
sorry, dass ich nochmal nachfrage, aber wie kann ich ein 2tes
"objekt" machen, das die gleichen eigenschaften hat, wie die mauer.
also das ich jetzt zb 178 und 177 als mauern habe?
[/EDIT]

mfg
WinterStorm
_________________
Me
lastfm...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 16.06.2006, 09:28    Titel: Antworten mit Zitat

So etwa:
Code:
SCREEN 0
CLS

x = 1
y = 1


'WAND
 
  LOCATE 9, 33
   COLOR 8, 7
    PRINT "²"

 LOCATE 8, 20
   COLOR 8, 7
    PRINT CHR$(177)


'SCHLEIFE
DO

LOCATE x, y
 COLOR 14, 0
  PRINT CHR$(1)

DO: t$ = INKEY$: LOOP UNTIL t$ <> ""

  LOCATE x, y
   PRINT " "

dx = 0
dy = 0
SELECT CASE RIGHT$(t$, 1)
  CASE "H":
        dx = -1
        schri% = schri% - 1
  CASE "K":
        dy = -1
        schri% = schri% - 1
  CASE "M"
        dy = 1
        schri% = schri% - 1
  CASE "P":
        dx = 1
        schri% = schri% - 1
  CASE CHR$(27): END
END SELECT

'Bediengungen

   IF SCREEN(x + dx, y + dy) <> 178 and SCREEN(x + dx, y + dy) <> 177 THEN
        x = x + dx
        y = y + dy
   END IF

'

LOOP

_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 16.06.2006, 11:55    Titel: Antworten mit Zitat

Hallo

Du könntest es auch so machen, das er sich grundsätzlich nur auf leere Felder bewegt. Übertragen auf mein Beispiel sähe das so aus:

Code:
...
IF SCREEN(xtest, ytest) = 32 THEN x = xtest: y = ytest
...


Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
WinterStorm



Anmeldungsdatum: 14.11.2005
Beiträge: 198
Wohnort: Linz

BeitragVerfasst am: 16.06.2006, 17:41    Titel: Antworten mit Zitat

moin,

danke für alles,
ich denke jetzt hab ich alles was ich im moment
benötige, wenn ich was brauch meld ich mich, und wenns
fertig is dann könnt ihrs unter projektvorstellungen bewundern^^...

mfg
_________________
Me
lastfm...
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 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