map_dump.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/fs"
  6. "os"
  7. "path/filepath"
  8. "strings"
  9. )
  10. func main() {
  11. dir := "D:\\Workspace\\f1\\server-feat\\etc\\data_map\\s1"
  12. filepath.Walk(dir, func(path string, info fs.FileInfo, err error) error {
  13. if err != nil {
  14. fmt.Printf("walk error: %v\n", err)
  15. return err
  16. }
  17. if info.IsDir() {
  18. return nil
  19. }
  20. if filepath.Ext(info.Name()) != ".json" {
  21. return nil
  22. }
  23. fmt.Printf("read file: %s\n", info.Name())
  24. bytes, err := os.ReadFile(path)
  25. if err != nil {
  26. return err
  27. }
  28. var data mapAreaData
  29. if err := json.Unmarshal(bytes, &data); err != nil {
  30. return err
  31. }
  32. data.initTileData()
  33. f, err := os.OpenFile(strings.TrimSuffix(info.Name(), ".json")+".txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
  34. if err != nil {
  35. return err
  36. }
  37. defer f.Close()
  38. fmt.Printf("write file: %s\n", info.Name()+".txt")
  39. for x, ys := range data.tileData {
  40. if x%2 == 1 {
  41. f.WriteString(" ")
  42. }
  43. for _, v := range ys {
  44. f.WriteString(fmt.Sprintf("%d ", v))
  45. }
  46. f.WriteString("\n")
  47. }
  48. fmt.Println(data.String())
  49. return nil
  50. })
  51. }
  52. type (
  53. point struct {
  54. X int32 `json:"x"`
  55. Y int32 `json:"y"`
  56. }
  57. mapAreaData struct {
  58. Name string `json:"name"`
  59. Width int32 `json:"width"`
  60. Height int32 `json:"height"`
  61. LeftUp point `json:"leftUp"`
  62. RightDown point `json:"rightDown"`
  63. MapData []int32 `json:"mapdata"`
  64. tileData [][]int32
  65. }
  66. )
  67. func (p *mapAreaData) String() string {
  68. return fmt.Sprintf("MapAreaData(Name:%s, Width:%d, Height:%d, LeftUp:%s, RightDown:%s)",
  69. p.Name, p.Width, p.Height, p.LeftUp.String(), p.RightDown.String())
  70. }
  71. func (p *mapAreaData) initTileData() {
  72. p.tileData = make([][]int32, p.Width)
  73. for i := range p.tileData {
  74. p.tileData[i] = make([]int32, p.Height)
  75. }
  76. for x := range p.Width {
  77. for y := range p.Height {
  78. p.tileData[x][y] = p.MapData[y*p.Width+x]
  79. }
  80. }
  81. }
  82. func (p *point) String() string {
  83. return fmt.Sprintf("Point(%d, %d)", p.X, p.Y)
  84. }