java:記事本儲存遊戲地圖

來源:互聯網
上載者:User

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

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

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

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

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

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

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

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

//建立地圖數組來儲存資料

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

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/

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,起初我也是覺得納悶,任何方法當然都要測試一下,自己做個記事本地圖試一下吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.