Reading tilemap data
BlitzMax Forums/BlitzMax Beginners Area/Reading tilemap data
| ||
| I have a question about how to import tile mapdata. The following example (just the type, it will not run on its own) is taken from Sloan Kelly's BlitzMax book, it will read the tilemap data from an external file with the numbers 0-9. The problem is how do I get it to accept numbers from 10 and up. I need to be able to just insert an comma between the numbers, and be able to take a number with more than two digits. Any suggetions? It does not need to use the example below Type TMap Field image:TImage Field blocks:TList = CreateList() Method LoadBlocks(img:String) image = LoadAnimImage(img, 25, 25, 0, 4) End Method Method LoadMap(map:String) x:Int = 0 y:Int = 0 ClearList(blocks) file = OpenFile(map) While Not Eof(file) 'Cls 'DrawText("Processing Map", 50, 50) 'DrawText("X = " + X, 50, 60) 'DrawText("Y = " + Y, 50, 70) 'Flip s:String = ReadLine(file) 'If s:String <> "," Then '''' egen For i:Int = 1 To Len(s) block:TBlock = New TBlock block.X = x block.Y = y block.Index = Int(Mid(s, i, 1)) - 1 blocks.AddLast(block) x = x + 25 If x >= 800 x = 0 y = y + 25 End If Next 'EndIf ''''egen Wend End Method Method DrawMap() For b:TBlock = EachIn blocks DrawImage(image, b.X, b.Y, b.Index) Next End Method Function Create:TMap(path:String, image:String) o:TMap = New TMap o.LoadBlocks(image) o.LoadMap(path) Return o End Function End Type |
| ||
Strict
Local myString$ = "10, 20, 30, 40, 50"
Local myArrayOfStrings$[] = myString$.Split(",")
For Local thisString$ = EachIn myArrayOfStrings$
Print thisString$.Trim()
Next
Print
Print (myArrayOfStrings$[0]) + " + " + Int(myArrayOfStrings$[1]) + " = " + (int(myArrayOfStrings$[0]) + Int(myArrayOfStrings$[1])) |
| ||
| Thanks, I will look into it later. (i'm making pixels right now ;- ) ) |
| ||
| btw, BMax already has a TMap object, which isn't related to mapdata like you're doing. So at some point you may get into problems.. |
| ||
Just knocked up this code which should help you. :)
SuperStrict
Graphics 800, 600
Global MapWidth:Int = 800 / 50 '=16
Global MapHeight:Int = 600 / 50 ' =12
Global MapArray:TTile[MapWidth, MapHeight]
Type TTile
Field x:Int
Field y:Int
Field TileID:Int
Global List:TList = New TList
Function Create:TTile()
Return New TTile
End Function
Function LoadArrayDataFromFile()
Local fileStream:TStream
filestream = ReadFile("MapData.txt")
For Local y:Int = 0 Until MapHeight
For Local x:Int = 0 Until MapWidth
MapArray[x, y].TileID = ReadInt(Filestream)
Next
Next
CloseFile Filestream
End Function
Function SaveArrayDataToFile()
Local FileStream:TStream
FileStream = WriteFile("MapData.txt")
For Local y:Int = 0 Until MapHeight
For Local x:Int = 0 Until MapWidth
WriteInt(FileStream, MapArray[x, y].TileID)
Next
Next
CloseFile filestream
End Function
Function ClearMapArray()
For Local x:Int = 0 Until MapWidth
For Local y:Int = 0 Until MapHeight
MapArray[x, y].TileID = 0
Next
Next
End Function
Function DrawMapData()
For Local x:Int = 0 Until MapWidth
For Local y:Int = 0 Until MapHeight
DrawText MapArray[x, y].TileID, x * 50, y * 50
Next
Next
End Function
Function FillArrayWithRandomNumbers()
For Local y:Int = 0 Until MapHeight
For Local x:Int = 0 Until MapWidth
MapArray[x, y] = TTile.Create()
MapArray[x, y].TileID = Rand(1, 1000)
Next
Next
End Function
End Type
TTile.FillArrayWithRandomNumbers() ' We fill the Map Array with random number
TTile.SaveArrayDataToFile() ' We save whats in the MapArray to a file
TTile.ClearMapArray() ' We set the maparray to 0. We will then read back in to the array the data from the file.
TTile.LoadArrayDataFromFile() ' we load back the array data from file.
While Not KeyHit(KEY_ESCAPE)
Cls
TTile.DrawMapData
Flip
Wend
|
| ||
| Thanks alot Amon. Again I will look into it. (i'm also making the graphics for a remake/inspired of HERO for the C64, and the graphics is going ok for the moment. So then I get tired of drawing in a day or two I will look into the coding.) - CS TBL, I have not played to much with it, but the example (from which it comes from, works without any problems. But I'll probably change it 'name' anyway, just to be sure. |