// ==================================================================== // JAVA APPLET PROGRAM BASE SOURCE BakuretuKen // ==================================================================== import java.applet.Applet; import java.awt.*; import java.net.*; import java.awt.image.*; import java.util.StringTokenizer; import java.net.MalformedURLException; import java.io.*; // =============================================================== public class MapPaint extends Applet { // グローバル変数 // ダブルバッファリング用の宣言 Graphics bg; Image backimage; // 背景イメージ Image haikei[]; //その他 Image player1, player2; // MAPデータ int map[][]; // キャラの座標 int cx, cy; int oldcx, oldcy; // キャラの画像状態 boolean kuma; // ゴールしたかどうか? boolean isGoal; // ----------------------------------------------------------- public void init() { // 初期処理 // ダブルバッファリング初期宣言 backimage = createImage( 360, 360 ); bg = backimage.getGraphics(); // 背景配列の初期化 haikei = new Image[6]; haikei[0] = getImage(getDocumentBase(), "back00.gif"); haikei[1] = getImage(getDocumentBase(), "back01.gif"); haikei[2] = getImage(getDocumentBase(), "back02.gif"); haikei[3] = getImage(getDocumentBase(), "back03.gif"); haikei[4] = getImage(getDocumentBase(), "back04.gif"); haikei[5] = getImage(getDocumentBase(), "back05.gif"); player1 = getImage(getDocumentBase(), "kuma01.gif"); player2 = getImage(getDocumentBase(), "kuma02.gif"); // マップ配列の初期化 map = new int[100][100]; // ランダムで 300 x 300 のマップを作る for (int yy=0; yy<100; yy++){ for (int xx=0; xx<100; xx++){ map[xx][yy] = (int) (4 * Math.random());// ランダム if( xx<4 ) map[xx][yy] = 4; if( xx>95 ) map[xx][yy] = 4; if( yy<4 ) map[xx][yy] = 4; if( yy>95 ) map[xx][yy] = 4; } } // 家をマップ配列に置く int house_x = (int) (90 * Math.random());// ランダム int house_y = (int) (90 * Math.random());// ランダム map[house_x+5][house_y+5] = 5; // System.out.println( (house_x+5) +" "+(house_y+5)+"\n"); // キャラ座標の初期値 cx=50; cy=50; // キャラ状態の初期化 kuma=true; // 初期状態でゴールしていない isGoal = false; } // init() // ----------------------------------------------------------- public void paint(Graphics g) { // 作画処理 // System.out.println(">"+ cx +" "+cy+"\n"); int no, mx, my; // 背景を作画 for ( my=0; my<9; my++) { for ( mx=0; mx<9; mx++) { no = map[cx-4+mx][cy-4+my]; bg.drawImage( haikei[no], mx*40, my*40, this); } } // キャラを中央に作画 if ( kuma ) bg.drawImage( player1, 4*40, 4*40, this); else bg.drawImage( player2, 4*40, 4*40, this); if ( isGoal ){ bg.setFont(new Font("TimesRoman", Font.BOLD, 30 )); bg.setColor(Color.white); bg.drawString("家に着いた!", 100, 150); } // 裏画像を表に転送 g.drawImage( backimage, 0, 0, null ); } // paint() // ----------------------------------------------------------- public void update(Graphics g) { // 再作画処理 paint( g ); } // update() // ----------------------------------------------------------- public boolean mouseDown(Event e, int x, int y) { // マウスダウン if ( isGoal ) return true; int pos; // キャラ状態を変更 kuma = !kuma; // 今のキャラ座標を保存する oldcx = cx; oldcy = cy; // 押された場所を調べる pos = checkDirection( x, y); // 押された場所にあわせて、キャラ座標を変更 if (pos == 1) cy--; if (pos == 3) cy++; if (pos == 2) cx++; if (pos == 4) cx--; // もしも移動先が山や海だったら、キャラ座標を保存した座標に戻してやる if ( map[cx][cy]==3 || map[cx][cy]==4 ) { cx = oldcx; cy = oldcy; } // もしも移動先がゴールだったら、isGoal を ture に if ( map[cx][cy]==5 ) isGoal = true; // 再作画 repaint(); return true; } // mouseDown() // ----------------------------------------------------------- public boolean mouseUp(Event e, int x, int y) { // マウスアップ return true; } // mouseUp() // ----------------------------------------------------------- public boolean mouseDrag(Event e, int x, int y) { // マウス移動 return true; } // mouseDrag() // ----------------------------------------------------------- // 場所判定プログラム checkDirection() // 返り値(int) 上:1 右:2 下:3 左:4 public int checkDirection(int mx, int my) { boolean c1=false; boolean c2=false; Dimension dim = this.size(); my = dim.height-my; double dx = (double)dim.width; double dy = (double)dim.height; if(my>(int)((dy/dx)*mx)) c1=true; if(my>(int)(dy-(dy/dx)*mx)) c2=true; if (c1&&c2) return 1; if (!c1&&c2) return 2; if (!c1&&!c2) return 3; if (c1&&!c2) return 4; return 0; } // checkDirection() // =============================================================== } // End of Class