我正在为一个学校项目制作一个游戏,并且已经坚持了几天。我将如何重新启动以下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;
}
}
答案 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。