Report#8

Java Applet/AWTについて学び、JavaAppletのオリジナルプログラムを作成し解説せよ

  ソース import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class minesw extends java.applet.Applet implements MouseListener{ int xmax=12;// 列 int ymax=10;//行 int xy_max=xmax * ymax; /*0:なし1~8:開いた 9:爆弾がある 10:開いてない 11:爆弾をクリック 12:クリックしてない*/ int sts[]=new int[xy_max]; int bmax=15;//bombの数 int square=16;// マス目の幅 int margin=20;// 端まで行かないよう余裕を取る int gend;//game over flg(0:ゲーム中 1:クリア 2:自爆) Image offs; // オフスクリーン Graphics gf; public void init(){ /* オフスクリーンの設定 */ offs=createImage(300,300); gf=offs.getGraphics(); /* マウスリスナとして自分自身を登録 */ addMouseListener(this); gameInit(); } public void paint(Graphics g) { update(g); } public void update(Graphics g){ int i,j; int k;// マスの番号 int xx, yy; // マスの座標 gf.setColor(Color.white); gf.fillRect(0,0,300,300); /* RESETボタンの描画 */ gf.setColor(Color.green); //ボタンの背景色 gf.fillRect(20,180,60,20); //RESETボタンの枠の座標 gf.setColor(Color.black); //表示する文字の色 gf.drawString("もう一度",23,193);//文字を表示する位置 /* マスの描画 */ for(i=0;i=9){ gf.setColor(Color.gray); gf.fillRect(xx, yy, square, square); if(sts[k]>10){ gf.setColor(Color.red); gf.drawString("危 ",xx+3,yy+13); //マスの中に表示するマーク" ! "とそれの位置 } } else{ gf.setColor(Color.white); //マスを開いたときの背景色 gf.fillRect(xx, yy, square, square); if(sts[k]!=0){ gf.setColor(Color.blue); //周囲の爆弾の数を表す数値の色 gf.drawString("" + sts[k],xx+4,yy+13); //周囲の爆弾の数 } } /*爆弾のあるマスを表示*/ if(gend==2 & (sts[k]==9 || sts[k]==11)){ gf.setColor(Color.red); //爆弾のあるマスの色 gf.fillRect(xx,yy,square,square); gf.setColor(Color.black); //爆弾マークの色 gf.drawString(" * ",xx+3,yy+13); //爆弾マークの表示位置 } gf.setColor(Color.black); //マスの枠の色 gf.drawRect(xx,yy,square,square); //枠のサイズ } } if(gend==1){ gf.setColor(Color.yellow); gf.drawString(" Clear !! ",100,170); } if(gend==2){ gf.setColor(Color.magenta); gf.drawString(" Game Over ",100,170); } /* オフスクリーンのイメージを一挙に実際の表示領域に描く */ g.drawImage(offs,0,0,this); } public void mousePressed(MouseEvent e){ /* マウスボタンが押された */ int ix, iy;// マウスが押された座標 int row, col;// マウスが押された位置(行、列) int k; /* マウスが押された座標を得る */ ix=e.getX(); iy=e.getY(); if (ix>20 & ix<80 & iy>180 & iy<200) { //やり直しボタンの有効範囲 /* やり直しボタン */ gameInit(); repaint(); return; } col=(ix-margin)/square; row=(iy-margin)/square; if(col<0 || col>=xmax || row<0 || row>=ymax){ return; } k=row*xmax+col; if((e.getModifiers() &MouseEvent.CTRL_MASK)!=0) { //CTRLキー併用 if(sts[k]==9 || sts[k]==10){ sts[k]+=2; } else if(sts[k]==11 || sts[k]==12){ sts[k]-=2; } } else{ if(sts[k]>=10){ sts[k]=bombCount(col,row); if(sts[k]==0) AroundOpen(col,row); } if(sts[k]==9){ gend=2; } } endCheck(); repaint(); } /* マウスボタンが離された時の処理 */ public void mouseReleased(MouseEvent e){ } /* マウスボタンがクリックされた時の処理 */ public void mouseClicked(MouseEvent e){ } /* マウスカーソルが入ってきた時の処理*/ public void mouseEntered(MouseEvent e){ } /* マウスカーソルが出て行く時の処理*/ public void mouseExited(MouseEvent e){ } /*初期処理*/ public void gameInit(){ int i; int k; gend=0; //初期化 for(i=0;i=0 & px+i-1=0 &py+j-1=0 & px+i-1=0 &py+j-1=9){ sts[xy]=bombCount(px+i-1,py+j-1); if(sts[xy]==0) AroundOpen(px+i-1,py+j-1); } } } } } } /*ゲーム終了の判定を行う*/ public void endCheck(){ int i,cnt; cnt=0; for(i=0;i< xy_max;i++){ if(sts[i]<9) cnt++; } if((cnt+bmax)==xy_max) gend=1; } } 実行結果   考察  MouseListener   java.awt.eventパッケージに含まれていて、これを実装し、リスナーとして  登録することでマウスによるイベント処理できるようになる。   また、MouseListenerには  mouseClicked(MouseEvent e)  mouseEntered(MouseEvent e)  mouseExited(MouseEvent e)  mousePressed(MouseEvent e)  mouseReleased(MouseEvent e)  の5つメソッドが用意されている。このうち、ある処理だけ  したい場合に、使わないメソッドも出てくることもあるが、その場合でもすべてのメソッドを定義  しておかないとコンパイルエラーになる。  Image   Image getImage(URL base, StringfileName)と記述することで、baseというURLを 一つ目の引数として受け取り、次のfileNameを二つ目の引数として受け取ることが出来る。 トップへ