package com.zombie.game.model; import java.util.List; import java.util.Map; import java.util.HashMap; import java.util.ArrayList; /** Serializable map data for storage or network transfer / 可序列化的地图数据,用于存储或网络传输 */ public class MapData { // Map unique identifier / 地图唯一标识 private String id; // Map display name / 地图显示名称 private String name; // Map width in grid units / 地图宽度(网格单位) private int width; // Map height in grid units / 地图高度(网格单位) private int height; // List of wall data maps / 墙壁数据映射列表 private List> walls; // List of player spawn coordinates / 玩家出生点坐标列表 private List> playerSpawns; // List of zombie spawn coordinates / 僵尸出生点坐标列表 private List> zombieSpawns; // Default constructor / 默认构造函数 public MapData() { this.walls = new ArrayList<>(); this.playerSpawns = new ArrayList<>(); this.zombieSpawns = new ArrayList<>(); } // Full constructor with all fields / 全字段构造函数 public MapData(String id, String name, int width, int height, List> walls, List> playerSpawns, List> zombieSpawns) { this.id = id; this.name = name; this.width = width; this.height = height; this.walls = walls; this.playerSpawns = playerSpawns; this.zombieSpawns = zombieSpawns; } // Get map ID / 获取地图ID public String getId() { return id; } // Set map ID / 设置地图ID public void setId(String id) { this.id = id; } // Get map name / 获取地图名称 public String getName() { return name; } // Set map name / 设置地图名称 public void setName(String name) { this.name = name; } // Get map width / 获取地图宽度 public int getWidth() { return width; } // Set map width / 设置地图宽度 public void setWidth(int width) { this.width = width; } // Get map height / 获取地图高度 public int getHeight() { return height; } // Set map height / 设置地图高度 public void setHeight(int height) { this.height = height; } // Get walls list / 获取墙壁列表 public List> getWalls() { return walls; } // Set walls list / 设置墙壁列表 public void setWalls(List> walls) { this.walls = walls; } // Get player spawns / 获取玩家出生点 public List> getPlayerSpawns() { return playerSpawns; } // Set player spawns / 设置玩家出生点 public void setPlayerSpawns(List> playerSpawns) { this.playerSpawns = playerSpawns; } // Get zombie spawns / 获取僵尸出生点 public List> getZombieSpawns() { return zombieSpawns; } // Set zombie spawns / 设置僵尸出生点 public void setZombieSpawns(List> zombieSpawns) { this.zombieSpawns = zombieSpawns; } // Convert this map data to a 2D cell array / 将此地图数据转换为二维格子数组 public int[][] toCells() { int[][] cells = new int[height][width]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { cells[y][x] = 0; } } // Mark wall cells / 标记墙壁格子 for (Map wall : walls) { int x = (Integer) wall.get("x"); int y = (Integer) wall.get("y"); if (x >= 0 && x < width && y >= 0 && y < height) { cells[y][x] = 1; } } // Mark player spawn cells / 标记玩家出生点格子 for (Map spawn : playerSpawns) { int x = spawn.get("x"); int y = spawn.get("y"); if (x >= 0 && x < width && y >= 0 && y < height) { cells[y][x] = 2; } } // Mark zombie spawn cells / 标记僵尸出生点格子 for (Map spawn : zombieSpawns) { int x = spawn.get("x"); int y = spawn.get("y"); if (x >= 0 && x < width && y >= 0 && y < height) { cells[y][x] = 3; } } return cells; } // Create MapData from a GameMap instance / 从GameMap实例创建MapData public static MapData fromGameMap(String id, String name, GameMap map) { List> walls = new ArrayList<>(); List> playerSpawns = new ArrayList<>(); List> zombieSpawns = new ArrayList<>(); // Convert static walls from raw data for (int[] pos : map.getStaticWallData()) { Map wallData = new HashMap<>(); wallData.put("x", pos[0]); wallData.put("y", pos[1]); wallData.put("type", "static"); walls.add(wallData); } // Convert nut walls from raw data for (int[] pos : map.getNutWallData()) { Map wallData = new HashMap<>(); wallData.put("x", pos[0]); wallData.put("y", pos[1]); wallData.put("type", "nut"); walls.add(wallData); } // Convert player spawn points for (int[] spawn : map.getSpawnPoints()) { Map sp = new HashMap<>(); sp.put("x", spawn[0]); sp.put("y", spawn[1]); playerSpawns.add(sp); } return new MapData(id, name, map.getWidth(), map.getHeight(), walls, playerSpawns, zombieSpawns); } }