
起初看到這個,你的想法是什麼,這小子想干嘛呢???
這個方法是在一個多月前做多線程游戲的時候想到的,最初是中南的一位朋友提出來的。最近的博客老是在“炒剩飯”,一些新學的東西也總是來不及作總結,不過覺得這個想法確實不錯,所以也才拿出來再與大家探討一下,說不定還有更好的方法。
我們所玩的一些場景不動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,起初我也是覺得納悶,任何方法當然都要測試一下,自己做個記事本地圖試一下吧。