saving
BlitzPlus Forums/BlitzPlus Programming/saving| 
 | ||
| How would i make it where this code saves and load each type, so you can save, move them all, load, and they return to all of there own postions where they were saved? If you even understood that, the code is below. It only makes one dot return to its original position, instead of all of them. Sorry its not formatted correctly. I dont know how to make the code have its own spiffy little box. thnx. Type p Field x,y End Type p.p = New p p\x= 100 p\y = 200 p.p = New p p\x= 170 p\y = 249 p.p = New p p\x= 500 p\y = 100 Graphics 800,600 While Not KeyHit(1) Cls For p.p = Each p ;loads the dots position If KeyHit(2) ; Open a file to write to fileout = WriteFile("mydata.dat") ; Write the information to the file WriteInt( fileout, p\x) WriteInt( fileout, p\y ) ; Close the file CloseFile( fileout ) EndIf ;loads the dots position If KeyHit(3) ; Open a file to write to filein = ReadFile("mydata.dat") ; Write the information to the file p\x=ReadInt( filein ) p\y=ReadInt( filein ) ; Close the file CloseFile( filein ) EndIf ;draws the dot Oval p\x,p\y,10,10 ;moves each dot around If KeyDown(200) p\y=p\y-2 EndIf If KeyDown(208) p\y=p\y+2 EndIf If KeyDown(203) p\x=p\x-2 EndIf If KeyDown(205) p\x=p\x+2 EndIf Next Flip Wend | 
| 
 | ||
| 
function SaveAllPTypeToFile(FileName$)
outfile=writefile (FileName$)
if outfile=0 then runtimeerror("Invalid File Name Specified")
for P.P=each P
      count=count+1
next
writeline outfile,count ;a count to put into the file of how many 'p' types you are going to store, not necessary as you could use EOF when loading but still useful...
for p.p=each p
writeline outfile,p\x
writeline outfile,p\y
next
closefile outfile
end function
Function LoadPTypeFromFile(FileName$)
infile=readfile(FileName$)
if Infile=0 then runtimeerror("Not a valid file")
count=readline(infile)
for i=1 to count
p.p=new p
p\x=readline(infile)
p\y=readline(infile)
next
closefile infile
end function
That should help you along a bit. | 
| 
 | ||
| Wow! Thanks a ton! I've been trying to get this code right for months! I applied it to my game and it works perfectly! Again, Thanks! :) | 
| 
 | ||
| you can make a code box using [code] to begin itand [/code] to end it | 
| 
 | ||
| Hmmm....on second thought, theres huge glitches. I save the game, quit, load it back up and it just lays down random tiles in random spots. Can somebody please check my save\load function? Thnx. ;SAVE 
If KeyHit(2)
outfile=WriteFile (filename$)
If outfile=0 Then RuntimeError("Invalid File Name Specified")
For c.c=Each c
      ccount=ccount+1
Next
WriteLine outfile,ccount ;a count to put into the file of how many 'p' types you are going to store, not necessary as you could use EOF when loading but still useful...
For c.c=Each c
WriteLine outfile,c\x
WriteLine outfile,c\y
Next
For b1.b1=Each b1
      b1_count=b1_count+1
Next
WriteLine outfile,b1_count ;a count to put into the file of how many 'p' types you are going to store, not necessary as you could use EOF when loading but still useful...
For b1.b1=Each b1
WriteLine outfile,b1\x
WriteLine outfile,b1\y
Next
For b2.b2=Each b2
      b2_count=b2_count+1
Next
WriteLine outfile,b2_count ;a count to put into the file of how many 'p' types you are going to store, not necessary as you could use EOF when loading but still useful...
For b2.b2=Each b2
WriteLine outfile,b2\x
WriteLine outfile,b2\y
Next
For b3.b3=Each b3
      b3_count=b3_count+1
Next
WriteLine outfile,b3_count ;a count to put into the file of how many 'p' types you are going to store, not necessary as you could use EOF when loading but still useful...
For b3.b3=Each b3
WriteLine outfile,b3\x
WriteLine outfile,b3\y
Next
For b5.b5=Each b5
      b5_count=b5_count+1
Next
WriteLine outfile,b5_count ;a count to put into the file of how many 'p' types you are going to store, not necessary as you could use EOF when loading but still useful...
For b5.b5=Each b5
WriteLine outfile,b5\x
WriteLine outfile,b5\y
Next
For g.g=Each g
      g_count=g_count+1
Next
WriteLine outfile,g_count ;a count to put into the file of how many 'p' types you are going to store, not necessary as you could use EOF when loading but still useful...
For g.g=Each g
WriteLine outfile,g\x
WriteLine outfile,g\y
Next
For k.k=Each k
      k_count=k_count+1
Next
WriteLine outfile,k_count ;a count to put into the file of how many 'p' types you are going to store, not necessary as you could use EOF when loading but still useful...
For k.k=Each k
WriteLine outfile,k\x
WriteLine outfile,k\y
Next
For f.f=Each f
      f_count=f_count+1
Next
WriteLine outfile,f_count ;a count to put into the file of how many 'p' types you are going to store, not necessary as you could use EOF when loading but still useful...
For f.f=Each f
WriteLine outfile,f\x
WriteLine outfile,f\y
Next
For f2.f2=Each f2
      f2_count=f2_count+1
Next
WriteLine outfile,f2_count ;a count to put into the file of how many 'p' types you are going to store, not necessary as you could use EOF when loading but still useful...
For f2.f2=Each f2
WriteLine outfile,f2\x
WriteLine outfile,f2\y
Next
For sw.sw=Each sw
      sw_count=sw_count+1
Next
WriteLine outfile,sw_count ;a count to put into the file of how many 'p' types you are going to store, not necessary as you could use EOF when loading but still useful...
For sw.sw=Each sw
WriteLine outfile,sw\x
WriteLine outfile,sw\y
Next
For sw2.sw2=Each sw2
      sw2_count=sw2_count+1
Next
WriteLine outfile,sw2_count ;a count to put into the file of how many 'p' types you are going to store, not necessary as you could use EOF when loading but still useful...
For sw2.sw2=Each sw2
WriteLine outfile,sw2\x
WriteLine outfile,sw2\y
Next
WriteLine outfile,sx
WriteLine outfile,sy
WriteLine outfile,sx2
WriteLine outfile,sy2
WriteLine outfile,d\x
WriteLine outfile,d\y
CloseFile outfile
EndIf
.load
;LOAD
If KeyHit(59)
infile=ReadFile(filename$)
If Infile=0 Then RuntimeError("Not a valid file")
For sw.sw = Each sw
Delete sw
Next
For sw2.sw2 = Each sw2
Delete sw2
Next
For b1.b1 = Each b1
Delete b1
Next
For b2.b2 = Each b2
Delete b2
Next
For b3.b3 = Each b3
Delete b3
Next
For b5.b5 = Each b5
Delete b5
Next
For c.c  = Each c 
Delete c 
Next
For g.g  = Each g 
Delete g 
Next
For k.k  = Each k 
Delete k 
Next
For f.f  = Each f 
Delete f 
Next
For f2.f2  = Each f2 
Delete f2 
Next
ccount=ReadLine(infile)
For i=1 To ccount
c.c=New c
c\x=ReadLine(infile)
c\y=ReadLine(infile)
c\xx = c\x
c\yy = c\y
c\f = 0
c\w = 100
c\t = 0
Next
b1_count=ReadLine(infile)
For i=1 To b1_count
b1.b1=New b1
b1\x=ReadLine(infile)
b1\y=ReadLine(infile)
Next
b2_count=ReadLine(infile)
For i=1 To b2_count
b2.b2=New b2
b2\x=ReadLine(infile)
b2\y=ReadLine(infile)
Next
b3_count=ReadLine(infile)
For i=1 To b3_count
b3.b3=New b3
b3\x=ReadLine(infile)
b3\y=ReadLine(infile)
Next
b5_count=ReadLine(infile)
For i=1 To b5_count
b5.b5=New b5
b5\x=ReadLine(infile)
b5\y=ReadLine(infile)
b5\xx = b5\x
b5\yy = b5\y
Next
g_count=ReadLine(infile)
For i=1 To g_count
g.g=New g
g\x=ReadLine(infile)
g\y=ReadLine(infile)
g\xx = g\x
g\yy = g\y
g\f = 0
g\d = Rand(0,1)
g\w = 100
g\t = 0
Next
k_count=ReadLine(infile)
For i=1 To k_count
k.k=New k
k\x=ReadLine(infile)
k\y=ReadLine(infile)
k\xx = k\x
k\yy = k\y
k\f = 0
k\d = Rand(0,1)
k\w = 100
k\t = 0
Next
f_count=ReadLine(infile)
For i=1 To F_count
F.F=New F
F\x=ReadLine(infile)
F\y=ReadLine(infile)
F\xx = F\x
F\yy = F\y
F\f = 0
F\d = Rand(0,1)
F\w = 100
F\t = 0
Next
f2_count=ReadLine(infile)
For i=1 To F2_count
F2.F2=New F2
F2\x=ReadLine(infile)
F2\y=ReadLine(infile)
F2\xx = F2\x
F2\yy = F2\y
F2\f = 0
F2\d = Rand(0,1)
F2\w = 100
F2\t = 0
Next
sw_count=ReadLine(infile)
For i=1 To sw_count
sw.sw=New sw
sw\x=ReadLine(infile)
sw\y=ReadLine(infile)
sw\xx = sw\x
sw\yy = sw\y
Next
sw2_count=ReadLine(infile)
For i=1 To sw2_count
sw2.sw2=New sw2
sw2\x=ReadLine(infile)
sw2\y=ReadLine(infile)
sw2\xx = sw2\x
sw2\yy = sw2\y
Next
sx=ReadLine(infile)
sy=ReadLine(infile)
sx2=ReadLine(infile)
sy2=ReadLine(infile)
d\x=ReadLine(infile)
d\y=ReadLine(infile)
CloseFile infile
EndIf
;ENd load
 | 
| 
 | ||
| you might try grouping all those values in to one larger type like this: 
type TileLocation
        Field Ccount,cX,cY
        Field B1count,b1X,b1Y
end type
Then you can save your information using the following. 
for Total.TileLocation = each TileLocation
    AllData$ = Total\Ccount + ","
    AllData$ = AllData$ + Total\cX + ","
    AllData$ = AllData$ + Total\cY + ","
    AllData$ = AllData$ + Total\B1count + ","
    AllData$ = AllData$ + Total\b1X + ","
    AllData$ = AllData$ + Total\b1Y
    WriteLine(outFile, AllData$)
    AllData$ = ""
nextThat will give you a Comma Delimited string containing each instance of your type. You then simply need to read it back in to a string, split it up into its component parts and restore the information back into each field. This can be done using the following code: Function Split(AllData$) Local splitcounter = 0 pntr = -1:counter = 0: oldpntr = 0 While pntr <> 0 pntr = Instr(AllData$, ",", pntr + 1) If pntr > 0 Then splitcounter = splitcounter + 1 Wend Dim SplitData$(splitcounter + 1) pntr = 0:oldpntr = Instr(AllData$, ",", 0) SplitData$(1) = Left$(AllData$, oldpntr - 1) For counter = 2 To splitcounter pntr = oldpntr + 1 oldpntr = Instr(AllData$, ",", pntr) SplitData$(counter) = Mid$(AllData$, pntr, (oldpntr - pntr)) Next SplitData$(counter) = Right$(AllData$, Len(AllData$) - oldpntr) Return (splitcounter + 1) End Function The above code with split the string AllData$ in to it's component parts and return each individual item in the Array SplitData$() so to reassign your values to your Fields you could use something like this: 
			inFile = ReadFile("Your_File.dat")
				While (Not Eof(inFile))
					FilesProcessedCurrent = FilesProcessedCurrent + 1
					Total.TileLocation = New TileLocation
					AllData$ = ReadLine(inFile)
					totalSplits = Split( AllData$ )
					Total\Ccount 			= SplitData$(1)
					Total\cX = SplitData$(2)
					Total\cY	 		= SplitData$(3)
					Total\B1count	 	= SplitData$(4)
					Total\b1X	 	= SplitData$(5)
					Total\b1Y		= SplitData$(6)
				
				Wend
			CloseFile(inFile)
This is UNTESTED speculative code. But I think it should work. | 
| 
 | ||
| this is extremely confusing...Ive never even heard of half these comands |