如何在Java中重启我的Applet?

时间:2014-03-03 00:08:46

标签: java applet

我一直在尝试在Applet中制作一个关于玩两个小球的游戏。其中一个由计算机使用,另一个由用户使用。一切正常,但我必须选择重新启动游戏或关闭它,我不知道如何。这是代码:

public class Entrada extends Applet{

private int[] limites; 
int keydown, puntajej, puntajec;
String nombrej;
private Jugador jugador;
private Compu compu;
private Bola ball;
private Raqueta raque, raque2;
private boolean perdio;


/**
 * Initialization method that will be called after the applet is loaded into
 * the browser.
 */
public void init() {

    this.resize(400,400);
    this.setBackground(Color.black);
    this.limites= new int[4];
    this.limites[0]=15;  
    this.limites[1]= this.getSize().width-20;
    this.limites[2]=20;
    this.limites[3]= this.getSize().height-20;

    this.perdio=false;
    this.keydown=0;
    this.puntajec=0;

    this.nombrej=JOptionPane.showInputDialog("Ingrese Nombre del Jugador"); 
    this.puntajej=Integer.parseInt(JOptionPane.showInputDialog("A cuantos puntos se jugara?"));       

    this.jugador= new Jugador(nombrej, puntajej);
    this.compu=new Compu(puntajec);
    this.ball=null;
    this.raque=null;
    this.raque2=null;

    this.crearRaqueta();
    this.crearBola();
    this.crearHilo();


}

public void destroy(){


     int a = Integer.parseInt(JOptionPane.showInputDialog("Quiere volver a jugar?\n"
            + "Si.\n"
            + "Acabar juego."));
    switch(a){
        case 1:
            this.init();
            break;
        case 2:
            this.destroy();
            break;
    }

}





      private void crearRaqueta(){

       int ancho=10;
       int alto=40;
       int posinx=5;
       int posiny=30;

       this.raque=new Raqueta(ancho, alto, posinx, posiny);

       this.raque2=new Raqueta(ancho, alto, posinx+364, posiny);
   }

    private void crearBola(){
        int radio=10;
        int posinx =this.getSize().width/2-30;
        int posiny =this.getSize().height/2;

        this.ball=new Bola(radio,posinx,posiny);

    }

    public boolean keyDown(Event evt, int key)
  {
      this.keydown=(char)key;
      System.out.println("Pulsó: "+keydown);
      return true;


  }

    public int getKey()
    {
        return keydown;
    }

    public void setBola(Bola ball)
    {
       this.ball=ball;
       repaint();
    }

    public Bola getBola(){
       return ball; 
    }


    public void setRaquetaJugador(Raqueta raque){
        this.raque2=raque;
        repaint();
    }

    public void setRaqueta(Raqueta raque){
        this.raque=raque;
        repaint();
    }

    private void crearHilo(){
        moveBola mb= new moveBola(this,ball,limites,raque2, jugador, compu);
        mb.start();
        moveRaquetaJugador mrj = new moveRaquetaJugador(limites, this.raque2, this);
        mrj.start();
        moveRaqueta mr = new moveRaqueta(limites, this.raque, this);
        mr.start();

    }

    public boolean getPerdio() {
        return perdio;
    }

    public int getPuntajej() {
        return puntajej;
    }




    public void paint(Graphics f){

        f.setColor(Color.yellow);
        f.drawLine(3, 3, this.limites[1], 3);// horizontal primera
        f.drawLine(this.limites[0],this.limites[2],this.limites[1],this.limites[2]);// horizontal segunda
        f.drawLine(this.limites[0],this.limites[3],this.limites[1],this.limites[3]);//horizontal ultima
        f.drawLine(this.limites[0],3,this.limites[0],this.limites[3]);//izquierda
        f.drawLine(this.limites[0]+this.getSize().width/2-8, 3, this.limites[0]+this.getSize().width/2-8, this.limites[3]);//media
        f.drawLine(this.limites[1],3,this.limites[1],this.limites[3]);// derecha


        //dibuja de bola
        f.setColor(this.ball.getColor());
        f.fillOval(this.ball.getPosx()-ball.getRadio(),this.ball.getPosy()-ball.getRadio(), ball.getRadio()*2,ball.getRadio()*2);

        //dibuja raqueta compu
        f.setColor(Color.red);
        f.drawRect(this.raque.getPosx()+10,this.raque.getPosy(), this.raque.getAncho(),this.raque.getAlto());
        f.setColor(Color.white);
        f.fillRect(this.raque.getPosx()+12,this.raque.getPosy()+2, this.raque.getAncho()-3, this.raque.getAlto()-3);


        //dibuja raqueta jugador
        f.setColor(Color.blue);
        f.drawRect(this.raque2.getPosx(),this.raque2.getPosy(), this.raque2.getAncho(),this.raque2.getAlto());
        f.setColor(Color.white);
        f.fillRect(this.raque2.getPosx()+2,this.raque2.getPosy()+2, this.raque2.getAncho()-3, this.raque2.getAlto()-3);
        this.keydown=0;

        //dibujo de puntaje compu
        f.setColor(Color.white);
        f.drawString("Compu="+this.compu.getPuntaje(), 20, 15);

        //dibujo puntaje jugador
        f.setColor(Color.blue);
        f.drawString(jugador.getNombre()+"="+jugador.getPuntaje(), this.limites[0]+this.getSize().width/2-5, 15);

       if(this.jugador.getPuntaje()==0){
           this.perdio=true;
           f.setColor(Color.red);
        f.drawString("GAME OVER...modafaka", this.getHeight()/2-85, this.getWidth()/2); 
        this.stop();
        this.repaint();

       }

    }




    public void update(Graphics f){
        Graphics dbg =null;
        //obtener el pantallazo
        Image dbImage=null;
        if(dbImage==null){
            dbImage= createImage (this.getSize().width, this.getSize().height);
            dbg =dbImage.getGraphics();
        }
        dbg.setColor(getBackground());
        dbg.fillRect(0, 0, this.getSize().width, this.getSize().height);
        dbg.setColor(getForeground());

        paint (dbg);
        f.drawImage(dbImage, 0, 0, this);
    }
}

如果有人可以告诉我如何让它重新启动,那就太好了。谢谢!

2 个答案:

答案 0 :(得分:0)

让程序的整个主方法体以及变量声明包含在while-loopif-statement中。

创建boolean play = true;并让while-loop具有条件while(play == true) 当游戏结束时,让游戏运行if-statement,检查玩家是否再次选择游戏或退出。

如果选择play again,请将play设置为true然后重新运行。如果选择了exit,请将play设置为falsebreak;

答案 1 :(得分:0)

您还可以查看按下了哪个按钮,例如Esc(使用switch-case-statement)或其他“魔术”然后打破游戏。休息之后,您可以感谢您玩游戏和显示菜单或退出游戏。