 |
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 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 19.02.2008, 22:09 Titel: |
|
|
Aber wie weiß das Programm, wann und welche Zeile eingelesen werden muss? _________________ MfG
Seb |
|
Nach oben |
|
 |
raph ael
Anmeldungsdatum: 12.04.2006 Beiträge: 472
|
Verfasst am: 19.02.2008, 22:12 Titel: |
|
|
Warum willst du wissen wie das Programm funktioniert ?
Eine Ergänzung:
Wenn du die Daten von Anfang an wieder lesen willst, nimmst du
_________________
Zitat: | 1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein. |
Zuletzt bearbeitet von raph ael am 29.03.2008, 23:13, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4709 Wohnort: ~/
|
Verfasst am: 19.02.2008, 22:16 Titel: |
|
|
Habe meinen letzten Beitrag noch etwas erweitert (falls das untergegangen ist).
READ liest immer den nächsten Datensatz, einfach der Reihe nach. Wenn du den Datenzeiger woanders hinsetzen willst, musst du (wie raph ael ja gerade sagte) RESTORE nehmen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 19.02.2008, 22:22 Titel: |
|
|
Wie muss ich dann den Code in mein Programm einbauen?
Und wie kann man die Level unterscheiden?
Ich weiß jetzt nicht, wo was hinkommt und was ich dazumachen muss... _________________ MfG
Seb |
|
Nach oben |
|
 |
raph ael
Anmeldungsdatum: 12.04.2006 Beiträge: 472
|
Verfasst am: 19.02.2008, 22:27 Titel: |
|
|
Die DATA- Abschnitte packst du am besten am Ende des Programms (aber setze ein 'End' davor). Ist wie in ASM. Die Levels kannst du mit Labels unterscheiden (aber komm nicht auf die Idee ein GoTo zu verwenden )
Edit:
Siehe Restore |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4709 Wohnort: ~/
|
Verfasst am: 19.02.2008, 22:36 Titel: |
|
|
Zum Unterscheiden der Levels lies dir vielleicht erstmal die Befehlsreferenz zu RESTORE durch (und zu DATA und READ, falls noch nicht geschehen).
Zum Einbau in dein Programm:
Du kannst ja statt meiner Zahlen 1 und 0 erst einmal die bisherigen Werte 219 (Wand) und 32 (frei) nehmen, für das Ziel außerdem den ASCII-Code von "O" (bin zu faul, nachzusehen). Dann kannst du den größten Teil des Programms lassen und musst nur die Routine zum Level-einlesen neu schreiben:
Code: | DO
COLOR 14
FOR a = 1 TO 10
FOR b = 1 TO 10
READ feldnummer
LOCATE b, a
PRINT CHR$(feldnummer)
NEXT
NEXT
' der Rest des Programms
DO
Xpos% = -1
SELECT CASE INKEY$
' usw usf
LOOP UNTIL Xx% = 9 AND Xy% = 9
' und dann noch die Felddaten, im Augenblick 10x10 Stück pro Level
DATA [...] |
Das erst einmal für ein Level. Für mehrere Level kannst du das ganze nochmal in eine Schleife packen und mehr DATA-Zeilen einfügen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 19.02.2008, 22:48 Titel: |
|
|
So?:
Code: | DO
COLOR 14
FOR a = 1 TO 10
FOR b = 1 TO 10
READ 1 TO 10
LOCATE b, a
PRINT CHR$(219)
NEXT
NEXT
Xpos% = -1
SELECT CASE INKEY$
CASE CHR$(0) + CHR$(&H4B)
Xpos% = 0
CASE CHR$(0) + CHR$(&H4D)
Xpos% = 1
CASE CHR$(0) + CHR$(&H48)
Xpos% = 2
CASE CHR$(0) + CHR$(&H50)
Xpos% = 3
END SELECT
SELECT CASE Xpos%
CASE 0: Xx% = Xx% - 1
CASE 1: Xx% = Xx% + 1
CASE 2: Xy% = Xy% - 1
CASE 3: Xy% = Xy% + 1
END SELECT
IF Xx% < 1 THEN Xx% = 1
IF Xx% > 10 THEN Xx% = 10
IF Xy% < 1 THEN Xy% = 1
IF Xy% > 10 THEN Xy% = 10
IF SCREEN(Xy%, Xx%) = 32 OR SCREEN(Xy%, Xx%) = ASC("X") THEN
IF Xpos% > -1 THEN
CLS
COLOR 13
LOCATE Xy%, Xx%
PRINT CHR$(1)
COLOR 12
LOCATE 9, 9
PRINT "X"
END IF
ELSE
SELECT CASE Xpos%
CASE 0: Xx% = Xx% + 1
CASE 1: Xx% = Xx% - 1
CASE 2: Xy% = Xy% + 1
CASE 3: Xy% = Xy% - 1
END SELECT
END IF
LOOP UNTIL Xx% = 9 AND Xy% = 9
DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
DATA 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
DATA 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
DATA 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
DATA 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
DATA 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
DATA 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
DATA 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
DATA 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 |
_________________ MfG
Seb |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4709 Wohnort: ~/
|
Verfasst am: 19.02.2008, 22:53 Titel: |
|
|
Das DO in der ersten Zeile habe ich übersehen, das muss raus.
Ersetze doch, wie ich geschrieben habe, in den DATA-Zeilen 1 durch 219 und 0 duch 32.
edit: und nach den FOR...NEXT-Schleifen muss das DO dann rein. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Zuletzt bearbeitet von nemored am 19.02.2008, 22:54, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
raph ael
Anmeldungsdatum: 12.04.2006 Beiträge: 472
|
Verfasst am: 19.02.2008, 22:53 Titel: |
|
|
Was macht denn das "to" im "read"
To
Read |
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 19.02.2008, 22:57 Titel: |
|
|
Code: | DO
COLOR 14
FOR a = 1 TO 10
FOR b = 1 TO 10
READ 1, 10
LOCATE b, a
PRINT CHR$(219)
NEXT
NEXT
DO
Xpos% = -1
SELECT CASE INKEY$
CASE CHR$(0) + CHR$(&H4B)
Xpos% = 0
CASE CHR$(0) + CHR$(&H4D)
Xpos% = 1
CASE CHR$(0) + CHR$(&H48)
Xpos% = 2
CASE CHR$(0) + CHR$(&H50)
Xpos% = 3
END SELECT
SELECT CASE Xpos%
CASE 0: Xx% = Xx% - 1
CASE 1: Xx% = Xx% + 1
CASE 2: Xy% = Xy% - 1
CASE 3: Xy% = Xy% + 1
END SELECT
IF Xx% < 1 THEN Xx% = 1
IF Xx% > 10 THEN Xx% = 10
IF Xy% < 1 THEN Xy% = 1
IF Xy% > 10 THEN Xy% = 10
IF SCREEN(Xy%, Xx%) = 32 OR SCREEN(Xy%, Xx%) = ASC("X") THEN
IF Xpos% > -1 THEN
CLS
COLOR 13
LOCATE Xy%, Xx%
PRINT CHR$(1)
COLOR 12
LOCATE 9, 9
PRINT "X"
END IF
ELSE
SELECT CASE Xpos%
CASE 0: Xx% = Xx% + 1
CASE 1: Xx% = Xx% - 1
CASE 2: Xy% = Xy% + 1
CASE 3: Xy% = Xy% - 1
END SELECT
END IF
LOOP UNTIL Xx% = 9 AND Xy% = 9
DATA 219, 219, 219, 219, 219, 219, 219, 219, 219, 219
DATA 219, 32, 32, 32, 32, 32, 32, 32, 32, 219
DATA 219, 32, 32, 32, 32, 32, 32, 32, 32, 219
DATA 219, 32, 32, 32, 32, 32, 32, 32, 32, 219
DATA 219, 32, 32, 32, 32, 32, 32, 32, 32, 219
DATA 219, 32, 32, 32, 32, 32, 32, 32, 32, 219
DATA 219, 32, 32, 32, 32, 32, 32, 32, 32, 219
DATA 219, 32, 32, 32, 32, 32, 32, 32, 32, 219
DATA 219, 32, 32, 32, 32, 32, 32, 32, 32, 219
DATA 219, 219, 219, 219, 219, 219, 219, 219, 219, 219 |
??? _________________ MfG
Seb |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4709 Wohnort: ~/
|
Verfasst am: 19.02.2008, 23:02 Titel: |
|
|
Hast du den Referenzbeitrag zu READ inzwischen schon durchgelesen?
Probiere doch mal in den FOR...NEXT-Schleifen den Code aus, den ich weiter oben gepostet habe. Oder, noch besser - überleg mal, was bei deinem Code wohl passieren würde (wenn das READ funktionieren würde). _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
raph ael
Anmeldungsdatum: 12.04.2006 Beiträge: 472
|
Verfasst am: 19.02.2008, 23:04 Titel: |
|
|
Ähem...
Da sind 2 DOs aber nur ein LOOP...
UND: Beitrag 333! |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 19.02.2008, 23:37 Titel: |
|
|
Empfehlung von mir: Levels würde ich besser in Dateien auslagern, der Vorteil ist eine vollständige Entkopplung von Programm und Daten, was die ganze Software viel flexibler macht. Von mir in diesem Bereich etliche Beispiele:
http://www.dreael.ch/Deutsch/Download/Wurmi.html
http://www.dreael.ch/Deutsch/Download/Zelda.html
http://beilagen.dreael.ch/QB/SOKOBAN.ZIP
In all diesen Beispielen habe ich sogar einen Leveleditor hineingenommen. Für Deinen Fall würde ich ein texteditorfreundliches Dateiformat definieren, z.B. die Alt+219-Blöcke als "*" darstellen, von mir aus noch die Buchstaben "S" und "Z" als Start- und Zielpunkt.
Umsetzungstechnisch ist es von READ + DATA ein kleiner Schritt: Anstelle von
Code: | DIM level%(1 TO 40, 1 TO 25)
FOR i%=1 TO 25
FOR j%=1 TO 40
READ level%(j%, i%)
NEXT j%
NEXT i% |
wird daraus ein (ungetestetes Beispiel)
Code: | OPEN "level" + TRIM$(STR$(levelNr%)) + ".dat" FOR INPUT AS 1
FOR i%=1 TO 25
LINE INPUT#1, z$
FOR j%=1 TO 40
SELECT CASE MID$(z$, j%, 1)
CASE "*"
level%(j%, i%) = 219
CASE " "
level%(j%, i%) = 32
CASE "S"
xPosStart% = j%
yPosStart% = i%
level%(j%, i%) = 32 ' Dort, wo man zu Beginn steht, hat es auch Boden!
CASE "Z"
zielX% = j%
zielY% = i%
level%(j%, i%) = 32
END SELECT
NEXT j%
NEXT i%
CLOSE 1 |
=> Levels würde ich mit NOTEPAD.EXE (Texteditor) erstellen:
Code: | ****************************************
* *
* *
* *
* *
* ***** *
* S* *
******** *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* ****** *
* Z* *
* * *
**************************************** |
Weiterer Vorteil dieser Lösung: Das ganze RESTORE-Handling mit zig Labels und irgend einem unschönen
Code: | SELECT CASE levelNr%
CASE 1
RESTORE level1
CASE 2
RESTOPE level2
CASE 3
...
END SELECT |
entfällt komplett. Siehe dazu auch meinen Anfängerartikel. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 20.02.2008, 17:10 Titel: |
|
|
dreael hat Folgendes geschrieben: | Empfehlung von mir: Levels würde ich besser in Dateien auslagern, der Vorteil ist eine vollständige Entkopplung von Programm und Daten, was die ganze Software viel flexibler macht. Von mir in diesem Bereich etliche Beispiele:
http://www.dreael.ch/Deutsch/Download/Wurmi.html
http://www.dreael.ch/Deutsch/Download/Zelda.html
http://beilagen.dreael.ch/QB/SOKOBAN.ZIP
In all diesen Beispielen habe ich sogar einen Leveleditor hineingenommen. Für Deinen Fall würde ich ein texteditorfreundliches Dateiformat definieren, z.B. die Alt+219-Blöcke als "*" darstellen, von mir aus noch die Buchstaben "S" und "Z" als Start- und Zielpunkt.
Umsetzungstechnisch ist es von READ + DATA ein kleiner Schritt: Anstelle von
Code: | DIM level%(1 TO 40, 1 TO 25)
FOR i%=1 TO 25
FOR j%=1 TO 40
READ level%(j%, i%)
NEXT j%
NEXT i% |
wird daraus ein (ungetestetes Beispiel)
Code: | OPEN "level" + TRIM$(STR$(levelNr%)) + ".dat" FOR INPUT AS 1
FOR i%=1 TO 25
LINE INPUT#1, z$
FOR j%=1 TO 40
SELECT CASE MID$(z$, j%, 1)
CASE "*"
level%(j%, i%) = 219
CASE " "
level%(j%, i%) = 32
CASE "S"
xPosStart% = j%
yPosStart% = i%
level%(j%, i%) = 32 ' Dort, wo man zu Beginn steht, hat es auch Boden!
CASE "Z"
zielX% = j%
zielY% = i%
level%(j%, i%) = 32
END SELECT
NEXT j%
NEXT i%
CLOSE 1 |
=> Levels würde ich mit NOTEPAD.EXE (Texteditor) erstellen:
Code: | ****************************************
* *
* *
* *
* *
* ***** *
* S* *
******** *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* ****** *
* Z* *
* * *
**************************************** |
Weiterer Vorteil dieser Lösung: Das ganze RESTORE-Handling mit zig Labels und irgend einem unschönen
Code: | SELECT CASE levelNr%
CASE 1
RESTORE level1
CASE 2
RESTOPE level2
CASE 3
...
END SELECT |
entfällt komplett. Siehe dazu auch meinen Anfängerartikel. |
Sieht das ganze dann so aus, oder fehlt noch was(auser die Leveldatei)?:
Code: | CLS
COLOR 13
Xy% = 2
Xx% = 2
LOCATE Xy%, Xx%
PRINT CHR$(1)
COLOR 12
LOCATE 9, 9
PRINT "X"
DO
OPEN "level" + TRIM$(STR$(levelNr%)) + ".dat" FOR INPUT AS 1
FOR i%=1 TO 25
LINE INPUT#1, z$
FOR j%=1 TO 40
SELECT CASE MID$(z$, j%, 1)
CASE "*"
level%(j%, i%) = 219
CASE " "
level%(j%, i%) = 32
CASE "S"
xPosStart% = j%
yPosStart% = i%
level%(j%, i%) = 32 ' Dort, wo man zu Beginn steht, hat es auch Boden!
CASE "Z"
zielX% = j%
zielY% = i%
level%(j%, i%) = 32
END SELECT
NEXT j%
NEXT i%
CLOSE 1
Xpos% = -1
SELECT CASE INKEY$
CASE CHR$(0) + CHR$(&H4B)
Xpos% = 0
CASE CHR$(0) + CHR$(&H4D)
Xpos% = 1
CASE CHR$(0) + CHR$(&H48)
Xpos% = 2
CASE CHR$(0) + CHR$(&H50)
Xpos% = 3
END SELECT
SELECT CASE Xpos%
CASE 0: Xx% = Xx% - 1
CASE 1: Xx% = Xx% + 1
CASE 2: Xy% = Xy% - 1
CASE 3: Xy% = Xy% + 1
END SELECT
IF Xx% < 1 THEN Xx% = 1
IF Xx% > 10 THEN Xx% = 10
IF Xy% < 1 THEN Xy% = 1
IF Xy% > 10 THEN Xy% = 10
IF SCREEN(Xy%, Xx%) = 32 OR SCREEN(Xy%, Xx%) = ASC("X") THEN
IF Xpos% > -1 THEN
CLS
COLOR 13
LOCATE Xy%, Xx%
PRINT CHR$(1)
COLOR 12
LOCATE 9, 9
PRINT "X"
END IF
ELSE
SELECT CASE Xpos%
CASE 0: Xx% = Xx% + 1
CASE 1: Xx% = Xx% - 1
CASE 2: Xy% = Xy% + 1
CASE 3: Xy% = Xy% - 1
END SELECT
END IF
LOOP UNTIL Xx% = 9 AND Xy% = 9 |
_________________ MfG
Seb |
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 24.02.2008, 09:33 Titel: |
|
|
Weiß jemand, was daran falsch ist? _________________ MfG
Seb |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4709 Wohnort: ~/
|
Verfasst am: 24.02.2008, 13:27 Titel: |
|
|
Ja.
Schau mal, wo deine DO-Schleife beginnt und wo sie endet. Dann wirst du feststellen, dass du bei jedem Schleifendurchlauf, der zur Bewegungsabfrage dient, auch wieder komplett neu die Leveldaten einliest.
Außerdem ist das Spielziel immer noch Xx% = 9 und Xy% = 9, und nicht der Punkt, an dem in der Leveldatei das Z markiert ist (wo das ist, steht im Quelltext drin, darfst du selber suchen )
Weitere mögliche Fehlerquellen könnten Leveldateien im falschen Format (statt 40x25) oder mit falschem Dateinamen (level0.dat, level1.dat usw.) sein.
Ach ja: die Position Xx% und Xy% solltest du am Anfang auch auf die ausgelesene Startposition setzen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 24.02.2008, 13:43 Titel: |
|
|
Also muss ich dann oben die Leveleinlesung vor DO machen(da sieht man aber nach dem 1. Bewegen nichts mehr)?
Das mit dem LOOP UNTIL:
Wie mache ich das?
X und Y:
Muss ich dann in der 3. und 4. Zeile das schreiben?:
_________________ MfG
Seb |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4709 Wohnort: ~/
|
Verfasst am: 24.02.2008, 14:08 Titel: |
|
|
Zitat: | (da sieht man aber nach dem 1. Bewegen nichts mehr) |
hmm, das liegt an dem CLS, dass du noch im Code hast:
Code: | IF Xpos% > -1 THEN
CLS
COLOR 13
LOCATE Xy%, Xx%
PRINT CHR$(1)
COLOR 12
LOCATE 9, 9
PRINT "X"
END IF |
Lass diesen Teil mal raus und programmiere die Grafikänderung da hinein, wo du die Figur bewegst:
Code: | LOCATE Xy%, Xx%
PRINT CHR$(level%(Xx%, Xy%))
SELECT CASE Xpos%
CASE 0: Xx% = Xx% - 1
CASE 1: Xx% = Xx% + 1
CASE 2: Xy% = Xy% - 1
CASE 3: Xy% = Xy% + 1
END SELECT
LOCATE Xy%, Xx%
PRINT CHR$(1)
|
Die ersten beiden und die letzten beiden Zeilen wurden neu hinzugefügt. Die ersten löschen deine Figur von der alten Position, die neuen zeichnen sie an der neuen Position neu hin.
Wenn ich das richtig sehe, solltest du noch durch Wände laufen können. Die Überprüfung, ob das Feld, auf das du gehen möchtest, frei ist, musst du auch in den oberen Block schreiben:
Code: | CASE 0: IF level%(Xx% - 1, Xy%) = 32 THEN Xx% = Xx% - 1 |
usw.
Zitat: | Muss ich dann in der 3. und 4. Zeile das schreiben?:
|
Start- und Zielpunkt liest du an dieser Stelle aus:
Code: | CASE "S"
xPosStart% = j%
yPosStart% = i%
level%(j%, i%) = 32
CASE "Z"
zielX% = j%
zielY% = i%
level%(j%, i%) = 32 |
Was du jetzt noch tun musst, ist, Xx% und Xy% auf den x- und y-Wert des Startpunktes zu setzen und am Ende beim LOOP zu überprüfen, ob sie den x- und y-Wert des Zielpunktes erreicht haben.
Nochmal zur Strukturierung des Programms: Aussehen sollte es folgendermaßen:
Code: | Setze_allgemeine_Parameter
Lies_Leveldaten
Zeichne_Spielfeld
Wiederhole
Frage_Tastatur_ab
Bewege_Figur
Bis Ziel_erreicht |
oder für mehrere Level:
Code: | Setze_allgemeine_Parameter
Wiederhole
Lies_Leveldaten
Zeichne_Spielfeld
Wiederhole
Frage_Tastatur_ab
Bewege_Figur
Bis Ziel_erreicht
Bis Letztes_Level_abgeschlossen |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 24.02.2008, 14:16 Titel: |
|
|
Hallo Seb,
vielleicht solltest du einfach etwas anders an die Sache herangehen. So wie ich das sehe, versuchst du nur, verschiedene Programmschnippsel, die dir von unterschiedlichen Leuten als Beispiel gegeben wurden, aneinander zu kleben. Dass das nicht so richtig klappt, siehst du ja.
Ich glaube, es wäre besser wenn du versuchst, erst ganz genau zu verstehen, wie diese Beispielprogramme arbeiten und verschiedene Funktionen nach und nach in dein Programm übernimmst. Also erst dann, wenn alles so läuft wie du willst, eine neue Sache einbauen und dein Programm so Schritt für Schritt erweitern. Vor allem darfst du diese neuen Funktionen nicht nur einfach kopieren und einfügen, sondern du solltest sie verstehen und dann, angepasst an das, was du schon hast, selbst nachprogrammieren. Dabei gibt es oft unterschiedliche Möglichkeiten, ein Problem zu lösen. Wie z.B. das Spielfeld entweder in einem Array zu speichern wie in level%(j%,i%) oder mit SCREEN das angezeigte Zeichen abzufragen. Was für dich besser ist und was deiner Art zu programmieren mehr entspricht, kannst du nur herausfinden, wenn du beides mal ausprobierst. Mit SCREEN ist es einfacher, ein Array bietet mehr Möglichkeiten wie z.B. nur Felder innerhalb eines Sichtbereichs anzuzeigen. So, genug gelabert...
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Seb

Anmeldungsdatum: 29.11.2006 Beiträge: 120 Wohnort: Henfenfeld
|
Verfasst am: 24.02.2008, 14:21 Titel: |
|
|
Sieht das Programm dann so aus?:
Code: | CLS
COLOR 13
Xy% = 2
Xx% = 2
LOCATE Xy%, Xx%
PRINT CHR$(1)
COLOR 12
LOCATE 9, 9
PRINT "X"
OPEN "level" + TRIM$(STR$(levelNr%)) + ".dat" FOR INPUT AS 1
FOR i%=1 TO 25
LINE INPUT#1, z$
FOR j%=1 TO 40
SELECT CASE MID$(z$, j%, 1)
CASE "*"
level%(j%, i%) = 219
CASE " "
level%(j%, i%) = 32
CASE "S"
xPosStart% = j%
yPosStart% = i%
level%(j%, i%) = 32 ' Dort, wo man zu Beginn steht, hat es auch Boden!
CASE "Z"
zielX% = j%
zielY% = i%
level%(j%, i%) = 32
END SELECT
NEXT j%
NEXT i%
CLOSE 1
DO
COLOR 14
FOR a = 1 TO 10
LOCATE 1, a
PRINT CHR$(219)
LOCATE 10, a
PRINT CHR$(219)
NEXT
FOR b = 2 TO 9
LOCATE b, 1
PRINT CHR$(219)
LOCATE b, 10
PRINT CHR$(219)
NEXT
Xpos% = -1
SELECT CASE INKEY$
CASE CHR$(0) + CHR$(&H4B)
Xpos% = 0
CASE CHR$(0) + CHR$(&H4D)
Xpos% = 1
CASE CHR$(0) + CHR$(&H48)
Xpos% = 2
CASE CHR$(0) + CHR$(&H50)
Xpos% = 3
END SELECT
LOCATE Xy%, Xx%
PRINT CHR$(level%(Xx%, Xy%))
SELECT CASE Xpos%
CASE 0: IF level%(Xx% - 1, Xy%) = 32 THEN Xx% = Xx% - 1
CASE 1: IF level%(Xx% - 1, Xy%) = 32 THEN Xx% = Xx% - 1
CASE 2: IF level%(Xx% - 1, Xy%) = 32 THEN Xy% = Xy% - 1
CASE 3: IF level%(Xx% - 1, Xy%) = 32 THEN Xy% = Xy% - 1
END SELECT
LOCATE Xy%, Xx%
PRINT CHR$(1)
IF Xx% < 1 THEN Xx% = 1
IF Xx% > 10 THEN Xx% = 10
IF Xy% < 1 THEN Xy% = 1
IF Xy% > 10 THEN Xy% = 10
LOOP UNTIL Xx% = 9 AND Xy% = 9 |
_________________ MfG
Seb |
|
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.
|
|