// // Pakuman(パックマン) 2001/11/03 by ONOZATO Takehisa // // // import java.awt.*; import java.awt.event.*; import java.applet.*; public class Pakuman extends Applet implements ActionListener{ Image ofs; Graphics grf; //オフスクリーン int ofsWidth=660; int ofsHeight=200; Color ofsBG=new Color(255,239,223); Button btn[]=new Button[6]; //ボタン int btnLeft[]={30,30,380,420,460,520}; int btnTop[]={30,50,40,40,40,40}; String btnCaption[]={"+2","−2","戻る","停止","進む","クリア"}; String btnCommand[]={"0","1","2","3","4","5"}; int originX=330; int originY=130; //原点 int unit=15; //単位長当たりのピクセル数 String scale[]={"-20","-10"," 0"," 10"," 20"}; //目盛 boolean flg; //移動中 int v; //速度 int t; int dt; //時刻,増分 int x; //座標 public void init(){ ofs=createImage(ofsWidth,ofsHeight); //オフスクリーン grf=ofs.getGraphics(); setBackground(ofsBG); Font fnt=grf.getFont(); //フォント String fname=fnt.getName(); int fstyle=fnt.getStyle(); grf.setFont(new Font(fname,fstyle,16)); //16pt for(int i=0; i10){flg=false;} if(flg){ t=t+dt; x=v*t; DrawOfs(); g.drawImage(ofs, 0, 0, this); shortSleep(); repaint(); }else{ DrawOfs(); g.drawImage(ofs, 0, 0, this); } } /*** しばらく休む ***/ public void shortSleep(){ try{ Thread.sleep(500); //ミリ秒 } catch(Exception e){} } /*** ボタンのイベントプロシージャ ***/ public void actionPerformed(ActionEvent e){ int c=Integer.parseInt(e.getActionCommand()); switch(c){ case 0: v=2; t=0; x=v*t; flg=false; break; case 1: v=-2; t=0; x=v*t; flg=false; break; case 2: dt=-1; if(t>-10){flg=true;}; break; case 3: flg=false; break; case 4: dt=1; if(t<10){flg=true;}; break; case 5: t=0; x=v*t; flg=false; break; } repaint(); } /*** オフスクリーンへの描画 ***/ void DrawOfs(){ grf.setColor(ofsBG); //背景 grf.fillRect(0,0,ofsWidth,ofsHeight); for(int i=0; i0){ grf.fillArc(picX(x)-15,picY(0)-15,30,30,30,300); //餌 grf.setColor(Color.red); if(x<20){ for(double a=x+2; a<=20; a=a+2){ grf.fillOval(picX(a)-5,picY(0)-5,10,10); } } }else{ grf.fillArc(picX(x)-15,picY(0)-15,30,30,210,300); grf.setColor(Color.red); if(x>-20){ for(double a=x-2; a>=-20; a=a-2){ grf.fillOval(picX(a)-5,picY(0)-5,10,10); } } } } /*** 座標の換算 ***/ int picX(double x){ int xx=originX+(int)(x*unit); return xx; } int picY(double y){ int yy=originY-(int)(y*unit); return yy; } }