| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- package main
- import (
- "encoding/json"
- "fmt"
- "io/fs"
- "os"
- "path/filepath"
- "strings"
- )
- func main() {
- dir := "D:\\Workspace\\f1\\server-feat\\etc\\data_map\\s1"
- filepath.Walk(dir, func(path string, info fs.FileInfo, err error) error {
- if err != nil {
- fmt.Printf("walk error: %v\n", err)
- return err
- }
- if info.IsDir() {
- return nil
- }
- if filepath.Ext(info.Name()) != ".json" {
- return nil
- }
- fmt.Printf("read file: %s\n", info.Name())
- bytes, err := os.ReadFile(path)
- if err != nil {
- return err
- }
- var data mapAreaData
- if err := json.Unmarshal(bytes, &data); err != nil {
- return err
- }
- data.initTileData()
- f, err := os.OpenFile(strings.TrimSuffix(info.Name(), ".json")+".txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
- if err != nil {
- return err
- }
- defer f.Close()
- fmt.Printf("write file: %s\n", info.Name()+".txt")
- for x, ys := range data.tileData {
- if x%2 == 1 {
- f.WriteString(" ")
- }
- for _, v := range ys {
- f.WriteString(fmt.Sprintf("%d ", v))
- }
- f.WriteString("\n")
- }
- fmt.Println(data.String())
- return nil
- })
- }
- type (
- point struct {
- X int32 `json:"x"`
- Y int32 `json:"y"`
- }
- mapAreaData struct {
- Name string `json:"name"`
- Width int32 `json:"width"`
- Height int32 `json:"height"`
- LeftUp point `json:"leftUp"`
- RightDown point `json:"rightDown"`
- MapData []int32 `json:"mapdata"`
- tileData [][]int32
- }
- )
- func (p *mapAreaData) String() string {
- return fmt.Sprintf("MapAreaData(Name:%s, Width:%d, Height:%d, LeftUp:%s, RightDown:%s)",
- p.Name, p.Width, p.Height, p.LeftUp.String(), p.RightDown.String())
- }
- func (p *mapAreaData) initTileData() {
- p.tileData = make([][]int32, p.Width)
- for i := range p.tileData {
- p.tileData[i] = make([]int32, p.Height)
- }
- for x := range p.Width {
- for y := range p.Height {
- p.tileData[x][y] = p.MapData[y*p.Width+x]
- }
- }
- }
- func (p *point) String() string {
- return fmt.Sprintf("Point(%d, %d)", p.X, p.Y)
- }
|