程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java:記事本保存游戲地圖

java:記事本保存游戲地圖

編輯:關於JAVA

起初看到這個,你的想法是什麼,這小子想干嘛呢???

這個方法是在一個多月前做多線程游戲的時候想到的,最初是中南的一位朋友提出來的。最近的博客老是在“炒剩飯”,一些新學的東西也總是來不及作總結,不過覺得這個想法確實不錯,所以也才拿出來再與大家探討一下,說不定還有更好的方法。

我們所玩的一些場景不動2D的游戲,往往需要構建一些地圖,如泡泡堂,坦克大戰等等。

而在地圖構建的時候,我們往往采用的是用一個數組將所需的地圖保存起來,但是做到後來,需要的地圖多了,保存的效率往往也就偏低了,而且還會耗費大多的代碼去填數組。

在一個記事本中把你想要做的地圖保存起來,看上去也更加直觀,簡潔。使用IO流進行字節讀取是出錯率相對較低的,所以我們的地圖中理論上可以存在256種元素(一個byte占8位)。當然,我們或許不需要這麼多,a-z加上1到9就完全可以滿足我們的日常需求了。

最開始的時候,有人問到,既然是OOP,為什麼不用對象來保存我們的地圖元素?原因很簡單,我們操作byte數據的效率要高於操作對象本身。

好的,閒話不多說,方法如下:

首先,我們需要一個ArrayList來保存數據,有什麼用呢?繼續看你就知道了

//創建地圖數組來保存數據

ArrayList<Byte> MapList=new ArrayList<Byte>();

查看本欄目

Java代碼

/** 
 * 將記事本中的數據讀入到數組當中 
 * @param mapName 記事本的文件名 
 * @return 得到的字節數組 
*/
public int[][] createMap(String mapName){  
    File file=new File(mapName);  
    //創建地圖數組  
    int map[][]=null;  
    if(file.exists()){  
        try{  
        InputStream in=new FileInputStream(file);  
        //創建與文件相同大小的字節數組  
        byte content[]=new byte[in.available()];  
        //讀取字節數組  
        in.read(content);  
        //將內容添加到隊列當中  
        for(int i=0;i<content.length;i++){  
            MapList.add(content[i]);  
        }  
        //移除回車符  
        for(int i=0;i<MapList.size();i++){  
            if(MapList.get(i)==10){  
                       MapList.remove(i);  
            }  
        }  
        //移除換行符  
        for(int i=0;i<MapList.size();i++){  
            if(MapList.get(i)==13){  
                       MapList.remove(i);  
            }  
        }  
        //封裝字節內容  
        String string=new String(content);  
        String arr[]=string.split("\r\n");  
        //存入數組當中  
        int index=0;  
        map=new int[arr.length][arr[0].length()];  
        for(int i=0;i<map.length;i++){  
            for(int j=0;j<map[i].length;j++{  
                    map[i][j]=MapList.get(index)-48;  
                    index++;  
            }  
        }  
                 in.close();  
        }catch(Exception e){  
                e.printStackTrace();  
        }  
    }else{  
                    System.out.println("文件不存在");  
    }  
    return map;  
}

比較關鍵的步驟是移除回車換行字符,這兩個字符是我們看不到的,只有在打印的時候才會發現他們,

莫名其妙的多出個10跟13,起初我也是覺得納悶,任何方法當然都要測試一下,自己做個記事本地圖試一下吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved