你如何重新启动Java applet?

时间:2013-10-09 22:50:42

标签: java applet awt

我正在为一个学校项目制作一个游戏,并且已经坚持了几天。我将如何重新启动以下applet?我试图制作restart()方法,但缺乏必要的技能。

package main;

import game.framework.Animation;

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.lang.Thread.State;
import java.net.URL;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JPanel;


//add speedboost
public class Main extends Applet implements Runnable, KeyListener{

    enum GameState {
        Running, Dead
    }


    static GameState state = GameState.Running;



private Background bg2, bg1;
private boolean restart = false;    
private Player player;
private SpeedBoost sb1;
private Image image;
private Image backsprite1, backsprite2;
private Image player1, dad1, dad2, dad3;
private Image player2;
private Image player3;
private Image back1;
private Image back2, endscreen;
private Image back3, coin, bigcoin;
 private Image back4, sbimg;
 public Image tilebase, platform;
 private Block block1, block2, block3, block4;
private Coin coin1, coin2, coin3, coin4, coin5;
private LargeCoin bc1; 
//use for the base...
private Dad dad;
private Graphics second;
private Animation playwalk, dadwalk;
private URL base;
private Platform plat1, plat2, plat3, plat4, plat5, plat6, plat7;
public static int score = 1, coinsint = 1;
public static String score2, coins = "1";
public static int scorespeed = 1;
public int hs1, hs2, hs3, hs4, hs5, totcoins;
public String hs1s, hs2s, hs3s, hs4s, hs5s, totcoinss;
public Ends ends;
    @Override
        public void init() {
        setSize(800, 480);
        setBackground(Color.WHITE);
        setFocusable(true);
        addKeyListener(this);
        Frame frame = (Frame) this.getParent().getParent();
        frame.setTitle("Game v1.2.2");
        try {
            base = getDocumentBase();
        } catch (Exception e) {
            // TODO: handle exception
        }

        endscreen = getImage(base, "data/endscreen.png");

        coin = getImage(base, "data/coin.png");
  bigcoin = getImage(base, "data/bigcoin.png");      

tilebase = getImage(base, "data/tilebase.png");
 platform = getImage(base, "data/blocksmall.png");
       back1 = getImage(base, "data/back1.png");
        back2 = getImage(base, "data/back2.png");
        back3 = getImage(base, "data/back3.png");
        back4 = getImage(base, "data/back4.png");`enter code here`

        sbimg = getImage(base, "data/speedboost.png");
        player1 = getImage(base, "data/player1.png");
        player2 = getImage(base, "data/player2.png");
        player3 = getImage(base, "data/player3.png");

        dad1 = getImage(base, "data/dad1.png");
        dad2 = getImage(base, "data/dad2.png");
        dad3 = getImage(base, "data/dad3.png");

        backsprite1 = back1;
        backsprite2 = back2;

        playwalk = new Animation();
      playwalk.addFrame(player1, 80);
      playwalk.addFrame(player2, 80);
      playwalk.addFrame(player3, 80);

dadwalk = new Animation();
dadwalk.addFrame(dad1, 80);
dadwalk.addFrame(dad2, 80);
dadwalk.addFrame(dad3, 80);
    }
public void animate() {
    playwalk.update(15); 
dadwalk.update(15);


    }








@Override
        public void start() {
    state = state.Running;
          ends = new Ends(-3, 0);
                 //create objects at positions

        coin1 = new Coin(-100, -10);
        coin2 = new Coin(-10, -10);
        coin3 = new Coin(-10, -10);
        coin4 = new Coin(-10, -10);
        coin5 = new Coin(-10, -10);

          player = new Player();



          dad = new Dad();

          bg1 = new Background(1, 0);
      bg2 = new Background(2099, 0);

      plat1 = new Platform(0,0);
      plat2 = new Platform(-100,0);
      plat3 = new Platform(-200,0);
      plat4 = new Platform(-300,0);
      plat5 = new Platform(-400,0);
      plat6 = new Platform(-500,0);
      plat7 = new Platform(-600,0);

      sb1 = new SpeedBoost(-100, 0);
      bc1 = new LargeCoin(-99, 0);

      block1 = new Block(0, 0);
      block2 = new Block(0, 0);
      block3 = new Block(0, 0);
      block4 = new Block(0, 0);



      Thread thread = new Thread(this);
          thread.start();
      }




            @Override
                public void stop() {
                // TODO Auto-generated method stub
            }

            @Override
            public void destroy() {
                // TODO Auto-generated method stub
            }

            @Override
            public void run() {
                if (state == GameState.Running) {
                while (true) {
                    //selecting sprites for the background

                    //updates go here
if(bg1.getBgX() < -2100){
    bg1.setBgX(2100);
}
 if(bg2.getBgX() < -2100){
    bg2.setBgX(2100);
}

 //backgrounds arent working
 if(bg1.getBgX() > 2000){
                           Random rand = new Random();

                            int  nel = rand.nextInt(4) + 1;
                             if(nel == 1){
                                backsprite1 = back1;
                             }if(nel == 2){
                                 backsprite1 = back2;
                             }if(nel == 3){
                                 backsprite1 = back3;
                             }if(nel == 4){
                                backsprite1 = back4;
                             }
                    }

                if(bg2.getBgX() > 2000){
                             Random rand = new Random();

                                int  n1 = rand.nextInt(4) + 1;
                                 if(n1 == 1){
                                    backsprite2 = back1;
                                 }if(n1 == 2){
                                     backsprite2 = back2;
                                 }if(n1 == 3){
                                     backsprite2 = back3;
                                 }if(n1 == 4){
                                    backsprite2 = back4;
                                 }
                }

                block4.update();
                block3.update();
                block2.update();
                    block1.update();

                    sb1.update();

                    bc1.update();

                    player.update();

                    dad.update();

                    bg1.update();
                   bg2.update();

                   coin1.update();
                   coin2.update();
                   coin3.update();
                   coin4.update();
                   coin5.update();


                   plat1.update();
                    plat2.update();
                    plat3.update();
                    plat4.update();
                    plat5.update();
                    plat6.update();
                    plat7.update();

                    if(Block.lives < 0){
                        state = GameState.Dead;

 }



                    animate();
                    repaint();
                    try {
                        Thread.sleep(17);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }

            }
            @Override
            public void update(Graphics g) {
                if (image == null) {
                    image = createImage(this.getWidth(), this.getHeight());
                    second = image.getGraphics();
                }


            //other updates go here
                block1.update();
                block2.update();
                block3.update();
                block4.update();



                sb1.update();

                bc1.update();

                coin1.update();
                coin2.update();
                coin3.update();
                coin4.update();
                coin5.update();

                plat1.update();
                plat2.update();
                plat3.update();
                plat4.update();
                plat5.update();
                plat6.update();
                plat7.update();

                bg1.update();
                bg2.update();

                player.update();
               dad.update();


                second.setColor(getBackground());
                second.fillRect(0, 0, getWidth(), getHeight());
                second.setColor(getForeground());
                paint(second);

                g.drawImage(image, 0, 0, this);


            }


            @Override
            public void paint(Graphics g) {
                if (state == GameState.Running) {
                //main graphics identifyers here
            // first are drawn below last
                 //need to make the platform lower down, see class for explanation

                    g.drawImage(backsprite1, bg1.getBgX(), bg1.getBgY(), this);
                    g.drawImage(backsprite2, bg2.getBgX(), bg2.getBgY(), this);


                 g.drawImage(playwalk.getImage(), player.getCenterX(), player.getCenterY(), this);

                 g.drawImage(platform, plat1.getCenterX(), plat1.getCenterY(), this);
                    g.drawImage(platform, plat2.getCenterX(), plat2.getCenterY(), this);
                    g.drawImage(platform, plat3.getCenterX(), plat3.getCenterY(), this);
                    g.drawImage(platform, plat4.getCenterX(), plat4.getCenterY(), this);
                    g.drawImage(platform, plat5.getCenterX(), plat5.getCenterY(), this);
                    g.drawImage(platform, plat6.getCenterX(), plat6.getCenterY(), this);
                    g.drawImage(platform, plat7.getCenterX(), plat7.getCenterY(), this);

                    g.drawImage(sbimg, sb1.getCenterX(), sb1.getCenterY(), this);

                    g.drawImage(bigcoin, bc1.centerX, bc1.centerY, this);

                    g.drawImage(dadwalk.getImage(), dad.centerX, dad.centerY, this);

           g.drawImage(tilebase, block1.getCenterX(), block1.getCenterY(), this);
            g.drawImage(tilebase, block2.getCenterX(), block2.getCenterY(), this);
            g.drawImage(tilebase, block3.getCenterX(), block3.getCenterY(), this);
            g.drawImage(tilebase, block4.getCenterX(), block4.getCenterY(), this);

            g.drawImage(coin, coin1.getCenterX(), coin1.getCenterY(), this);
            g.drawImage(coin, coin2.getCenterX(), coin2.getCenterY(), this);
            g.drawImage(coin, coin3.getCenterX(), coin3.getCenterY(), this);
            g.drawImage(coin, coin4.getCenterX(), coin4.getCenterY(), this);
            g.drawImage(coin, coin5.getCenterX(), coin5.getCenterY(), this);



            g.setColor(Color.MAGENTA);
            g.drawString(score2, 700, 25);
            Font font = new Font("Serif", Font.PLAIN, 36);
            g.setFont(font);

            g.drawString(coins, 20, 25);


            }else if (state == GameState.Dead) {
                totcoins += coinsint;
                coinsint = 0;
                hs1s = String.valueOf(hs1);
                hs2s = String.valueOf(hs2);
                hs3s = String.valueOf(hs3);
                hs4s = String.valueOf(hs4);
                hs5s = String.valueOf(hs5);
                totcoinss = String.valueOf(totcoins);




                if(score > hs1){
                    hs1 = score;
                }else if(score > hs2){
                    hs2 = score;
                }else if(score > hs3){
                        hs3 = score;
                    }else if(score > hs4){
                        hs4 = score;
                    }else if(score > hs5){
                        hs5 = score;
                    }
                scorespeed = 0;
              //format this shit up in here
                //when restart is init, then this will be tested


                g.setColor(Color.BLACK);
                g.fillRect(0, 0, 800, 480);
            g.setColor(Color.WHITE);
            g.drawString(hs1s, 230, 220);
            g.drawString(hs2s, 230, 250);
            g.drawString(hs3s, 230, 280);
            g.drawString(hs4s, 230, 310);
            g.drawString(hs5s, 230, 340);
           g.drawString(totcoinss, 700, 100);
           g.drawImage(endscreen, ends.cornX, ends.cornY, this);    

            }

            }
    //fix the android stuff







@Override
    public void keyPressed(KeyEvent e) {

    switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:

            player.jump();
            Player.jumps += 1;
            break;


        }               
    switch (e.getKeyCode()) {
    case KeyEvent.VK_SPACE:
if(state == state.Dead){

}   
    }


}

@Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
        switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:

            break;
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub

    }
    public  Background getBg1() {
        return bg1;
    }
    public void setBg1(Background bg1) {
        this.bg1 = bg1;
    }
    public Background getBg2() {
        return bg2;
    }
    public void setBg2(Background bg2) {
        this.bg2 = bg2;
    }
    public Player getPlayer() {
        return player;
    }
    public void setPlayer(Player player) {
        this.player = player;
    }
    public Image getImage() {
        return image;
    }
    public void setImage(Image image) {
        this.image = image;
    }
    public Image getBacksprite() {
        return backsprite1;
    }
    public void setBacksprite(Image backsprite) {
        this.backsprite1 = backsprite;
    }
    public Image getBacksprite1() {
        return backsprite1;
    }
    public void setBacksprite1(Image backsprite1) {
        this.backsprite1 = backsprite1;
    }
    public Image getBacksprite2() {
        return backsprite2;
    }
    public void setBacksprite2(Image backsprite2) {
        this.backsprite2 = backsprite2;
    }
    public Image getPlayer1() {
        return player1;
    }
    public void setPlayer1(Image player1) {
        this.player1 = player1;
    }
    public Image getPlayer2() {
        return player2;
    }
    public void setPlayer2(Image player2) {
        this.player2 = player2;
    }
    public Image getPlayer3() {
        return player3;
    }
    public void setPlayer3(Image player3) {
        this.player3 = player3;
    }
    public Image getBack1() {
        return back1;
    }
    public void setBack1(Image back1) {
        this.back1 = back1;
    }
    public Image getBack2() {
        return back2;
    }
    public void setBack2(Image back2) {
        this.back2 = back2;
    }
    public Image getBack3() {
        return back3;
    }
    public void setBack3(Image back3) {
        this.back3 = back3;
    }
    public Image getBack4() {
        return back4;
    }
    public void setBack4(Image back4) {
        this.back4 = back4;
    }
    public Graphics getSecond() {
        return second;
    }
    public void setSecond(Graphics second) {
        this.second = second;
    }
    public Animation getPlaywalk() {
        return playwalk;
    }
    public void setPlaywalk(Animation playwalk) {
        this.playwalk = playwalk;
    }
    public URL getBase() {
        return base;
    }
    public void setBase(URL base) {
        this.base = base;
    }
    public static Image getTilebase() {
        // TODO Auto-generated method stub
        return null;
    }

    public GameState getState() {
        return state;
    }

    public void setState(GameState state) {
        this.state = state;
    }

    public SpeedBoost getSb1() {
        return sb1;
    }

    public void setSb1(SpeedBoost sb1) {
        this.sb1 = sb1;
    }

    public Image getCoin() {
        return coin;
    }

    public void setCoin(Image coin) {
        this.coin = coin;
    }

    public Image getSbimg() {
        return sbimg;
    }

    public void setSbimg(Image sbimg) {
        this.sbimg = sbimg;
    }

    public Image getPlatform() {
        return platform;
    }

    public void setPlatform(Image platform) {
        this.platform = platform;
    }

    public Block getBlock1() {
        return block1;
    }

    public void setBlock1(Block block1) {
        this.block1 = block1;
    }

    public Block getBlock2() {
        return block2;
    }

    public void setBlock2(Block block2) {
        this.block2 = block2;
    }

    public Block getBlock3() {
        return block3;
    }

    public void setBlock3(Block block3) {
        this.block3 = block3;
    }

    public Block getBlock4() {
        return block4;
    }

    public void setBlock4(Block block4) {
        this.block4 = block4;
    }

    public Coin getCoin1() {
        return coin1;
    }

    public void setCoin1(Coin coin1) {
        this.coin1 = coin1;
    }

    public Coin getCoin2() {
        return coin2;
    }

    public void setCoin2(Coin coin2) {
        this.coin2 = coin2;
    }

    public Coin getCoin3() {
        return coin3;
    }

    public void setCoin3(Coin coin3) {
        this.coin3 = coin3;
    }

    public Coin getCoin4() {
        return coin4;
    }

    public void setCoin4(Coin coin4) {
        this.coin4 = coin4;
    }

    public Coin getCoin5() {
        return coin5;
    }

    public void setCoin5(Coin coin5) {
        this.coin5 = coin5;
    }

    public Platform getPlat1() {
        return plat1;
    }

    public void setPlat1(Platform plat1) {
        this.plat1 = plat1;
    }

    public Platform getPlat2() {
        return plat2;
    }

    public void setPlat2(Platform plat2) {
        this.plat2 = plat2;
    }

    public Platform getPlat3() {
        return plat3;
    }

    public void setPlat3(Platform plat3) {
        this.plat3 = plat3;
    }

    public Platform getPlat4() {
        return plat4;
    }

    public void setPlat4(Platform plat4) {
        this.plat4 = plat4;
    }

    public Platform getPlat5() {
        return plat5;
    }

    public void setPlat5(Platform plat5) {
        this.plat5 = plat5;
    }

    public Platform getPlat6() {
        return plat6;
    }

    public void setPlat6(Platform plat6) {
        this.plat6 = plat6;
    }

    public Platform getPlat7() {
        return plat7;
    }

    public void setPlat7(Platform plat7) {
        this.plat7 = plat7;
    }

    public static int getScore() {
        return score;
    }

    public static void setScore(int score) {
        Main.score = score;
    }

    public static int getCoinsint() {
        return coinsint;
    }

    public static void setCoinsint(int coinsint) {
        Main.coinsint = coinsint;
    }

    public static String getScore2() {
        return score2;
    }

    public static void setScore2(String score2) {
        Main.score2 = score2;
    }

    public static String getCoins() {
        return coins;
    }

    public static void setCoins(String coins) {
        Main.coins = coins;
    }

    public static int getScorespeed() {
        return scorespeed;
    }

    public static void setScorespeed(int scorespeed) {
        Main.scorespeed = scorespeed;
    }

    public void setTilebase(Image tilebase) {
        this.tilebase = tilebase;
    }
}

2 个答案:

答案 0 :(得分:3)

一个好的方法可能是使用这样的方法:

  • init(应调用一次,仅限浏览器)。设置任何常见的GUI元素并调用startNewGame()方法。
  • start(在用户恢复浏览器时调用)。取消暂停操作(暂停在stop中)并继续游戏。
  • stop暂停当前游戏。
  • startNewGame()设置初始生活,片段/字符布局,得分等。

当用户想要开始新游戏时,也请致电startNewGame()

答案 1 :(得分:2)

我知道这是一个老问题。

但上面的小程序格式似乎是个问题。我会使用一些基本的东西,以便更多地控制applet。

&#34;在我看来,使用一段时间(真实)绝不是一个好选择&#34;

public class TestAppletCycle extends JApplet implements Runnable {

    private Thread thread;
    private boolean running;

    @Override
    public void init() {
        // Init Game
    }

    @Override
    public void start() {
        if(!running) {
            running = true;
            thread = new Thread(this);
            thread.start();
        }
    }

    @Override
    public void run() {
        while(running) {
            // Game Loop
        }
    }

    @Override
    public void stop() {
        logger.log(Level.INFO, "TestAppletCycle.stop();");
        if(running) {
            running = false;
            try {
                thread.join();
            } catch(Exception e) {
            }
        }
    }

    @Override
    public void destroy() {
        // Clean Up Game
    }
}

现在要重新启动applet,您只需要停止并启动applet。