//--------------------------------------------------------------------// // 3DダンジョンRPG ver.1.0 // //--------------------------------------------------------------------// // クラス一覧 // class FileFormatException ファイル書式例外処理 // class DungeonRPG メイン // class DungeonViewPanel ダンジョン表示部分 // class ControlButton コントロールボタンクラス // class StatusPanel ステータス表示パネル // class DungeonMessagePanel メッセージパネル // class ItemListPanel アイテムリストパネル // class ImageData イメージクラス // class DungeonData ダンジョンデータ // class Floor 階層データ // class MapGrid マップ1マスのデータ // class MonsterMap ワンダリングモンスター分布クラス // class KeyDoor 鍵付き扉クラス // class Event イベントクラス // class Elevator エレベータークラス // class Item アイテムクラス // class Character キャラクタークラス // class Player プレイヤークラス // class Monster モンスタークラス // class draw2D 2次元マップ表示 // class draw3D 3次元マップ表示 //--------------------------------------------------------------------// // 定数一覧 class DungeonViewPanel static final int UP1=38; // キーコード static final int LEFT1=37; static final int RIGHT1=39; static final int DOWN1=40; static final int UP2=104; static final int LEFT2=100; static final int RIGHT2=102; static final int DOWN2=98; static final int NONE=0; // ボタン・パネル選択 static final int MOVE=1; static final int FORWARD=2; static final int LEFT=3; static final int RIGHT=4; static final int BACK=5; static final int VIEWSW=6; static final int EVENT=7; static final int YESNO=8; static final int YES=9; static final int NO=10; static final int ELEVATOR=11; static final int BATTLE=12; static final int ATTACK=13; static final int ESCAPE=14; static final int ITEM=15; static final int USE=16; static final int DROP=17; static final int NOSELECT=-1; // アイテム・エレベーター階層未選択 static final int VIEW3D=0; // 視点選択 static final int VIEW2D=1; class StatusPanel static final int LMAX=30; // ステータス表示行数の上限 class DungeonMessagePanel static final int LMAX=30; // メッセージ行数の上限 class ItemListPanel static final int IMAX=20; // アイテム数の上限 static final int NAME=10; // アイテム名文字数の上限 class ImageData extends Panel static final int NMAX=100; // テンプレート部品数の上限 class DungeonData static final int NORTH=0; // プレイヤーの向いている方向 static final int EAST=1; static final int SOUTH=2; static final int WEST=3; static final int NOEVENT=0; // イベント選択 static final int START=1; static final int GOAL=2; static final int UPSTAIR=3; static final int DOWNSTAIR=4; static final int WARP1WAY=5; static final int WARP2WAY=6; static final int ELEVATOR=7; static final int ITEM=8; static final int ENCOUNT=9; static final int MESSAGE=10; static final int HEAL=11; static final int NOSELECT=0; // イベント選択肢の種類 static final int SELECT=1; static final int EVSELECT=2; static final int WALL=1; // 壁データ static final int DOOR=2; static final int FMAX=100; // 階層の上限 static final int EMAX=1000; // イベントの上限 static final int NMAX=500000; // 壁数の上限 static final int MMAX=1000; // モンスター種類数の上限 static final double SIGMA=0.2/Math.PI; // 攻撃ダメージの変動範囲 class MonsterMap static final int MMAX=10; // モンスター種類数の上限 class Event static final int LINE=100; // メッセージ行数の上限 class Elevator static final int NMAX=100; // 移動できるフロア数の上限 class Item static final int KEY=0; // アイテム種類 static final int CURE=1; static final int WEAPON=2; static final int DEFEND=3; class Player extends Character static final int LVMAX=100; // レベルの最大値 static final int NOEXP=0; // 最大レベルでの次レベルの経験値表示 class Monster extends Character static final int ITEMMAX=10; // 持っているアイテム種類数の最大値 class draw3D static final int DEPTHMAX=10; // 奥行きの最大値 class FileFormatException extends Exception ファイル書式例外処理 public FileFormatException(String s) コンストラクタ String s : エラーメッセージ public class DungeonRPG extends Applet メイン public void init() 初期化 public void destroy() メモリ開放 void getTemplateImage(String iname) テンプレートイメージ読み込み String iname : テンプレートイメージファイル名 class DungeonViewPanel extends Panel ダンジョン表示部分クラス public DungeonViewPanel(URL base,String name,Image image ,Color backColor,Color textColor) コンストラクタ URL base : 基準URL String name : データファイル名 Image image : テンプレートイメージ Color backColor : 背景色 Color textColor : 文字色 void getData(URL base,String name,Image image) データ読み込み URL base : 基準URL String name : データファイル名 Image image : テンプレートイメージ public void mouseClicked(MouseEvent e) public void mousePressed(MouseEvent e) public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void keyPressed(KeyEvent e) public void keyReleased(KeyEvent e) public void keyTyped(KeyEvent e) void ReleasedAction() ボタン離し時実行 void mousePressedItem(int mousex,int mousey) アイテム選択時マウス入力 void mousePressedMove(int mousex,int mousey) 移動時マウス入力 void mousePressedEvent(int mousex,int mousey) イベント時マウス入力 void mousePressedBattle(int mousex,int mousey) 戦闘時マウス入力 void keyTypedItem(int keyin) アイテム選択時キーボード入力 void keyTypedMove(int keyin) 移動時キーボード入力 void keyTypedEvent(int keyin) イベント時キーボード入力 void keyTypedBattle(int keyin) 戦闘時キーボード入力 void goAhead() 前に移動する処理 void turnRight() 右を向く処理 void turnLeft() 左を向く処理 void turnBack() 後を向く処理 void changeView() 表示の変更 void eventOn(int ynsw) イベント実行 int ynsw : Yes/No選択の有無 void eventOff() イベントキャンセル void afterEvent() イベント後処理 void Attack() 攻撃処理 void Escape() 逃走処理 void Item() アイテムリスト表示処理 void Use(int index) アイテム使用処理 int index : アイテムリスト番号 void Drop(int index) アイテム廃棄処理 int index : アイテムリスト番号 public void update(Graphics g) 再表示 public void paint(Graphics g) 表示 void setPaint() 表示部分設定 void setControlPanel() コントロールパネル設定 void paintMap(Graphics g) マップ描画 void drawMovePanel(Graphics g) 移動用パネル表示 void drawBattlePanel(Graphics g) 戦闘用パネル表示 void drawYesNoPanel(Graphics g) Yes/No選択表示 void drawItemPanel(Graphics g) アイテム用パネル表示 void setElevatorPanel(Graphics g,int ev,int x0,int y0,int fx,int fy ,int fontsize) エレベーター階層表示設定 int ev : イベント番号 int x0,y0 : 表示部分基準位置 int fx,fy : 表示領域の大きさ int fontsize : 文字フォントの大きさ void drawElevator(Graphics g,int ev,int fontsize ,Color backColor,Color textColor) エレベーター階層表示 int ev : イベント番号 int fontsize : 文字フォントの大きさ Color backColor : 背景色 Color textColor : 文字色 void ButtonRelease() ボタン離し void drawError(Graphics g,String message) エラーメッセージ表示 String message : エラーメッセージ class ControlButton ボタンクラス ControlButton(String label,int x0,int y0,int x,int y) コンストラクタ String label : ボタンラベル int x0,y0 : 基準位置 int x,y : ボタン大きさ void draw(Graphics g,Color backColor,Color textColor) ボタン描画 Color backColor : 背景色 Color textColor : 文字色 void Press() ボタン押し void Release() ボタン離し boolean press(int px,int py) ボタン押し判定 int px,py : マウスクリック位置 class StatusPanel ステータス表示パネル StatusPanel(int fontsize,int x0,int y0,int x,int y ,Color backColor,Color textColor){ コンストラクタ int fontsize : 文字フォントの大きさ int x0,y0 : 基準位置 int x,y : 表示領域サイズ Color backColor : 背景色 Color textColor : 文字色 void draw(Graphics g,Player player) ステータス表示 Player player : プレイヤークラス class DungeonMessagePanel extends Panel メッセージパネル DungeonMessagePanel(Graphics g,int fontsize,int x0,int y0,int x,int y ,Color backColor,Color textColor) コンストラクタ int fontsize : 文字フォントの大きさ int x0,y0 : 基準位置 int x,y : 表示領域サイズ Color backColor : 背景色 Color textColor : 文字色 void write(String string) メッセージ書き込み String string : 書き込むメッセージ void draw(Graphics g) メッセージ表示 void clear() メッセージ消去 class ItemListPanel アイテムリストパネルクラス public ItemListPanel(Graphics g,int fontsize,int x0,int y0,int x,int y ,Color backColor,Color textColor) コンストラクタ int fontsize : 文字フォントの大きさ int x0,y0 : 基準位置 int x,y : 表示領域サイズ Color backColor : 背景色 Color textColor : 文字色 void draw(Graphics g) アイテムリスト表示 void add(Item newItem) アイテム追加 Item newItem : 追加されるアイテム void delete(int index) アイテム削除 int index : アイテムリスト番号 int selected(int px,int py) 選択されたアイテムリスト番号 int px,py : マウスクリック位置 void upperIndex() アイテムリスト選択 void lowerIndex() アイテムリスト選択 void Cancel() アイテムリスト選択キャンセル class ImageData extends Panel イメージクラス ImageData(Image baseImage,int partsize){ コンストラクタ Image baseImage : テンプレートイメージ int partsize : 部品イメージサイズ void makePartImage(Image image) イメージ部品取り出し Image image : テンプレートイメージ class DungeonData ダンジョンデータ DungeonData(InputStream is,ItemListPanel ipanel,Image image) コンストラクタ InputStream is : データファイルストリーム ItemListPanel ipanel : アイテムリストパネルクラス Image image : テンプレートイメージ void setMIPanel(DungeonMessagePanel mpanel,ItemListPanel ipanel) メッセージ表示部分・アイテムリストの設定 DungeonMessagePanel mpanel : メッセージパネルクラス ItemListPanel ipanel : アイテムリストパネルクラス void readGlobalData(InputStream is) throws IOException, FileFormatException 全体データ読み込み InputStream is : データファイルストリーム void readHeadData(StreamTokenizer st) throws IOException ヘッドデータ読み込み StreamTokenizer st : ストリームトークナイザ void readFloorData(StreamTokenizer st) throws IOException 階層データ読み込み StreamTokenizer st : ストリームトークナイザ void readMonsterMapData(StreamTokenizer st) throws IOException ワンダリングモンスター分布データ StreamTokenizer st : ストリームトークナイザ void readKeyDoorData(StreamTokenizer st) throws IOException 鍵付き扉データ読み込み StreamTokenizer st : ストリームトークナイザ void readEventData(StreamTokenizer st) throws IOException イベントデータ読み込み StreamTokenizer st : ストリームトークナイザ void readItemData(StreamTokenizer st) throws IOException アイテムデータ読み込み StreamTokenizer st : ストリームトークナイザ void readPlayerData(StreamTokenizer st) throws IOException プレイヤーデータ読み込み StreamTokenizer st : ストリームトークナイザ void readMonsterData(StreamTokenizer st) throws IOException モンスターデータ読み込み StreamTokenizer st : ストリームトークナイザ void readIntNumbers(StreamTokenizer st,int array[],int n) throws IOException 複数の整数の読み込み StreamTokenizer st : ストリームトークナイザ int array[] : 整数格納配列 int n : 読み込む整数の数 String readMessage(StreamTokenizer st) throws IOException メッセージ読み込み StreamTokenizer st : ストリームトークナイザ void readMessages(StreamTokenizer st,int n,String message[]) throws IOException 複数行メッセージ読み込み StreamTokenizer st : ストリームトークナイザ int n : 読み込むメッセージの行数 String message[] : メッセージ配列 void set3DMesh(int fx,int fy,int depth) 3次元地図のマス目設定 int fx,fy : 表示領域の大きさ int depth : 視界奥行き深さ void set2DMesh(int fx,int fy) 2Dメッシュサイズの設定 int fx,fy : 表示領域の大きさ int pointer(int x,int y,int z) 位置変換 int x,y : 位置座標 int z : 階層 int goAhead() 前に移動する処理 void turnRight() 右を向く処理 void turnLeft() 左を向く処理 void turnBack() 後を向く処理 boolean canThrough(int wall) 通過可能判定 int wall : 壁種類 void eventAction(int ev,int floor) イベント実行 int ev : イベント番号 int floor : エレベーター移動階層 void EncounterEnemy(int enemy) 敵と遭遇 int enemy : 遭遇した敵番号 void Attack() 攻撃処理 void enemyAttack() 敵の攻撃の処理 void Escape() 逃走処理 void killEnemy() 敵を倒したときの処理 void PlayerDead() プレイヤーが死亡したときの処理 void getItem(int itemNumber) アイテム獲得 int itemNumber : アイテム番号 void useItem(int index) アイテム使用 int index : アイテムリスト番号 void dropItem(int index) アイテムを捨てる int index : アイテムリスト番号 int statusWidth(Graphics g) ステータス表示部分幅 int titleHeight(Graphics g) マップタイトル文字高さ void drawTitle(Graphics g,Color boadColor,Color textColor,int fx,int fontsize) マップタイトル表示 Color boadColor : タイトル背景色 Color textColor : タイトル文字色 int fx : 表示領域幅 int fontsize : 文字フォントの大きさ void draw3DMap(Graphics g,int x0,int y0,int fx,int fy,int depth) 3次元地図表示 int x0,y0 : 表示部分基準位置 int fx,fy : 表示領域の大きさ int depth : 視界奥行き深さ int viewPointer(int depth,int side) 相対位置による指定 int depth : 奥行き方向移動距離 int side : 横方向移動距離 void draw2DMap(Graphics g,int x0,int y0) 2次元地図表示 int x0,y0 : 表示部分基準位置 void drawMessage(int ev) イベントメッセージ表示 int ev : イベント番号 class Floor 階層データクラス Floor(String title,int floor,Color ceilColor,Color floorColor ,Color wallColor,Color swallColor,Color doorColor ,int n1,int n2,int ofsetw,int ofsetf) コンストラクタ String title : 階層名 int floor : 階層ラベル Color ceilColor : 天井色 Color floorColor : 床色 Color wallColor : 壁色 Color swallColor : 壁(横)色 Color doorColor : 扉色 int n1,n2 : 横・縦のマス目の数 int dmesh : マス目の大きさ int ofsetw : データオフセット(壁) int ofsetf : データオフセット(床) void setMeshSize(int fx,int fy) 表示サイズの設定 int fx,fy : 表示領域の大きさ int pointer(int x,int y) 位置ポインタ int x,y : 座標位置 class MapGrid マップ1マスのデータクラス MapGrid(int x,int y,int floor) MapGrid(int x,int y,int floor,int ofsetw,int n1) コンストラクタ int x,y : 座標位置 int floor : 階層 void Through() ポイント通過 void setEvent(int event) イベント設定 int event : イベント番号 void setMonsterMap(int monster) ワンダリングモンスター分布設定 int monster : ワンダリングモンスター分布番号 class MonsterMap ワンダリングモンスター分布クラス MonsterMap(int number,int monster[],double encount[]) コンストラクタ int number : モンスター種類数 int monster[] : モンスター番号 double encount[] : モンスター遭遇確率 class KeyDoor 鍵付き扉クラス KeyDoor(int number,Color color) コンストラクタ int number : 鍵番号 Color color : 扉表示色 class Event イベントクラス Event(int type,int line1,int line2,String message[]) Event(int type,int move,int line1,int line2,String message[]) コンストラクタ int type : イベント種類 int move : イベントによる移動位置 int line1 : 質問メッセージ行数 int line2 : 結果メッセージ行数 String message[] : イベントメッセージ class Elevator エレベータークラス Elevator(int nfloor) コンストラクタ int nfloor : 移動可能な階層数 void setPoint(int ii,int pt,int fl,int ev) 階層データ設定 int ii : 階層番号 int pt : エレベーター位置 int fl : エレベーター階層 int ev : エレベーターイベント番号 class Item アイテムクラス Item(int number,int type,int value,String name,boolean use,boolean drop) コンストラクタ int number : アイテム番号 int type : アイテム種類 int value : アイテム特性値 String name : アイテムの名前 boolean use : アイテム使用可能 boolean drop : アイテム廃棄可能 void useItem() アイテム使用処理 void getItem() アイテム獲得処理 void loseItem() アイテム廃棄処理 class Character キャラクタークラス class Player extends Character プレイヤークラス Player(String name,int hp,int attack,int defence,int levelmax ,int dhp[],int dattack[],int ddefence[],int dexp[]){ コンストラクタ String name : キャラクターの名前 int hp : キャラクターの生命力 int attack : キャラクターの攻撃力 int defence : キャラクターの防御力 int levelmax : プレイヤーのレベル最大値 int dhp[] : レベルアップ時の上昇最大HP int dattack[] : レベルアップ時の上昇攻撃力 int ddefence[] : レベルアップ時の上昇防御力 int dexp[] : レベルアップに必要な経験値 boolean Damage(int damage) ダメージを与える int damage : ダメージ値 int Cure(int cure) ダメージを回復 int cure : 回復値 void equip(Item item) 装備する Item item : 装備するアイテム void getExp(int exp) 経験値を獲得 int exp : 獲得した経験値 class Monster extends Character モンスタークラス Monster(String name,int hp,int attack,int defence,int experience ,int itemNumber,int item[],double ItemDrop[]) コンストラクタ String name : キャラクターの名前 int hp : キャラクターの生命力 int attack : キャラクターの攻撃力 int defence : キャラクターの防御力 int experience : キャラクターの経験値 int itemNumber : 持っているアイテムの種類数 int item[] : 持っているアイテム double ItemDrop : アイテムを落とす確率 boolean Damage(int damage) ダメージを与える int damage : ダメージ値 int Cure(int cure) ダメージを回復 int cure : 回復値 int dropItem(double rdm) 落とすアイテム double rdm : ランダム値 class draw2D 2次元マップ表示クラス draw2D() コンストラクタ void draw2DMesh(Graphics g,int xx,int yy,Event event[],Floor flr ,MapGrid mg,int wall[],KeyDoor kd[]) 2次元地図1マス表示 int xx,yy : 表示基準位置 Event event : イベントクラス Floor flr : 階層クラス Mapgrid mg : マスクラス int wall[] : 壁データ KeyDoor kd[] : 鍵付き扉クラス void drawWall2D(Graphics g,int x,int y,int hv,Floor flr) 2次元地図壁表示 int x,y : 表示基準位置 int hv : 南北・東西識別子 Floor flr : 階層クラス void drawDoor2D(Graphics g,int x,int y,int hv,Floor flr) 2次元地図扉表示 int x,y : 表示基準位置 int hv : 南北・東西識別子 Floor flr : 階層クラス void drawKeyDoor2D(Graphics g,int x,int y,int hv,Floor flr ,Color kdoorColor) 2次元地図鍵付き扉表示 int x,y : 表示基準位置 int hv : 南北・東西識別子 Floor flr : 階層クラス Color kdoorColor : 鍵付き扉表示色 void drawMe2D(Graphics g,int x0,int y0,Floor flr,int direc) 2次元地図自位置表示 int x0,y0 : 表示基準位置 Floor flr : 階層クラス int direc : 方向 class draw3D 3次元マップ表示 draw3D(int fx,int fy,int depth) コンストラクタ int fx,fy : 表示領域の大きさ int depth : 視界奥行き深さ void set3DMesh(int fx,int fy,int depth) 3次元地図のマス目設定 int fx,fy : 表示領域の大きさ int depth : 視界奥行き深さ void draw3DMap(Graphics g,int x0,int y0,int depth,int x ,Color lineColor,Color wallColor,Color swallColor ,Color doorColor,int ww[],KeyDoor kd[]) 3次元地図表示 int x0,y0 : 表示基準位置 int fx,fy : 表示領域の大きさ int depth : 視界奥行き深さ int x : 横方向位置 Color lineColor : 線色 Color wallColor : 壁色 Color swallColor : 壁(横)色 Color doorColor : 扉色 int ww[] : 壁データ KeyDoor kd[] : 鍵付き扉クラス void init3DMap(Graphics g,int x0,int y0,int depth,Color ceilColor ,Color floorColor) 3次元地図表示初期化 int x0,y0 : 表示基準位置 int depth : 視界奥行き深さ Color ceilColor : 天井色 Color floorColor : 床色 void make3DSideWall(int i,int j,int x0,int xmax,int y0,int ymax) 横壁表示座標データ作成 int i,j : 奥行き・横方向位置 int x0,xmax,y0,ymax : 表示範囲 void make3DSideDoor(int i,int j,int xmin,int xmax,int ymin) 横扉表示座標データ作成 int i,j : 奥行き・横方向位置 int xmin,xmax,ymin : 表示範囲 void draw3DWall(Graphics g,Color wallColor,Color lineColor ,int x0,int y0,int xx,int yy) 前壁描画 Color wallColor : 壁色 Color lineColor : 線色 int x0,y0 : 表示基準位置 int xx,yy : 壁表示大きさ void draw3DSideWall(Graphics g,Color wallColor,Color lineColor ,int xx[],int yy[]) 横壁描画 Color wallColor : 壁色 Color lineColor : 線色 int xx,yy : 壁表示頂点座標 void draw3DDoor(Graphics g,Color wallColor,Color lineColor ,int x0,int y0,int xx0,int i,int j) 前扉描画 Color wallColor : 壁色 Color lineColor : 線色 int x0,y0 : 表示基準位置 xx0 : 横方向修正値 int i,j : 奥行き・横方向位置