//
// 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;
}
}