Das einlesen mehrerer Type Koordinaten...

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Blitzkrieg Bop

Betreff: Das einlesen mehrerer Type Koordinaten...

BeitragMi, Jun 23, 2004 23:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute!
Ich hab mal wieder ne (vielleicht sogar Allgemeine) Frage:
Wenn bei einem Programm meinetwegen Kreise erstellt werden, so hat ja jeder Kreis eine eigene X,Y Koordinate. Man kann ja diese Koordinaten abspeichern. Doch wie schafft man es, die X und Y Koordinaten richtig einzulesen, so dass halt die Kreise,wenn man aus einer Datei lädt, auch an den richtigen Stellen gezeichnet werden? Ich habe mal einen Code gebastelt, wodurch meine Frage klar wird und ich frage euch, was man bei der Funktion Laden() machen kann...Ich hab shcon einiges durchgetestet. Also mal eben kopieren und ausprobieren Laughing Wink

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
AppTitle "Das laden mehrerer Type Koordinaten?!"

Type kreis
   Field x,y
End Type

Repeat
Cls
Text 0,0,"Drücke Enter um 10 neue Kreise zu erstellen!"
Text 0,30,"Drücke S um zu speichern!"
Text 0,60,"Drück L um zu laden!"

For k.kreis = Each kreis
   Oval k\x,k\y,10,10
Next

If KeyHit(28)
   For i = 1 To 10
      k.kreis = New kreis
      k\x = Rand(20,780)
      k\y = Rand(20,580)
   Next
EndIf
If KeyHit(31) Then Speichern() ; 31:S
If KeyHit(38) Then Laden() ;38:L
Flip
Until KeyHit(1):End

Function Speichern()
file = WriteFile("Koord's.txt")
For k.kreis = Each kreis
   WriteLine file,k\x
   WriteLine file,k\y
Next
CloseFile file
End Function    

Function Laden()
;wie kann man das realisieren...
End Function 


MFG
Bop
~ Hey Ho Let's Go ~
 

Silbersurfer

BeitragDo, Jun 24, 2004 0:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast doch schon den Writeline genutzt, einfach dan das gegenstück
davon Readline z.b so

Code: [AUSKLAPPEN]
Function Laden()
file = ReadFile("Koord's.txt")
   For i = 1 To 10
      k.kreis = New kreis       
      k\x = ReadLine (file)
      k\y = ReadLine (file)
   Next
   
CloseFile file


natürlich noch verfeinern z.B vorher abfragen wie viele einträge u.s.w

gruss

Silbersurfer
-------------------------------------------------------
XP 2000+ 512DDR Radeon 9800 XL 340GB HD
Hompage : http://home.arcor.de/silbersurfer01/
Is Bob engine http://home.arcor.de/silbersur.../Isbob.zip
 

sdjh

BeitragDo, Jun 24, 2004 10:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Function Laden()
file = ReadFile("Koord's.txt")
if file
repeat
      k.kreis = New kreis       
      k\x = ReadLine (file)
      k\y = ReadLine (file)
until eof(file)
   
CloseFile file
return 1
else
retun 0
endif
end function


verfeinert 8)

Now features:
- volle Datei ^^
- Abfangroutine ^^

BladeRunner

Moderator

BeitragDo, Jun 24, 2004 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
wobei eure Laderoutinen,wenn später im Programm genutzt, das geladene an evtl. im Speicher befindliche Kreise anhängen.
Willst Du das vermeiden musst du sämtliche Types die schon existieren vorher löschen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Hubsi

BeitragDo, Jun 24, 2004 11:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Function Laden()
file = ReadFile("Koord's.txt")
if file
While Not Eof(file) ; Erst prüfen, dann auslesen
      k.kreis = New kreis       
      k\x = ReadLine (file)
      k\y = ReadLine (file)
Wend
   
CloseFile file
return 1
else
retun 0
endif
end function
Korrigiert. Sonst wird eine Zeile zuviel ausgelesen. (Die ja eigentlich gar nicht existiert) Wink

Weitermachen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Blitzkrieg Bop

BeitragDo, Jun 24, 2004 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, danke an alle, für die vielen Vorschläge Smile
Ich hab es auch prompt hinbekommen! Warum das vorher nicht ging, weiß ich nicht Confused
Also, hier die fertige Datei und gleichzeitig noch ne Frage an Hubsi, ist es eigentlich unbedingt notwenig das man Eof mit einbezieht - ich hab es nicht ohne Versucht, weil mir die überprüfung sinnvoll erscheint - aber sollte man das immer nutzen?

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
AppTitle "Das laden mehrerer Type Koordinaten?!"

Type kreis
   Field x,y
End Type

Repeat
Cls
Text 0,0,"Drücke Enter um 10 neue Kreise zu erstellen!"
Text 0,30,"Drücke S um zu speichern!"
Text 0,60,"Drück L um zu laden!"

For k.kreis = Each kreis
   Oval k\x,k\y,10,10
Next

If KeyHit(28)
   For i = 1 To 10
      k.kreis = New kreis
      k\x = Rand(20,780)
      k\y = Rand(20,580)
   Next
EndIf
If KeyHit(31) Then Speichern() ; 31:S
If KeyHit(38) Then Laden() ;38:L
Flip
Until KeyHit(1):End

Function Speichern()
file = WriteFile("Koord's.txt")
For k.kreis = Each kreis
   WriteLine file,k\x
   WriteLine file,k\y
Next
CloseFile file
End Function    

Function Laden()
;wie kann man das realisieren...
file =  ReadFile("Koord's.txt")
If file
While Not Eof(file)
   k.kreis = New kreis
   k\x = ReadLine(file)
   k\y = ReadLine(file)
Wend
CloseFile file
EndIf
End Function              
~ Hey Ho Let's Go ~

Hubsi

BeitragDo, Jun 24, 2004 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Du mußt natürlich nicht wenn Du die Anzahl der Einträge kennst. Da aber Types verwendet werden bin ich einfach mal davon ausgegangen das das nicht der Fall ist Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Blitzkrieg Bop

BeitragFr, Jun 25, 2004 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm...jo, klar stimmt schon! Naja, ich hab aber noch eine Frage...
Und zwar geht es bei meinem Type-Test darum, das 2 Types geladen werden und das macht Stress. Es werden einmal Kreise geladen, aber da wo die Kreise sind, sind auch Essen'Symbole. Oder manchmal ist alles durcheinander...Hier der Code vom laden und speichern...kann man doch sicher vrbessern oder?^^
Code: [AUSKLAPPEN]

Function Speichern()
file = WriteFile("Data.txt")
For k.kreis = Each kreis
   WriteLine file,k\x
   WriteLine file,k\y
   WriteLine file,k\breite
   WriteLine file,k\hoehe
   WriteLine file,k\tile
Next
For e.essen = Each essen
   WriteLine file,e\x
   WriteLine file,e\y
   WriteLine file,e\breite
   WriteLine file,e\hoehe
   WriteLine file,e\tile
Next
CloseFile file
End Function    

Function Laden()
file = ReadFile("Data.txt")
If file
While Not Eof(file)
   k.kreis = New kreis
   k\x = ReadLine(file)
   k\y = ReadLine(file)
   k\breite =ReadLine(file)
   k\hoehe = ReadLine(file)
   k\tile = ReadLine(file)

   e.essen = New essen
   e\x = ReadLine(file)
   e\y = ReadLine(file)
   e\breite = ReadLine(file)
   e\hoehe = ReadLine(file)
   e\tile = ReadLine(file)   
Wend
CloseFile file
EndIf
End Function    
~ Hey Ho Let's Go ~

Hubsi

BeitragFr, Jun 25, 2004 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würd das mit einer Trennzeile lösen:
Code: [AUSKLAPPEN]
Function Speichern()
file = WriteFile("Data.txt")
For k.kreis = Each kreis
   WriteLine file,k\x
   WriteLine file,k\y
   WriteLine file,k\breite
   WriteLine file,k\hoehe
   WriteLine file,k\tile
Next
WriteLine file,"Next Block" ; ergänzt
For e.essen = Each essen
   WriteLine file,e\x
   WriteLine file,e\y
   WriteLine file,e\breite
   WriteLine file,e\hoehe
   WriteLine file,e\tile
Next
CloseFile file
End Function     

Function Laden()
file = ReadFile("Data.txt")
If file
While Not Eof(file) And trash$<>"Next Block" ; erweitert
 trash$=ReadLine(file) ; ergänzt
 If trash$<>"Next Block" ; ergänzt
   k.kreis = New kreis
   k\x = trash ; geändert
   k\y = ReadLine(file)
   k\breite =ReadLine(file)
   k\hoehe = ReadLine(file)
   k\tile = ReadLine(file)
Wend ; ergänzt

While Not Eof(file) ; ergänzt
   e.essen = New essen
   e\x = ReadLine(file)
   e\y = ReadLine(file)
   e\breite = ReadLine(file)
   e\hoehe = ReadLine(file)
   e\tile = ReadLine(file)   
Wend
CloseFile file
EndIf
End Function
Ist jetzt nur Pseudo, glaube aber alles bedacht zu haben Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Blitzkrieg Bop

BeitragFr, Jun 25, 2004 14:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm....also dein Code war an sich richtig, außer du hast ein Endif vergessen , in der ersten While/Wend Schleife. Aber dennoch klappt das nicht...Wenn ich jetzt Kreise male und Essen, malt der beim Laden gar kein Essen mehr , sondern anstatt das Essen Kreise... Confused
Code: [AUSKLAPPEN]

Function Speichern()
file = WriteFile("Data.txt")
For k.kreis = Each kreis
   WriteLine file,k\x
   WriteLine file,k\y
   WriteLine file,k\breite
   WriteLine file,k\hoehe
   WriteLine file,k\tile
Next
   WriteLine file,"Nächster Type Block"
For e.essen = Each essen
   WriteLine file,e\x
   WriteLine file,e\y
   WriteLine file,e\breite
   WriteLine file,e\hoehe
   WriteLine file,e\tile
Next
CloseFile file
End Function    

Function Laden()
file = ReadFile("Data.txt")
If file
While Not Eof(file) And trash$ <> "Nächster Type Block"
   trash$= ReadLine(file)
If trash$<>"Nächster Type Block"   
   k.kreis = New kreis
   k\x = ReadLine(file)
   k\y = ReadLine(file)
   k\breite =ReadLine(file)
   k\hoehe = ReadLine(file)
   k\tile = ReadLine(file)
EndIf    
Wend

While Not Eof(file)
   e.essen = New essen
   e\x = ReadLine(file)
   e\y = ReadLine(file)
   e\breite = ReadLine(file)
   e\hoehe = ReadLine(file)
   e\tile = ReadLine(file)   
Wend
CloseFile file
EndIf
End Function    
~ Hey Ho Let's Go ~

Hubsi

BeitragFr, Jun 25, 2004 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast auch diese Zeile nochmal verändert:Code: [AUSKLAPPEN]
k\x = ReadLine(file)
Wenn die zurück-geändert Smile wird nach Code: [AUSKLAPPEN]
k\x = trash
sollte es funzen, denke ich Question Also wenn ich ein Computer wäre würd ich das so durchgehen lassen.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Blitzkrieg Bop

BeitragFr, Jun 25, 2004 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
hmpf....so hab ich es jetzt:
Code: [AUSKLAPPEN]

Function Laden()
file = ReadFile("Data.txt")
If file
While Not Eof(file) And trash$ <> "Nächster Type Block"
   trash$= ReadLine(file)
If trash$<>"Nächster Type Block"   
   k.kreis = New kreis
   k\x = trash$
   k\y = ReadLine(file)
   k\breite =ReadLine(file)
   k\hoehe = ReadLine(file)
   k\tile = ReadLine(file)
EndIf     
Wend

While Not Eof(file)
   e.essen = New essen
   e\x = ReadLine(file)
   e\y = ReadLine(file)
   e\breite = ReadLine(file)
   e\hoehe = ReadLine(file)
   e\tile = ReadLine(file)   
Wend
CloseFile file
EndIf
End Function   

Aber Anstatt dem Essen malt der auch Kreise. Sonst geht das.... Confused Mad
Und wenn ich e\x = trash$ schreibe, tritt dennoch der slebe Fehler auf Crying or Very sad
~ Hey Ho Let's Go ~

Hubsi

BeitragFr, Jun 25, 2004 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann keinen Fehler entdecken. Deine Zeichenroutine arbeitet fehlerfrei? Hast Du die Datei schon mit einem Texteditor geöffnet und nach 'Nächster Type Block' Ausschau gehalten?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Blitzkrieg Bop

BeitragFr, Jun 25, 2004 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
OKay! Also nach deiner Anweisung mal darauf zu gucken habe ich folgenden Test gemacht:
Ich habe 5 Kreise gemalt und 5 Essen.
Für jeden Kreis gilt, das er 5 Werte zugewiesen bekommt.
Also müssten in der Textdatei zunächst 5*5 = 25 Werte stehen, dann
"Nächster Type Block" und dann wieder 5*5 = 25 Werte (diesmals für das Essen) stehen.
Genauso ist es Embarassed
Ich habe auch noch andere Zahlenverhältnisse getestet und es kommt alles hin. Also beim speichern liegt der Fehler nicht , denke ich.

Mein Problem ist ja, das alles Wunderbar klappt, solange man Kreise malt.
Doch wenn man Essen malt, so malt der anstatt das Essen auch einen Kreis.
Angenommen ich male Essen mit den Daten:
Code: [AUSKLAPPEN]

e\x = 5
e\y = 10
e\breite = 10
e\hoehe = 10
e\tile = 1

dann malt der kein Essen sondern einen Kries mit den koordinaten Shocked
~ Hey Ho Let's Go ~

Hubsi

BeitragFr, Jun 25, 2004 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber beim erstellen (also vor jeglichem Laden/Speichern) wird noch alles richtig gezeichnet? Das einzige was mir jetzt noch einfällt ist, das evtl. die falsche Tilenummer (k\tile u. e\tile) angegeben wird, sofern das damit zusammenhängen kann.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Blitzkrieg Bop

BeitragFr, Jun 25, 2004 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm...ich denke sowas ähnliches...naja, bin erstmal noch bei nem Termin und heut abend progge ich den Editor um, ohne e\tile und k\tile...
~ Hey Ho Let's Go ~

Gossi

BeitragFr, Jun 25, 2004 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du wissen willst, ob es am Laden liegt, speichere alle Werte unmittelbar nach dem Laden nochmal in eine neue Datei. Dann schau dir die Datei an, ob sie richtig geladen wurde.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.
 

Blitzkrieg Bop

BeitragSa, Jun 26, 2004 11:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Morgen!
Also, ich bin am verzweifeln...
Ich habe mich heute morgen rangesetzt und meine kleine Spielerei komplett neu gecodet, doch es tritt der gleiche Fehler auf:
Kreise können ohne Probs gemalt/geladen werden.
Aber wenn ich essen male, kommt total das Durcheinander auf - auch wenn ich nur essen male, lädt der Kreise Shocked
Also hier nochmal der Code:
Würde mich eventuell freuen wenn ich jemandem mal alles geben kann damit man halt alle kontrollieren kann, denn ich weiß nicht mehr weiter.
Code: [AUSKLAPPEN]

Function Speichern()
file = WriteFile("Data.txt")
For k.kreis = Each kreis   
   WriteLine file,k\x
   WriteLine file,k\y
   WriteLine file,k\breite
   WriteLine file,k\hoehe
Next
   WriteLine file,"Nächster Block"
For e.essen = Each essen
   WriteLine file,e\x
   WriteLine file,e\y
   WriteLine file,e\breite
   WriteLine file,e\hoehe
   WriteLine file,e\farbe
Next
CloseFile file
End Function    

Function Laden()
file = ReadFile("Data.txt")
If file 
While Not Eof(file) And trash$ <> "Nächster Block"
   trash$ = ReadLine(file)
If trash$ <> "Nächster Block"
   k.kreis = New kreis
   k\x = trash$
   k\y = ReadLine(file)
   k\breite = ReadLine(file)
   k\hoehe = ReadLine(file)
EndIf       
Wend

While Not Eof(file)
   e.essen =  New essen
   e\x = ReadLine(file)
   e\y = ReadLine(file)
   e\breite = ReadLine(file)
   e\hoehe = ReadLine(file)
   e\farbe = ReadLine(file)
Wend
CloseFile file
EndIf
End Function    

Evil or Very Mad
~ Hey Ho Let's Go ~

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group