Seite 1 von 1
Level von Datei laden
Verfasst: 26.08.2012 13:00
von TheNewOne
Hallo zusammen,
ich habe eine txt-Datei die folgendes enthält:
0,0,0
0,1,1
1,1,1
Ich möchte diese Datei per ReadFile und ReadString lesen, und für jede 0 ein sprite anzeigen, und für jede 1 ein anderes sprite.
Leider scheitere ich an der Umsetzung.
Hoffe jemand versteht mein Problem.
Re: Level von Datei laden
Verfasst: 26.08.2012 13:22
von NicknameFJ
Hallo TheNewOne,
hier mal ein kleiner Testcode. Ich hoffe Du kannst Da was für Dich raus ziehen.
Grüße
NicknameFJ
Code: Alles auswählen
Procedure MacheWas()
Debug "eins"
EndProcedure
Procedure MacheNochWas()
Debug "null"
EndProcedure
If ReadFile(1,"C:\Test.txt") ; <----- Pfad anpassen
While Eof(1) = 0
Dummy$ = ReadString(1)
Debug Dummy$
Anzahl = CountString(Dummy$,",") +1
For i = 1 To Anzahl
If StringField(Dummy$,i,",") = "1"
MacheWas()
Else
MacheNochWas()
EndIf
Next
Wend
EndIf
Re: Level von Datei laden
Verfasst: 26.08.2012 13:46
von ts-soft
Ich würde es in etwa so machen:
Code: Alles auswählen
EnableExplicit
; LoadImage(0, ...)
; LoadImage(1, ...)
Procedure ParseLevelLine(List StringList.s())
Protected count, i, sprite
ForEach StringList()
count = CountString(StringList(), ",")
For i = 1 To count + 1
sprite = Val(StringField(StringList(), i, ","))
Debug sprite
Next
Next
EndProcedure
Procedure ReadLevelFile(File.s)
NewList StringList.s()
Protected FF = ReadFile(#PB_Any, File)
If FF
While Not Eof(FF)
AddElement(StringList())
StringList() = ReadString(FF)
Wend
CloseFile(FF)
EndIf
ParseLevelLine(StringList())
EndProcedure
ReadLevelFile("d:\TS-TEMP\level.txt")
Re: Level von Datei laden
Verfasst: 26.08.2012 13:49
von TheNewOne

Danke, euch beiden. Werde jetzt ausprobieren ob ich die codes verstanden habe.
Re: Level von Datei laden
Verfasst: 26.08.2012 15:07
von TheNewOne
Soweit so gut, das Laden der Datei funktioniert schon mal, nun möchte ich aber das ein drittes Sprite den "Weg" der 1sen folgt.
Aber irgendwie will mir das nicht gelingen.
Re: Level von Datei laden
Verfasst: 26.08.2012 15:25
von ts-soft
Dafür sind die bisherigen Infos aber viel zu wenig. Außerdem wäre ein ausführbarer Beispielcode, der
das Problem aufzeigt angebracht, ansonsten wird Dir wohl eher keiner helfen können.
Gruß
Thomas
Re: Level von Datei laden
Verfasst: 26.08.2012 15:29
von TheNewOne
Hier der Code:
Code: Alles auswählen
IncludeFile "lib.pb"
init()
If OpenScreen(1600, 900, 32, "path")
sprites()
Repeat
ClearScreen($FFFFFF)
Readit()
ExamineKeyboard()
keys()
FlipBuffers()
Until quit = 1
Else
MessageRequester("Error!","Error!")
EndIf
und die Inlcude File:
Code: Alles auswählen
Enumeration
#weg
#block
#troop
#mouse
EndEnumeration
Global x
Global y
Global a
Global tx
Global ty
Global speed
Global mx
Global my
Global row
Global quit
Global sprite
tx = 0
ty = 100
speed = 1
Procedure init()
InitSprite()
InitKeyboard()
InitMouse()
EndProcedure
Procedure sprites()
LoadSprite(#weg, "weg.bmp")
LoadSprite(#block, "block.bmp")
LoadSprite(#troop, "troop.bmp")
LoadSprite(#mouse, "mouse.bmp")
EndProcedure
Procedure Weg()
DisplaySprite(#weg, x, y)
EndProcedure
Procedure block()
DisplaySprite(#block, x, y)
EndProcedure
Procedure Enemy()
If Not a = 1
tx = x + 1
ty = y + 1
a = 1
EndIf
DisplaySprite(#troop, tx, ty)
If Not SpritePixelCollision(#troop, tx + 25, ty, #weg, x, y)
tx + speed
Else
EndIf
EndProcedure
Procedure readit()
y = 0
If ReadFile(1,"Test.txt")
While Eof(1) = 0
Dummy$ = ReadString(1)
x = 0
Anzahl = CountString(Dummy$,",") + 1
For i = 1 To Anzahl
If StringField(Dummy$,i,",") = "1"
weg()
Enemy()
Else
block()
EndIf
x + 25
Next
y + 25
Wend
EndIf
EndProcedure
Procedure keys()
If KeyboardPushed(#PB_Key_Escape)
quit = 1
EndIf
EndProcedure
Re: Level von Datei laden
Verfasst: 26.08.2012 22:57
von NicknameFJ
Hi TheNewOne,
in meinem Beispielcode habe ich leider den Closefile-Befehl vergessen.
Du müsstest daher in Deinem Code in der ReadIt() Procedure diesen Befehl noch einfügen. Hier dann nochmals die komplette Proc.
Code: Alles auswählen
Procedure readit()
y = 0
If ReadFile(1,"Test.txt")
While Eof(1) = 0
Dummy$ = ReadString(1)
x = 0
Anzahl = CountString(Dummy$,",") + 1
For i = 1 To Anzahl
If StringField(Dummy$,i,",") = "1"
weg()
Enemy()
Else
block()
EndIf
x + 25
Next
y + 25
Wend
Closefile(1) ; <------ Hier den Befehl ergänzt
EndIf
EndProcedure
Grüße
NicknameFJ
Re: Level von Datei laden
Verfasst: 27.08.2012 14:22
von TheNewOne
Ich habe nun ein Level das folgendermaßen aussieht:
0,0,0,0,0
1,1,0,0,0
0,1,0,0,0
0,1,1,1,1
0,0,0,0,0
Für 1 lasse ich einen "weg" anzeigen und für 0 einen "block". Nun möchte ich, dass mein 3tes Sprite den weg der 1sen verfolgt.
Ich habe das bereits mit SpriteCollision zwischen "weg" und dem dritten sprite probiert, das funktioniert aber nicht richtig.
Hat vielleicht jemand eine Idee wie ich es sonst noch machen könnte?
Edit: Könnte man vllt den weg irgendwie in eine Liste speichern oder so?