首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

遊戲地圖存儲新思路:用文本文件替代硬編碼數組

     編輯:Java 相關知識

痛點分析

2D 遊戲(如坦克大戰、泡泡堂)地圖通常用二維數組硬編碼。地圖多時,代碼膨脹、維護困難、可讀性差。

遊戲地圖示例 泡泡堂地圖

文本文件存儲方案

  • 用記事本編輯地圖,字符代表元素(如 0=空地、1=牆、a=玩家),直觀可編輯
  • 讀取時用字節流(FileInputStream),效率高於對象流
  • 理論支持 256 種元素(byte 8 位),實際 a-z+0-9 足夠

核心解析代碼

public int[][] createMap(String mapName) {
    File file = new File(mapName);
    int[][] map = null;
    ArrayList<Byte> list = new ArrayList<>();
    if (file.exists()) {
        try (InputStream in = new FileInputStream(file)) {
            byte[] content = new byte[in.available()];
            in.read(content);
            // 載入列表
            for (byte b : content) list.add(b);
            // 移除換行符:Windows \r\n (13,10) 或 Unix \n (10)
            list.removeIf(b -> b == 10 || b == 13);
            // 按行分割構建二維數組
            String text = new String(content);
            String[] lines = text.split("\r\n");
            map = new int[lines.length][lines[0].length()];
            int idx = 0;
            for (int i = 0; i < map.length; i++) {
                for (int j = 0; j < map[i].length; j++) {
                    map[i][j] = list.get(idx++) - 48; // '0'=48 轉數字
                }
            }
        } catch (Exception e) { e.printStackTrace(); }
    }
    return map;
}

關鍵點

  • 必須移除不可見的回車(13)/換行(10),否則數組索引錯位
  • split("\r\n") 兼容 Windows 換行,Unix 下需調整為 \n
  • 字符減 48('0' 的 ASCII)轉數值,若用字母需對應調整

優勢總結

  • 地圖與代碼分離,美術/策劃可直接修改文本
  • 新增地圖只需加文件,無需改代碼重編譯
  • 版本控制友好,文本 diff 清楚可見
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved