//SharkJava.java import java.awt.Graphics; import java.awt.Image; import java.awt.*; import java.util.*; //"s_"から始まる変数はサメ(Shark)用の変数 public class SharkJava extends java.applet.Applet implements Runnable{ private MediaTracker mt; //左右のサメの画像 private Image left_shark; private Image right_shark; //背景画像 private Image background; //オフスクリーン private Image offs; private Graphics mem_g; //アプレットの大きさ private int b_width=600; private int b_height=300; //サメの大きさ private int s_width=154; private int s_height=56; //サメの座標 private int s_x=6; private int s_y=6; //サメの動きかた private int s_mode=0; //サメのマージン private int s_margin=5; //サメのスピード private int speed=100; private Thread trd=null; public void init() { background=getImage(getCodeBase(),"./img/4-back.gif"); left_shark=getImage(getCodeBase(),"./img/4-l_shark.gif"); right_shark=getImage(getCodeBase(),"./img/4-r_shark.gif"); mt=new MediaTracker(this); mt.addImage(background,0); mt.addImage(left_shark,1); mt.addImage(right_shark,2); s_mode=0; offs=createImage(b_width,b_height); mem_g=offs.getGraphics(); } public void paint(Graphics g) { update(g); } public void update(Graphics g) { if(!mt.checkID(0)){ g.drawString("Now Loading.",0,10); g.drawString("残り3画像",0,20); return; } else if(!mt.checkID(1)){ g.setColor(Color.lightGray); g.fillRect(0,0,b_width,b_height); g.setColor(Color.black); g.drawString("Now Loading..",0,10); g.drawString("残り2画像",0,20); return; } else if(!mt.checkID(2)){ g.setColor(Color.lightGray); g.fillRect(0,0,b_width,b_height); g.setColor(Color.black); g.drawString("Now Loading...",0,10); g.drawString("残り1画像",0,20); return; } mem_g.drawImage(background,0,0,this); if(s_mode<=2) mem_g.drawImage(right_shark,s_x,s_y,this); else mem_g.drawImage(left_shark,s_x,s_y,this); g.drawImage(offs,0,0,this); } public void start() { if(trd==null){ trd=new Thread(this); trd.start(); } } public void stop() { trd=null; } public void run() { try{ mt.waitForID(0); repaint(); mt.waitForID(1); repaint(); mt.waitForID(2); repaint(); }catch(InterruptedException e){ return; } int count=0; Thread nowTrd=Thread.currentThread(); s_mode=0; while(trd==nowTrd){ if(count>=40){ count=0; int temp=(int)(Math.random()*10); if(temp>=6) temp-=5; s_mode=temp; } if(s_x<=s_margin){ if(count>=20) s_mode=0; else if(count>=10) s_mode=1; else s_mode=2; } else if((s_x+s_width)>=(b_width-s_margin)){ if(count>=20) s_mode=3; else if(count>=10) s_mode=4; else s_mode=5; } if(s_y<=s_margin){ if((s_x+(s_width/2))/2<=b_width/2) s_mode=4; else s_mode=1; } else if((s_y+s_height)>=(b_height-s_margin)){ if((s_x+(s_width/2))/2<=b_width/2) s_mode=5; else s_mode=2; } if(s_mode==0) s_x+=5; else if(s_mode==1){ s_x+=5; s_y+=2; } else if(s_mode==2){ s_x+=5; s_y-=2; } else if(s_mode==3) s_x-=5; else if(s_mode==4){ s_x-=5; s_y+=2; } else if(s_mode==5){ s_x-=5; s_y-=2; } count++; repaint(); try{ nowTrd.sleep(speed); }catch(InterruptedException e){} } } }