マップを読み込む
マップをファイルから読み込めるようにMapクラスを拡張します。基本的にRPGのマップの読み込みと同じです。これで自由にステージを作れるようになります。
マップファイルの構造
マップファイル(map01.dat)の中身は次のようになってます。スクロール処理を実装しているので画面の大きさより大きくても大丈夫です。
20 60 111111111111111111111111111111111111111111111111111111111111 100000000000000000000000000000000000000000000000000000000001 100000000000000000000000000000000000000000000000000000000001 100000000000000000000000000000000000000000000000000000000001 100000000000000000000000000000000000000000000000000000000001 100000000000000000000000000000000000000000000000000000000001 100000000000000000000000000000000000000000000000000000000001 100000000000000000000000000000000000000000000000000000000001 100000111110000000000000000000000000000000000000111111111111 100000000000000000000000000000000000000000000000000000000001 100000000000000000000000000000000000000011111111000000000001 100000000000000000000000000000001110000000000000000000000001 100000000000000000000000000000000000000000000000000000000001 100000000000000000000000011100000000000000000000000000000001 100000000000000000011100000000000000000000000000001000000001 100000000000000000000000000000000000000000000000000000000001 100001110000011100000000000000000000000001000000000000000001 100000000000000000000000011111111110000001000000000000000001 100000000000000000000000000000000000000001000000000000000001 111111111111111111111111111111111111111111111111111111111111
20は行数、60は列数です。マップは0が何もない空間で1はブロックブロックのイメージを表しています。まあマップに見えますよね。
マップの読み込み
マップを読み込む処理はMapクラスにまとめています。
// マップ private int[][] map; // 行数 private int row; // 列数 private int col; // 幅 private int width; // 高さ private int height;
幅はマップ全体の幅をピクセルで表した大きさです。高さも同様です。マップを読み込んでいるのはload()です。
/** * マップをロードする * * @param filename マップファイル */ private void load(String filename) { try { // ファイルを開く BufferedReader br = new BufferedReader(new InputStreamReader( getClass().getResourceAsStream("map/" + filename))); // 行数を読み込む String line = br.readLine(); row = Integer.parseInt(line); // 列数を読み込む line = br.readLine(); col = Integer.parseInt(line); // マップを作成 map = new int[row][col]; for (int i = 0; i < row; i++) { line = br.readLine(); for (int j = 0; j < col; j++) { map[i][j] = Integer.parseInt(line.charAt(j) + ""); } } } catch (Exception e) { e.printStackTrace(); } }
特に改めて解説することもないかな。コメントのとおりです。RPGの追記でも書きましたがテキストファイルでマップを作るのはファイルサイズの問題から好ましくないです。マップエディタを作ってバイナリ形式で保存するのがいいと思います。