import java.awt.*; import java.applet.*; import java.io.*; import java.net.URL; import java.net.URLConnection; import java.awt.image.*; import java.util.StringTokenizer; //-------------------------------------------------- // プレイヤー管理クラス //-------------------------------------------------- class PlayerManage extends BasicManage{ //-------------------------------------------------- // 定数 //-------------------------------------------------- // キャラ最大数 final byte CHARA_MAX = 99; // キャライメージ最大数 final byte CHARA_IMAGE_MAX = 99; // 最大でか画像数 final byte BIG_IMAGE_MAX_NUM = 10; // でか画像の幅 final short BIG_IMAGE_WIDTH = 288; final short BIG_IMAGE_HEIGHT = 256; // キャラの幅 final byte CHARA_WIDTH = 24; final byte CHARA_HEIGHT = 32; // 中央への補正値 final byte CENTER_OFFSET_X = -4; final byte CENTER_OFFSET_Y = -16; // アニメ数 static final byte ANIME_NUM = 3; // 一枚あたりのキャラ数 final byte ONE_CHARA_NUM = 8; // プレイヤー最大数8 + 船 気球 static final byte PLAYER_MAX = 8*2; // 現在のプレイヤー人数 int m_player_num = 8; //-------------------------------------------------- // メンバ //-------------------------------------------------- // でかキャラチップ Image BigCharaImage[]; // それぞれのキャライメージ CharaImage chara_image[]; // プレイヤー(4人?) Player player[]; Player GetPlayerInstance( int no ){ return player[ no ]; } // インスタンス static PlayerManage m_instance; static PlayerManage GetInstance(){return m_instance;} static void NewInstance( MapEdit applet ){ m_instance = new PlayerManage( applet ); } //-------------------------------------------------- // コンストラクタ //-------------------------------------------------- PlayerManage( MapEdit applet ){ int i; this.applet = applet; // キャラ用でか画像2個 BigCharaImage = new Image[ 2 ]; // キャラ画像生成 chara_image = new CharaImage[ PLAYER_MAX ]; // プレイヤー player = new Player[ PLAYER_MAX ]; // 0番を主人公 // 優先度を高いほうから設定 for( i = 0; i < PLAYER_MAX; i++ ){ player[ i ] = new Player(); player[ i ].priority = (byte)(PLAYER_MAX - i); } m_player_num = 8; } //-------------------------------------------------- // 初期化 //-------------------------------------------------- void Initialize(){ } //-------------------------------------------------- // キャラ画像読み込み //-------------------------------------------------- void LoadCharaImage( String file, int no, MediaTracker mediaT ){ BigCharaImage[ no ] = applet.getImage( applet.getDocumentBase(), file ); mediaT.addImage( BigCharaImage[ no ], 0 ); } //-------------------------------------------------- // プレイヤー作成 //-------------------------------------------------- void MakePlayer(){ int i, j, k, id; DebugPrint( "MakePlayer()" ); // でかキャライメージをピクセル分解して、それぞれのキャラを作成 for( i = 0; i < 2; i++ ){ int[] CharaPixels = new int[ BIG_IMAGE_WIDTH * BIG_IMAGE_HEIGHT ]; PixelGrabber pg = new PixelGrabber( BigCharaImage[ i ], 0, 0, BIG_IMAGE_WIDTH, BIG_IMAGE_HEIGHT, CharaPixels, 0, BIG_IMAGE_WIDTH ); try{ pg.grabPixels(); }catch( InterruptedException e ){ System.err.println("Error"); } // でかチップ1枚につきキャラ8体 for( id = 0; id < ONE_CHARA_NUM; id++ ){ // コンストラクタ chara_image[ ONE_CHARA_NUM*i+id ] = new CharaImage(); // 透過色の指定 最初の1pixel chara_image[ ONE_CHARA_NUM*i+id ].AlphaColor = CharaPixels[ 0 ]; // 作成 // 方向4、アニメ3 for( j = 0; j < DIR_NUM; j++ ){ for( k = 0; k < ANIME_NUM; k++ ){ MakeChipImageByBigImage( chara_image[ ONE_CHARA_NUM * i + id ].chip_image[ j ][ k ], CharaPixels, CHARA_WIDTH, CHARA_HEIGHT, ( CHARA_WIDTH * k ) + ( CHARA_WIDTH * ANIME_NUM )*( id % (ONE_CHARA_NUM/2) ), // x ( CHARA_HEIGHT * j ) + ( CHARA_HEIGHT * DIR_NUM ) * ( id / (ONE_CHARA_NUM/2) ), // y BIG_IMAGE_WIDTH ); } } } } // キャラのイメージセット for( i = 0; i < PLAYER_MAX; i++ ){ // イメージIDを取得 // ちびID //int id2 = player[ i ].image_id; player[ i ].SetImage( chara_image[ i ] ); } } //-------------------------------------------------- // 歩行アニメ //-------------------------------------------------- void WalkAnime(){ int i; for( i = 0; i < PLAYER_MAX; i++ ){ player[ i ].RenewAnime(); } } //-------------------------------------------------- // 配置 //-------------------------------------------------- void SetPlayerLocation( int x, int y ){ int i; // 座標セット 軌跡初期化 for( i = 0; i < PLAYER_MAX; i++ ){ player[ i ].SetPoint( x * MapManage.CHIP_SIZE, y * MapManage.CHIP_SIZE ); player[ i ].InitHistory(); } } }