Level von Datei laden
Level von Datei laden
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.
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.
Win7, 64bit, PB 4.60
- NicknameFJ
- Beiträge: 324
- Registriert: 03.06.2007 14:36
- Wohnort: Von der Sonne aus gesehen der dritte Planet
Re: Level von Datei laden
Hallo TheNewOne,
hier mal ein kleiner Testcode. Ich hoffe Du kannst Da was für Dich raus ziehen.
Grüße
NicknameFJ
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
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller


- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Level von Datei laden
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")
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Level von Datei laden

Win7, 64bit, PB 4.60
Re: Level von Datei laden
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.
Aber irgendwie will mir das nicht gelingen.
Win7, 64bit, PB 4.60
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Level von Datei laden
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
das Problem aufzeigt angebracht, ansonsten wird Dir wohl eher keiner helfen können.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Level von Datei laden
Hier der Code:
und die Inlcude File:
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
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
Win7, 64bit, PB 4.60
- NicknameFJ
- Beiträge: 324
- Registriert: 03.06.2007 14:36
- Wohnort: Von der Sonne aus gesehen der dritte Planet
Re: Level von Datei laden
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.
Grüße
NicknameFJ
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
NicknameFJ
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller


Re: Level von Datei laden
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?
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?
Win7, 64bit, PB 4.60