import java.applet.*; import java.awt.*; import java.awt.event.*; import java.awt.event.MouseEvent; import java.lang.*; public class b0 extends Applet implements KeyListener,Runnable,MouseListener { Cursor flecha=Cursor.getDefaultCursor(); Cursor mira=new Cursor(Cursor.CROSSHAIR_CURSOR); Image stars; Image rayo,rayoarr,rayoder,rayoizq,rayoaba;; Image InfoTool,WeaponTool; Point punto = new Point(); Point impacto = new Point(); AudioClip shot,TemaMusical; float[] fframeNumber = new float[3]; int[] iframeNumber = new int[3]; int enemMax=25; int enemEscapo=0; int Puntos=0; int AccionMouse=0; int numExp=0; boolean vivo=true; boolean controlp=true; boolean controlr=true; boolean controle=false; NaveAliada aliado; NaveEnemiga[] enemigo = new NaveEnemiga[3]; Explosion explota; Thread animado; Thread aliadot; Thread[] enemigot = new Thread[3]; Thread explotat; MediaTracker tracker; Dimension offDimension; Image offImage; Graphics offGraphics; TextField t=new TextField(15); public void init() { explota=new Explosion(); aliado=new NaveAliada(); setCursor(mira); tracker=new MediaTracker(this); shot=getAudioClip(getCodeBase(),"shot.au"); TemaMusical=getAudioClip(getCodeBase(),"carmina.au"); stars=getImage(getCodeBase(),"starfield.gif"); rayo=getImage(getCodeBase(),"rayo.gif"); rayoder=getImage(getCodeBase(),"rayod.gif"); rayoarr=getImage(getCodeBase(),"rayoar.gif"); rayoaba=getImage(getCodeBase(),"rayoab.gif"); rayoizq=getImage(getCodeBase(),"rayoi.gif"); InfoTool=getImage(getCodeBase(),"tools2.gif"); WeaponTool=getImage(getCodeBase(),"tools1.gif"); for(int k=0;k<=2;k++) { enemigo[k] = new NaveEnemiga(); } tracker.addImage(stars,1); tracker.addImage(rayo,1); tracker.addImage(rayoarr,1); tracker.addImage(rayoaba,1); tracker.addImage(rayoder,1); tracker.addImage(rayoizq,1); tracker.addImage(aliado.imagen,2); tracker.addImage(InfoTool,7); tracker.addImage(WeaponTool,7); for(int l=0;l<2;l++) { tracker.addImage(aliado.naveizq[l],4); tracker.addImage(aliado.naveder[l],4); tracker.addImage(aliado.navesub[l],4); tracker.addImage(aliado.navebaj[l],4); } for(int l=0;l<3;l++) { if(enemigo[l].tipo==1) { tracker.addImage(enemigo[l].imagen11,5); tracker.addImage(enemigo[l].imagen12,5); tracker.addImage(enemigo[l].imagen13,5); tracker.addImage(enemigo[l].imagen14,5); tracker.addImage(enemigo[l].imagen15,5); } if(enemigo[l].tipo==2) { tracker.addImage(enemigo[l].imagen21,5); tracker.addImage(enemigo[l].imagen22,5); tracker.addImage(enemigo[l].imagen23,5); tracker.addImage(enemigo[l].imagen24,5); tracker.addImage(enemigo[l].imagen25,5); } /* if(enemigo[l].tipo==3) { tracker.addImage(enemigo[l].imagen31,5); tracker.addImage(enemigo[l].imagen32,5); tracker.addImage(enemigo[l].imageni31,5); tracker.addImage(enemigo[l].imageni32,5); tracker.addImage(enemigo[l].imageni33,5); tracker.addImage(enemigo[l].imagend31,5); tracker.addImage(enemigo[l].imagend32,5); tracker.addImage(enemigo[l].imagend33,5); } */ } for(int l=0;l<9;l++) tracker.addImage(explota.imagen[l],6); addKeyListener(this); addMouseListener(this); requestFocus(); add(t); iframeNumber[0]=-1; iframeNumber[1]=749; iframeNumber[2]=1499; fframeNumber[0]=-1; fframeNumber[1]=749; fframeNumber[2]=1499; } public void start() { animado=new Thread(this); aliadot=new Thread(aliado); explotat=new Thread(explota); animado.start(); aliadot.start(); explotat.start(); TemaMusical.loop(); for(int k=0;k<=2;k++) { enemigot[k]=new Thread(enemigo[k]); enemigot[k].start(); } } public void stop() { animado=null; aliadot=null; offGraphics=null; offImage=null; } public void run() { Thread.currentThread().setPriority(Thread.MIN_PRIORITY); while(vivo) { for(int k=0;k<=2;k++) { if((impacto.x>(enemigo[k].x+enemigo[k].rangox))&&(impacto.x<(enemigo[k].x+enemigo[k].w-enemigo[k].rangox)) &&(impacto.y>(enemigo[k].y+enemigo[k].rangoy))&&(impacto.y<(enemigo[k].y+enemigo[k].h-enemigo[k].rangoy))) { punto.x=800; punto.y=500; Puntos=Puntos+10; explota.x=enemigo[k].x; explota.y=enemigo[k].y; explota.w=enemigo[k].w; explota.h=enemigo[k].h; enemigo[k].vivo=false; controle=true; enemigot[k]=null; enemMax--; if(enemMax==0) controlr=false; } if((enemigo[k].vivo==false)&&controlr) { enemigo[k] = new NaveEnemiga(); enemigot[k]=new Thread(enemigo[k]); enemigot[k].start(); } if((enemigo[k].x<(0-enemigo[k].w))||(enemigo[k].x>(735))||(enemigo[k].y<(0-enemigo[k].h))||(enemigo[k].numFrame>8)) { enemigo[k].vivo=false; enemigot[k]=null; enemEscapo++; enemMax--; } } repaint(); try{ Thread.sleep(10); } catch(InterruptedException e){} } } public void paint(Graphics g) { update(g); } public void update(Graphics g) { Dimension d=size(); int w,h; boolean downloaded=true; g.setFont(new Font("Arial", Font.BOLD, 40)); if(!tracker.checkAll()) { g.setColor(Color.black); g.fillRect(0,0,d.width,d.height); g.setColor(Color.blue.darker()); g.drawString("GET READY!!",d.width/2-150,d.height/2); try{ downloaded=tracker.waitForAll(5000); } catch(InterruptedException e){} }else { t.setText("Puntos: "+Puntos); if((offGraphics==null)||(d.width!=offDimension.width) ||(d.height!=offDimension.height)) { offDimension=d; offImage=createImage(d.width,d.height); offGraphics=offImage.getGraphics(); } offGraphics.setColor(getBackground()); offGraphics.fillRect(0,0,d.width,d.height); offGraphics.setColor(Color.black); for(int k=0;k<=2;k++) { if(enemigo[k].tipo==1) { enemigo[k].w=enemigo[k].imagen11.getWidth(this); enemigo[k].h=enemigo[k].imagen11.getHeight(this); } if(enemigo[k].tipo==2) { enemigo[k].w=enemigo[k].imagen21.getWidth(this); enemigo[k].h=enemigo[k].imagen21.getHeight(this); } /* if(enemigo[k].tipo==3) { enemigo[k].w=enemigo[k].imagen31.getWidth(this); enemigo[k].h=enemigo[k].imagen31.getHeight(this); } */ enemigo[k].rangox=enemigo[k].w/4; enemigo[k].rangoy=enemigo[k].h/4; } w=stars.getWidth(this); h=stars.getHeight(this); offGraphics.drawImage(stars,(iframeNumber[0])%(w+d.width)-w,0,this); offGraphics.drawImage(stars,(iframeNumber[1])%(w+d.width)-w,0,this); offGraphics.drawImage(stars,(iframeNumber[2])%(w+d.width)-w,0,this); if(controlr) { if(AccionMouse==1) { AccionMouse--; shot.play(); if(aliado.FrameDeImagen==-1) { offGraphics.drawImage(rayo,aliado.x,aliado.y,this); impacto.x=aliado.x+67; impacto.y=aliado.y; } else if((aliado.movimiento==103)||(aliado.movimiento==100) ||(aliado.movimiento==97)||(aliado.movimiento==87) ||(aliado.movimiento==83)||(aliado.movimiento==90)) { offGraphics.drawImage(rayoizq,aliado.x,aliado.y,this); impacto.x=aliado.x+26; impacto.y=aliado.y+12; } else if((aliado.movimiento==105)||(aliado.movimiento==102) ||(aliado.movimiento==99)||(aliado.movimiento==82) ||(aliado.movimiento==70)||(aliado.movimiento==67)) { offGraphics.drawImage(rayoder,aliado.x,aliado.y,this); impacto.x=aliado.x+107; impacto.y=aliado.y+12; } else if((aliado.movimiento==104)||(aliado.movimiento==69)) { offGraphics.drawImage(rayoarr,aliado.x,aliado.y-20,this); impacto.x=aliado.x+67; impacto.y=aliado.y-20; } else if((aliado.movimiento==98)||(aliado.movimiento==88)) { offGraphics.drawImage(rayoaba,aliado.x,aliado.y,this); impacto.x=aliado.x+67; impacto.y=aliado.y+96; } } if(controlp) { w=aliado.imagen.getWidth(this); h=aliado.imagen.getHeight(this); aliado.x=(d.width-w)/2; aliado.y=(d.height-h)/2; offGraphics.drawImage(aliado.imagen,aliado.x,aliado.y,this); } else { if (aliado.FrameDeImagen==-1) offGraphics.drawImage(aliado.imagen,aliado.x,aliado.y,this); else {if(!aliado.detener) { if((aliado.FrameDeImagen==0)||(aliado.FrameDeImagen==1)) { if((aliado.movimiento==103)||(aliado.movimiento==100) ||(aliado.movimiento==97)||(aliado.movimiento==87) ||(aliado.movimiento==83)||(aliado.movimiento==90)) offGraphics.drawImage(aliado.naveizq[aliado.FrameDeImagen],aliado.x,aliado.y,this); else if((aliado.movimiento==105)||(aliado.movimiento==102) ||(aliado.movimiento==99)||(aliado.movimiento==82) ||(aliado.movimiento==70)||(aliado.movimiento==67)) offGraphics.drawImage(aliado.naveder[aliado.FrameDeImagen],aliado.x,aliado.y,this); else if((aliado.movimiento==104)||(aliado.movimiento==69)) offGraphics.drawImage(aliado.navesub[aliado.FrameDeImagen],aliado.x,aliado.y,this); else if((aliado.movimiento==98)||(aliado.movimiento==88)) offGraphics.drawImage(aliado.navebaj[aliado.FrameDeImagen],aliado.x,aliado.y,this); else offGraphics.drawImage(aliado.imagen,aliado.x,aliado.y,this); } else { aliado.FrameDeImagen=1; if((aliado.movimiento==103)||(aliado.movimiento==100) ||(aliado.movimiento==97)||(aliado.movimiento==87) ||(aliado.movimiento==83)||(aliado.movimiento==90)) offGraphics.drawImage(aliado.naveizq[aliado.FrameDeImagen],aliado.x,aliado.y,this); else if((aliado.movimiento==105)||(aliado.movimiento==102) ||(aliado.movimiento==99)||(aliado.movimiento==82) ||(aliado.movimiento==70)||(aliado.movimiento==67)) offGraphics.drawImage(aliado.naveder[aliado.FrameDeImagen],aliado.x,aliado.y,this); else if((aliado.movimiento==104)||(aliado.movimiento==69)) offGraphics.drawImage(aliado.navesub[aliado.FrameDeImagen],aliado.x,aliado.y,this); else if((aliado.movimiento==98)||(aliado.movimiento==88)) offGraphics.drawImage(aliado.navebaj[aliado.FrameDeImagen],aliado.x,aliado.y,this); else offGraphics.drawImage(aliado.imagen,aliado.x,aliado.y,this); } } else { if((aliado.movimiento==103)||(aliado.movimiento==100) ||(aliado.movimiento==97)||(aliado.movimiento==87) ||(aliado.movimiento==83)||(aliado.movimiento==90)) offGraphics.drawImage(aliado.naveizq[aliado.FrameDeImagen],aliado.x,aliado.y,this); else if((aliado.movimiento==105)||(aliado.movimiento==102) ||(aliado.movimiento==99)||(aliado.movimiento==82) ||(aliado.movimiento==70)||(aliado.movimiento==67)) offGraphics.drawImage(aliado.naveder[aliado.FrameDeImagen],aliado.x,aliado.y,this); else if((aliado.movimiento==104)||(aliado.movimiento==69)) offGraphics.drawImage(aliado.navesub[aliado.FrameDeImagen],aliado.x,aliado.y,this); else if((aliado.movimiento==98)||(aliado.movimiento==88)) offGraphics.drawImage(aliado.navebaj[aliado.FrameDeImagen],aliado.x,aliado.y,this); else offGraphics.drawImage(aliado.imagen,aliado.x,aliado.y,this); aliado.FrameDeImagen--; } } } for(int l=0;l<=2;l++) { if((enemigo[l].aparece)&&(enemigo[l].vivo)); { if(enemigo[l].tipo==1) { if(enemigo[l].numFrame==1) offGraphics.drawImage(enemigo[l].imagen11,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==2) offGraphics.drawImage(enemigo[l].imagen12,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==3) offGraphics.drawImage(enemigo[l].imagen13,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==4) offGraphics.drawImage(enemigo[l].imagen14,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame>=5) offGraphics.drawImage(enemigo[l].imagen15,enemigo[l].x,enemigo[l].y,this); } if(enemigo[l].tipo==2) { if(enemigo[l].numFrame==1) offGraphics.drawImage(enemigo[l].imagen21,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==2) offGraphics.drawImage(enemigo[l].imagen22,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==3) offGraphics.drawImage(enemigo[l].imagen23,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==4) offGraphics.drawImage(enemigo[l].imagen24,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame>=5) offGraphics.drawImage(enemigo[l].imagen25,enemigo[l].x,enemigo[l].y,this); } /* if(enemigo[l].tipo==3) { if(enemigo[l].numFrame==1) offGraphics.drawImage(enemigo[l].imagen31,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==2) offGraphics.drawImage(enemigo[l].imagen32,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==3) offGraphics.drawImage(enemigo[l].imageni31,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==4) offGraphics.drawImage(enemigo[l].imageni32,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==5) offGraphics.drawImage(enemigo[l].imageni33,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==6) offGraphics.drawImage(enemigo[l].imagend31,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==7) offGraphics.drawImage(enemigo[l].imagend32,enemigo[l].x,enemigo[l].y,this); if(enemigo[l].numFrame==8) offGraphics.drawImage(enemigo[l].imagend33,enemigo[l].x,enemigo[l].y,this); } */ } } if(controle) { offGraphics.drawImage(explota.imagen[numExp],explota.x+explota.w/2-36,explota.y+explota.h/2-62,this); numExp++; if(numExp>8) { controle=false; numExp=0; } } } if(!controlr) { offGraphics.setColor(Color.blue.darker()); offGraphics.setFont(new Font("Arial", Font.BOLD, 40)); offGraphics.drawString("FIN",d.width/2-70,d.height/2); } offGraphics.drawImage(WeaponTool,0,255,this); offGraphics.drawImage(InfoTool,685,255,this); g.drawImage(offImage,0,0,this); } } public void keyPressed(KeyEvent event) { controlp=false; aliado.detener=false; aliado.FrameDeImagen++; aliado.movimiento=event.getKeyCode(); if(aliado.movimiento==100||aliado.movimiento==83) // Teclado Num:100 Alf:83 { if(aliado.x>=0) {aliado.x-=4;} iframeNumber[0]=(int)Math.floor((fframeNumber[0]+=0.4)); iframeNumber[1]=(int)Math.floor((fframeNumber[1]+=0.4)); iframeNumber[2]=(int)Math.floor((fframeNumber[2]+=0.4)); } if(aliado.movimiento==104||aliado.movimiento==69) // Teclado Num:104 Alf:69 if(aliado.y>=0) {aliado.y-=4;} if(aliado.movimiento==102||aliado.movimiento==70) // Teclado Num:102 Alf:70 { if(aliado.x<=599) {aliado.x+=4;} iframeNumber[0]=(int)Math.floor((fframeNumber[0]-=0.4)); iframeNumber[1]=(int)Math.floor((fframeNumber[1]-=0.4)); iframeNumber[2]=(int)Math.floor((fframeNumber[2]-=0.4)); } if(aliado.movimiento==98||aliado.movimiento==88) // Teclado Num:98 Alf:88 if(aliado.y<=306) {aliado.y+=4;} if(aliado.movimiento==103||aliado.movimiento==87) // Teclado Num:103 Alf:87 { if(aliado.x>=0) {aliado.x-=4;} if(aliado.y>=0) {aliado.y-=4;} iframeNumber[0]=(int)Math.floor((fframeNumber[0]+=0.25)); iframeNumber[1]=(int)Math.floor((fframeNumber[1]+=0.25)); iframeNumber[2]=(int)Math.floor((fframeNumber[2]+=0.25)); } if(aliado.movimiento==105||aliado.movimiento==82) // Teclado Num:105 Alf:82 { if(aliado.x<=599) {aliado.x+=4;} if(aliado.y>=0) {aliado.y-=4;} iframeNumber[0]=(int)Math.floor((fframeNumber[0]-=0.25)); iframeNumber[1]=(int)Math.floor((fframeNumber[1]-=0.25)); iframeNumber[2]=(int)Math.floor((fframeNumber[2]-=0.25)); } if(aliado.movimiento==97||aliado.movimiento==90) // Teclado Num:97 Alf:90 { if(aliado.x>=0) {aliado.x-=4;} if(aliado.y<=306) {aliado.y+=4;} iframeNumber[0]=(int)Math.floor((fframeNumber[0]+=0.25)); iframeNumber[1]=(int)Math.floor((fframeNumber[1]+=0.25)); iframeNumber[2]=(int)Math.floor((fframeNumber[2]+=0.25)); } if(aliado.movimiento==99||aliado.movimiento==67) // Teclado Num:99 Alf:67 { if(aliado.x<=599) {aliado.x+=4;} if(aliado.y<=306) {aliado.y+=4;} iframeNumber[0]=(int)Math.floor((fframeNumber[0]-=0.25)); iframeNumber[1]=(int)Math.floor((fframeNumber[1]-=0.25)); iframeNumber[2]=(int)Math.floor((fframeNumber[2]-=0.25)); } // if((aliado.movimiento>event.VK_A)||(aliado.movimientocontadorm) { if(tipo==1||tipo==2) { if(movimiento==1) y--; if(movimiento==3) if(y<150) y++; }else { if(movimiento==0) while(x>-160) x--; if(movimiento==2) while(x<735) x++; } contadorm++; try{ Thread.sleep(delaym); } catch(InterruptedException e){} } contadorm=0; try{ Thread.sleep(10); } catch(InterruptedException e){} } } } public class Explosion implements Runnable { Image[] imagen=new Image[9]; int x,y; int w,h; //ancho y alto de la NaveEnemiga que mataron boolean vivo=false; public Explosion() { for(int k=0;k<=8;k++) imagen[k]=getImage(getCodeBase(),"explosion"+k+".gif"); } public void run() { Thread.currentThread().setPriority(Thread.MIN_PRIORITY); while(vivo) { try{ Thread.sleep(20); } catch(InterruptedException e){} } } } public int getRandomInt(int lowerLimit, int upperLimit) { double tmpNum; tmpNum=upperLimit-lowerLimit; tmpNum*=Math.random(); tmpNum=Math.round(tmpNum); tmpNum+=lowerLimit; return((int)tmpNum); } public void mouseClicked(MouseEvent e) { AccionMouse++; punto=e.getPoint(); } public void mousePressed(MouseEvent e) { AccionMouse=1; punto=e.getPoint(); } public void mouseReleased(MouseEvent e) { AccionMouse--; punto=e.getPoint(); } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e) {} }