Author Topic: Level aus Textdatei lesen,wie?  (Read 2241 times)

Offline jasper111

  • Mc. Print
  • *
  • Posts: 32
    • View Profile
Level aus Textdatei lesen,wie?
« on: 2008-Dec-09 »
Hallo,

hab mal wieder Urlaub und spiel gerade ein wenig mit GLBasic.Jetz hab ich versucht ein Level aus einer Textdatei einzulesen.

Habe das Level in etwa so aufgebaut :

111111111111
112112111211

Hier steht die 1 und die 2 für jeweils ein anderes Sprite.
Nun kann ich mit Readline nur die ganze Zahl lesen, aber nicht einzeln.

Wie kann ich jetzt jede Zahl einzeln lesen??

Gruß Jasper
Rechtschreibfehler sind pure Absicht und dienen der allgemeinen Belustigung.
_____________________________________________________________

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5030
  • O Rly?
    • View Profile
Re: Level aus Textdatei lesen,wie?
« Reply #1 on: 2008-Dec-09 »
READBYTE ?
I <3 DGArray's :D

PC:
AMD Ryzen 7 1700 @3.9GHz, 16GB HyperX Fury 3000MHz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Kosta

  • Mr. Polyvector
  • ***
  • Posts: 167
  • nothing.....except 'Kosta'
    • View Profile
    • Kosta's Blog
Re: Level aus Textdatei lesen,wie?
« Reply #2 on: 2008-Dec-10 »
wie Schranzor bereits meinte,   mit  Openfile/Readbyte

oder du nutzt noch die alten Befehle  Getfile
(Beschränkung: max 256 Zeilen (und 1023 Zeichen pro Zeile))

siehe dazu das in GLB vorhandene Beispiel Mario (die Funktion LoadLevel)...
da wird so ein Textlevel benutzt/eingelesen...

Intel QuadCore, Geforce8600GT,512MB,4GB Ram, 26" TFT
HP nw8440 Schläppy
GP2X Mk2 (Firmware 3.0)

GLBASIC Blog:
http://www.glbasic.com/forum/index.php?blog=51.0

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1066
    • View Profile
    • http://www.deuteriumoxid.com
Re: Level aus Textdatei lesen,wie?
« Reply #3 on: 2008-Dec-10 »
Das ist das was Du suchst, Simples beispiel.
Ladet euine Textdatei die wie Deine oben aufgebaut ist.

Code: (glbasic) [Select]
// --------------------------------- //
// Project: TextMap
// Start: Wednesday, December 10, 2008
// IDE Version: 5.360


GLOBAL lev$
lev$ = FILEREQUEST$(TRUE, "TXT|*.txt|All|*.*")
DIM dat[256][256]


txt_loader(lev$)





// Map zeichnen

WHILE TRUE

FOR x= 0 TO 255
FOR y = 0 TO 255
IF  dat[x][y] = 1 THEN DRAWRECT x * 16,y*16,16,16,RGB(0xfc, 0x83, 0xb6)
IF  dat[x][y] = 2 THEN DRAWRECT x * 16,y*16,16,16,RGB(0x00, 0xff, 0x80)
NEXT
NEXT


SHOWSCREEN
WEND
END











FUNCTION txt_loader : l_in$
LOCAL l_x,l_y,l_temp,l_count
LOCAL l_str$,l_a$

OPENFILE(0,l_in$,TRUE)


WHILE ENDOFFILE(0) = 0
READLINE 0,l_str$
l_temp = LEN(l_str$)


FOR l_i = 0 TO l_temp
IF MID$(l_str$,l_i,1) = "1" THEN dat[l_i][l_count] = 1
IF MID$(l_str$,l_i,1) = "2" THEN dat[l_i][l_count] = 2




NEXT

INC l_count,1

IF l_temp >= l_x THEN l_x = l_temp
WEND

CLOSEFILE 0


ENDFUNCTION
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Offline jasper111

  • Mc. Print
  • *
  • Posts: 32
    • View Profile
Re: Level aus Textdatei lesen,wie?
« Reply #4 on: 2008-Dec-10 »
Danke an alle,

habt mir sehr geholfen, besonders der Code von D²O.Ich hatte nur Readline benutzt ohne Mid$ und Zähler,hatte mir so etwas gedacht aber nicht umsetzen können :S.

Code: (glbasic) [Select]
FUNCTION txt_loader : l_in$
LOCAL l_x,l_y,l_temp,l_count
//Variable 1_x für Anzahl Zeichen x-Achse / Variable 1_y für Anzahl Zeichen x-Achse
//Variablen deklarieren l_temp = Für Azahl der Zeichen in der Datei/l_count Zähler für Variable dat


LOCAL l_str$,l_a$ //l_str$ Variable für die einzulesene Datei/l_a$ Variable für ???
WHILE ENDOFFILE(0) = 0
READLINE 0,l_str$ //Datei lesen
l_temp = LEN(l_str$) //Gibt die Anzahl der Zeichen wieder
FOR l_i = 0 TO l_temp //l_i = 0 bis Anzahl Zeichen(Schleife wird solange durchlaufen bis l_temp(Anzahl Zeichen) erreicht ist
IF MID$(l_str$,l_i,1) = "1" THEN dat[l_i][l_count] = 1 //Kopiert aus der Datei das Zeichen(wenn es eine 1 ist) in die Variable dat[l_i][l_count]
IF MID$(l_str$,l_i,1) = "2" THEN dat[l_i][l_count] = 2 //Kopiert aus der Datei das Zeichen(wenn es eine 2 ist) in die Variable dat[l_i][l_count]

NEXT
INC l_count,1 //l_count um 1 erhöhen
IF l_temp >= l_x THEN l_x = l_temp //wenn l_temp(Anzahl Zeichen) größer,gleich 1_x(Anzahl Zeichen x-Achse) dann 1_x = 1_temp
WEND
CLOSEFILE 0
ENDFUNCTION

Habe ich den Code verstanden? Wofür brauche ich l_a$?

Gruß Jasper
« Last Edit: 2008-Dec-10 by jasper111 »
Rechtschreibfehler sind pure Absicht und dienen der allgemeinen Belustigung.
_____________________________________________________________

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5030
  • O Rly?
    • View Profile
Re: Level aus Textdatei lesen,wie?
« Reply #5 on: 2008-Dec-10 »
Schlagt mich wenns falsch ist, aber muss es nicht heißen :

FOR l_i = 0 TO l_temp -1



Weil LEN zählt ja jeden Buchstaben/Zahl und nicht erst ab 0 :)
I <3 DGArray's :D

PC:
AMD Ryzen 7 1700 @3.9GHz, 16GB HyperX Fury 3000MHz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1066
    • View Profile
    • http://www.deuteriumoxid.com
Re: Level aus Textdatei lesen,wie?
« Reply #6 on: 2008-Dec-10 »
Hi, kann noch gar nicht klar Denken.
Bin aus der Nachtschicht gekommen und habe den Code nur schnell mal gekürzt, der Original Code
ist der für das Konvertieren der Map's von Gernots WIZ-Spiel für den  SMP-Editor.

Da kann es sein das die eine oder andere Variable fehl am platzt ist ;)

So, muss jetzt erst mal die Kids von der Schulle und KiGa hollen, dann gehts wieder ab ins Bett :)
Gute Nacht!
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5030
  • O Rly?
    • View Profile
Re: Level aus Textdatei lesen,wie?
« Reply #7 on: 2008-Dec-10 »
Viel Spass beim Maps auslesen :)

Achja, meine Testmap sah so aus:

das 00 oder 01 usw ist nur der übersicht halber!
Macht aber GLB nix aus, da es eh als Integer übergeben wird :)

Code: (glbasic) [Select]
00,00,00,00,00,00,00,00,00,00
01,01,01,01,01,01,01,01,01,01
02,02,02,02,02,02,02,02,02,02
03,03,03,03,03,03,03,03,03,03
04,04,04,04,04,04,04,04,04,04
05,05,05,05,05,05,05,05,05,05
06,06,06,06,06,06,06,06,06,06
07,07,07,07,07,07,07,07,07,07
08,08,08,08,08,08,08,08,08,08
09,09,09,09,09,09,09,09,09,09
10,10,10,10,10,10,10,10,10,10
11,11,11,11,11,11,11,11,11,11
12,12,12,12,12,12,12,12,12,12
13,13,13,13,13,13,13,13,13,13
14,14,14,14,14,14,14,14,14,14



Das Auslesen würde ich so machen

Code: (glbasic) [Select]
GLOBAL MyMap[]


Loadmap(MyMap[],10,15,"map1neu.map")



WHILE TRUE

FOR y = 0 TO 14 // Reihen: 15
FOR x = 0 TO 9 // Spalten: 10

PRINT MyMap[x][y], x*20,y*20

NEXT
NEXT


SHOWSCREEN
WEND
END



// Map[] = das MapArray, sx = Arraysize X,  sy = Arraysize Y, mapname$ = Klar oder :D
FUNCTION Loadmap: Map[],sx,sy, mapname$
DIM Map[sx][sy] // Setze Mapgröße

// ok = für Openfile ist gelungen
// linenum = Zeilennummer
// tmp$ = Die aktuelle Zeile
// spl_str$[] = das Array der Zahlen in der Zeile
// spl_num =  Anzahl der Zahlen in der Zeile 
LOCAL ok, linenum, tmp$, spl_str$[], spl_num

ok = OPENFILE(0,mapname$,TRUE) // Öffne Map

IF ok // War Mapöffnen erfolgreich

WHILE ENDOFFILE(0) = 0 // Solange nicht Ende der Map erreich

READLINE 0, tmp$ // Lese Zeile aus
spl_num =  SPLITSTR(tmp$,spl_str$[],",") // Trennt den String bei einem Komma !
FOR i = 0 TO spl_num-1 // Laufe solange durch bis Zeile zuende ist

Map[i][linenum] = spl_str$[i] // Lese aktuelle Position aus und übergib es der Map

NEXT // nochmal zu FOR

INC linenum, 1 // Neue Zeile

WEND // nochmal ausführen
 
  ENDIF // Map geladen

CLOSEFILE 0 // Map auslesen schließen
ENDFUNCTION
« Last Edit: 2008-Dec-10 by Schranz0r »
I <3 DGArray's :D

PC:
AMD Ryzen 7 1700 @3.9GHz, 16GB HyperX Fury 3000MHz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard