Mapchip を並べて背景画像を表示



Mapchip の Index 番号を配列で定義して、背景画像を表示します。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. CARD.java をコンパイルして CARD.class を作成して下さい。
    CARD.class の説明は 矢印キーでキャラクタを操作 を参照して下さい。
    Sprite の番号を配列で定義して、背景画像を表示します。
    Rpg_03.java の名前で CARD.class と同じフォルダーに格納して下さい。
    //★ Mapchip を並べて背景画像を表示    前田 稔
    import java.awt.*;
    import javax.swing.*;
    
    class Rpg_03 extends JFrame
    {   CARD    card;
        // 15, 10,  16, 16,  Mapの幅と高さ, Mapchipの幅と高さ
        int     TT[][] =
        { { 56, 57, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 76, 77 }, 
          { 76, 77, 49, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 50, 51 }, 
          { 48, 68, 69, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 70, 71 }, 
          { 48, 35, 2, 2, 2, 2, 2, 2, 2, 2, 54, 55, 2, 2, 12 }, 
          { 48, 15, 2, 2, 54, 55, 2, 2, 2, 2, 74, 75, 2, 2, 32 }, 
          { 48, 35, 2, 2, 74, 75, 2, 2, 2, 2, 2, 2, 2, 2, 12 }, 
          { 48, 35, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12 }, 
          { 48, 15, 2, 2, 2, 2, 2, 2, 2, 52, 53, 2, 2, 2, 32 }, 
          { 57, 44, 45, 2, 2, 2, 2, 2, 2, 72, 73, 2, 46, 46, 47 }, 
          { 77, 64, 65, 9, 8, 9, 8, 9, 8, 9, 8, 9, 66, 66, 67 } };
    
        // Main
        public static void main(String args[])
        {   new Rpg_03();
        }
    
        // Constructor
        public Rpg_03()
        {   super("Back 背景画像");
            card = new CARD("Chip.gif",16,16);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(300,240);
            setVisible(true);
        }
    
        // Paint Method
        public void paint(Graphics g)
        {   super.paint(g);
            for(int i=0; i<10; i++)
                for(int j=0; j<15; j++)
                    card.View(g,TT[i][j], j*16+20,i*16+50);
        }
    }
    
  2. プロジェクトのフォルダーに MapChip の画像ファイル(chip.gif)を格納して下さい。
    Chip.gif は 32*32 の Sprite が2段10列に並んだ画像ですが、今回は 16*16 のサイズに設定して4段20列で処理します。
    Sprite(Mapchip)を組み合わせた背景画像が描画されたら完成です。

プログラムの説明

  1. 前回までの説明は BG に沿ってキャラクタを動かす を参照して下さい。
    画像の描画は JPEG ファイルを表示する を参照して下さい。
    画像の切り分けは 美人の顔のアニメーション を参照して下さい。
  2. Sprite(Mapchip)のインデックスを配列で定義して背景画像を構成します。
        // 15, 10,  16, 16,  Mapの幅と高さ, Mapchipの幅と高さ
        int     TT[][] =
        { { 56, 57, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 76, 77 }, 
          { 76, 77, 49, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 50, 51 }, 
          { 48, 68, 69, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 70, 71 }, 
          { 48, 35, 2, 2, 2, 2, 2, 2, 2, 2, 54, 55, 2, 2, 12 }, 
          { 48, 15, 2, 2, 54, 55, 2, 2, 2, 2, 74, 75, 2, 2, 32 }, 
          { 48, 35, 2, 2, 74, 75, 2, 2, 2, 2, 2, 2, 2, 2, 12 }, 
          { 48, 35, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12 }, 
          { 48, 15, 2, 2, 2, 2, 2, 2, 2, 52, 53, 2, 2, 2, 32 }, 
          { 57, 44, 45, 2, 2, 2, 2, 2, 2, 72, 73, 2, 46, 46, 47 }, 
          { 77, 64, 65, 9, 8, 9, 8, 9, 8, 9, 8, 9, 66, 66, 67 } };
        
  3. インデックスを定義した配列 TT[10][15] に従って、背景画像を描画します。
        // Paint Method
        public void paint(Graphics g)
        {   super.paint(g);
            for(int i=0; i<10; i++)
                for(int j=0; j<15; j++)
                    card.View(g,TT[i][j], j*16+20,i*16+50);
        }
        

【課題】

マップチップを組み合わせた背景画像は、一般的には MapEditor などと呼ばれる専用のツールで作成します。
次のファイルは、私が開発した Map Editor で出力した "BgMap.txt" です。
上記のプログラムと同じ chip.gif を使っているので、インデックスを TT[][] で定義すれば背景画像が表示されるので試してみて下さい。
Map Editor は「超初心者のプログラム入門/Game Program & 各種 Tool/Map Editor」から提供しています。
//Map  Ver 3.2  前田 稔
//chip.gif
//  24,   20,   16,   16,  Map の幅と高さ, Mapchip の幅と高さ
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 40, 8, 9, 8, 9, 41, 2, 2, 2, 2, 52, 53, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 12, 6, 4, 4, 4, 43, 2, 2, 2, 2, 72, 73, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 32, 26, 56, 57, 4, 64, 65, 66, 41, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 12, 28, 76, 77, 4, 4, 4, 4, 15, 2, 2, 2, 52, 53, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 62, 30, 30, 50, 51, 4, 4, 4, 35, 2, 2, 2, 72, 73, 2, 2, 2, 52, 53, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 71, 4, 4, 4, 15, 2, 2, 2, 2, 2, 2, 2, 2, 72, 73, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 12, 4, 58, 59, 35, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 40, 66, 66, 67, 4, 78, 79, 64, 65, 8, 9, 8, 9, 9, 41, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 12, 25, 6, 7, 4, 4, 5, 24, 25, 4, 4, 4, 4, 4, 43, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 12, 28, 26, 27, 4, 58, 59, 5, 6, 7, 58, 59, 4, 4, 43, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 62, 30, 50, 51, 24, 78, 79, 25, 26, 27, 78, 79, 4, 4, 64, 9, 9, 41, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 71, 4, 4, 4, 4, 4, 48, 49, 30, 50, 51, 56, 57, 4, 35, 2, 2, 2, 
2, 54, 55, 2, 2, 2, 42, 4, 4, 56, 57, 4, 68, 69, 2, 2, 71, 76, 77, 4, 43, 2, 2, 2, 
2, 74, 75, 2, 2, 2, 62, 50, 51, 76, 77, 4, 43, 2, 2, 2, 62, 30, 30, 31, 63, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 71, 4, 4, 4, 43, 2, 54, 55, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 54, 55, 2, 2, 62, 30, 30, 31, 63, 2, 74, 75, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 74, 75, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 54, 55, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 74, 75, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 

超初心者のプログラム入門(Java2)