import java.applet.Applet; import java.awt.*; import java.awt.event.*; /** ある領域を跳ね返りながら運動する画像のクラス */ public class test3 extends Applet implements Runnable, KeyListener { Thread th = null; int x=200; int y=300, vy=12, xl=9, yl=9; int px=200, py=550, vpx=10, pl=64; int xmin=0, xmax=400, ymin=0, ymax=540; int i=0; // 点数 int n=1; // 弾き返した位置により変わる。 int a=200, b=200, m=0; // 標的@の位置 int c=150, d=200, o=0; // 標的Aの位置 int e=100, f=200, p=0; // 標的Bの位置 int j=50, h=200, q=0; // 標的Cの位置 int k=0, l=200, r=0; // 標的Dの位置 int aa=250, ab=200, ac=0; // 標的Eの位置 int ba=300, bb=200, bc=0; // 標的Fの位置 int ca=350, cb=200, cc=0; // 標的Gの位置 int da=100, db=100, dc=0; // 標的Hの位置 int ea=200, eb=100, ec=0; // 標的Iの位置 int fa=300, fb=100, fc=0; // 標的Jの位置 int ga=200, gb=30, gc=0; // 標的Kの位置 int ha=0, hb=0, hc=0; // 標的Lの位置 int ia=379, ib=0, ic=0; // 標的Mの位置 int ja=300, jb=400, jc=0; // 標的Nの位置 int ka=79, kb=400, kc=0; // 標的Oの位置 int z=0; int vx=2; // x方向への変移。 Image img, img2; // 弾と棒。 Image img3, img4, img5, img6, img7; // 標的。 /** 初期化 メソッド */ public void init() { img = getImage(getDocumentBase(),"img.gif"); img2 = getImage(getDocumentBase(),"img2.gif"); img3 = getImage(getDocumentBase(),"img3.gif"); img4 = getImage(getDocumentBase(),"img4.gif"); img5 = getImage(getDocumentBase(),"img5.gif"); img6 = getImage(getDocumentBase(),"img6.gif"); img7 = getImage(getDocumentBase(),"img7.gif"); addKeyListener(this); } /** スタート メソッド */ public void start() { if (th == null) { th = new Thread(this); th.start(); } } /** run メソッド */ public void run() { while (th != null) { if(x <= xmin+5){ // 壁に激突した時に反対方向に云々。 if(n == 0) vx = 20; else vx = 2; } if(x >= xmax-xl){ if(n == 0) vx = -20; else vx = -2; } if(y <= ymin+5 ) vy = -vy; if(y >= ymax) { if( px-xl < x && px+pl > x ){ if( px+20 < x && px+pl-20 > x ){ // 弾き返した位置により弾道の変化が云々。 n = 1; vy = -vy; if(vx == 20) vx = 2; else if(vx == -20) vx = -2; } else{ n = 0; vy = -vy; if(vx == 2) vx = 20; else if(vx == -2) vx = -20; } } } x = x+vx; y = y+vy; if(y > ymax+15){ th = null; z=1; } showStatus("現在の得点"+i); if(m == 0){ if(x+9 > 200){ // 標的@にぶつかった時の反応。 if(225 > x){ if(y+9 > 200){ if(225 > y){ vy=-vy; i=i+10; } } } } } if(o == 0){ if(x+9 > 150){ // 標的Aにぶつかった時の反応。 if(175 > x){ if(y+9 > 200){ if(225 > y){ c=1000; d=1000; vy=-vy; i=i+10; o=1; } } } } } if(p == 0){ if(x+9 > 100){ // 標的Bにぶつかった時の反応。 if(125 > x){ if(y+9 > 200){ if(225 > y){ vy=-vy; i=i+10; } } } } } if(q == 0){ if(x+9 > 50){ // 標的Cにぶつかった時の反応。 if(75 > x){ if(y+9 > 200){ if(225 > y){ j=1000; h=1000; vy=-vy; i=i+10; q=1; } } } } } if(r == 0){ if(x+9 > 0){ // 標的Dにぶつかった時の反応。 if(25 > x){ if(y+9 > 200){ if(225 > y){ vy=-vy; i=i+10; } } } } } if(ac == 0){ if(x+9 > 250){ // 標的Eにぶつかった時の反応。 if(275 > x){ if(y+9 > 200){ if(225 > y){ aa=1000; ab=1000; vy=-vy; i=i+10; ac=1; } } } } } if(bc == 0){ if(x+9 > 300){ // 標的Fにぶつかった時の反応。 if(325 > x){ if(y+9 > 200){ if(225 > y){ vy=-vy; i=i+10; } } } } } if(cc == 0){ if(x+9 > 350){ // 標的Gにぶつかった時の反応。 if(375 > x){ if(y+9 > 200){ if(225 > y){ ca=1000; cb=1000; vy=-vy; i=i+10; cc=1; } } } } } if(dc == 0){ if(x+9 > 100){ // 標的Hにぶつかった時の反応。 if(117 > x){ if(y+9 > 100){ if(117 > y){ vy=-vy; i=i+20; } } } } } if(ec == 0){ if(x+9 > 200){ // 標的Iにぶつかった時の反応。 if(217 > x){ if(y+9 > 100){ if(117 > y){ vy=-vy; i=i+20; } } } } } if(fc == 0){ if(x+9 > 300){ // 標的Jにぶつかった時の反応。 if(317 > x){ if(y+9 > 100){ if(117 > y){ vy=-vy; i=i+20; } } } } } if(gc == 0){ if(x+9 > 200){ // 標的Kにぶつかった時の反応。 if(213 > x){ if(y+9 > 30){ if(43 > y){ vy=-vy; i=i+50; } } } } } if(hc == 0){ if(x+9 > 0){ // 標的Lにぶつかった時の反応。 if(21 > x){ if(y+9 > 0){ if(21 > y){ vy=-vy; i=i-20; } } } } } if(ic == 0){ if(x+9 > 379){ // 標的Mにぶつかった時の反応。 if(400 > x){ if(y+9 > 0){ if(21 > y){ vy=-vy; i=i-20; } } } } } if(ic == 0){ if(x+9 > 300){ // 標的Nにぶつかった時の反応。 if(321 > x){ if(y+9 > 400){ if(421 > y){ vy=-vy; i=i-30; } } } } } if(ic == 0){ if(x+9 > 79){ // 標的Oにぶつかった時の反応。 if(100 > x){ if(y+9 > 400){ if(421 > y){ vy=-vy; i=i-30; } } } } } repaint(); try { if (i < 10){ th.sleep(144); } if (i >= 10){ th.sleep(128); } else if (i > 20){ th.sleep(112); } else if (i > 30){ th.sleep(96); } else if (i > 40){ th.sleep(80); } else if (i > 50){ th.sleep(64); } else if (i > 60){ th.sleep(48); } else if (i > 70){ th.sleep(32); } else if (i > 80){ th.sleep(16); } else if (i > 90){ th.sleep(0); } } catch(InterruptedException e){} } } /** ペイント メソッド */ public void paint(Graphics g) { g.setColor(Color.black); g.drawLine(xmin,ymin,xmin,ymax); g.drawLine(xmin,ymin,xmax,ymin); g.drawLine(xmax,ymin,xmax,ymax); g.drawLine(xmin,ymax,xmax,ymax); g.drawImage(img2,px,py,this); g.drawImage(img,x,y,this); g.drawImage(img3,a,b,this); g.drawImage(img3,c,d,this); g.drawImage(img3,e,f,this); g.drawImage(img3,j,h,this); g.drawImage(img3,k,l,this); g.drawImage(img3,aa,ab,this); g.drawImage(img3,ba,bb,this); g.drawImage(img3,ca,cb,this); g.drawImage(img4,da,db,this); g.drawImage(img4,ea,eb,this); g.drawImage(img4,fa,fb,this); g.drawImage(img5,ga,gb,this); g.drawImage(img6,ha,hb,this); g.drawImage(img6,ia,ib,this); g.drawImage(img7,ja,jb,this); g.drawImage(img7,ka,kb,this); if(z == 1){ g.drawString( "GAME OVER 得点:"+i, 130, 300 ); } } /** ストップ メソッド */ public void stop( ) { if (th != null) { th = null; } } // KeyListener のメソッド /** キイが押されたときの処理 */ public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_RIGHT : px=px+vpx; if(px > xmax-pl) px=xmax-pl; break; case KeyEvent.VK_LEFT : px=px-vpx; if(px < xmin) px=xmin; break; } repaint(); } /** キイが離されたときの処理 */ public void keyReleased(KeyEvent e) { } /** キイが押して離されたときの処理 */ public void keyTyped(KeyEvent e) { } }