Java中的游戏没有显示

时间:2014-12-04 17:20:22

标签: java graphics applet actionlistener bluej

大家好,我正在尝试制作一个用户扮演某种角色的游戏,并尝试收集硬币,同时避免产生的怪物。我的程序编译时没有错误,但是当我运行applet时没有任何东西出现。这可能是因为扩展的顺序我有一切,但我不确定。任何帮助将不胜感激(这是我的Java类简介的最终学校项目)。这是代码,我知道它很长但是它都与手头的问题有关:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public class Sprite extends JApplet
{
   Image image;
   int x, y;
   boolean isVisible;
   public Sprite()
   {
       isVisible = false;
       image = null;
   }
   public Sprite(Image i)
   {
       isVisible = true;
       image = i;
       x = 10;
       y = 10;
   }
   public void setImage(Image img)
   {
       image = img;
       isVisible = true;
   }
   public void setLocation(int _x, int _y)
   {
       x = _x;
       y = _y;
   }
   public Rectangle getDimensions()
   {
       return new Rectangle(x, y, image.getWidth(null), image.getHeight(null));
   }
public boolean intersects(Sprite s)
{
    return getDimensions().intersects(s.getDimensions());
}
public void setVisible(boolean vis)
{
    isVisible = vis;
}
public void paintComponent(Graphics g)
{
    if(isVisible)
    {
        g.drawImage(image, x, y, null);
    }
}
}
class Coins extends Sprite
{
int amount;
public Coins(int amt)
{
    amount = amt;
}
public int getAmount()
{
    return amount;
}
public void setAmount(int amt)
{
    amount = amt;
}
}
class AnimateSprite extends Sprite
{
int speed = 5;
int directionX = 1, directionY = 1;
int healthPoints = 100;
final boolean DEAD = false;
final boolean ALIVE = true;
public void moveUp()
{
    y -= speed;
}
public void moveDown()
{
    y += speed;
}
public void moveLeft()
{
    x -= speed;
}
public void moveRight()
{
    x += speed;
}
public int getHealthPoints()
{
    return healthPoints;
}
public void setHealthPoints(int hp)
{
    healthPoints = hp;
}
public boolean hit(int amt)
{
    healthPoints -= amt;
    if(healthPoints < 0)
    return DEAD;
    else
    return ALIVE;
 }
}
class Game extends AnimateSprite implements Runnable, KeyListener
{
 AnimateSprite user;
 AnimateSprite monster, troll;
 Coins ten, twenty;
 Thread thread;
 Random r;
 public void init()
 {
    r = new Random();
    user = new AnimateSprite();
    user.setImage(getImage(getCodeBase(), "player.gif"));
    monster = new AnimateSprite();
    monster.setImage(getImage(getCodeBase(), "monster.gif"));
    troll = new AnimateSprite();
    troll.setImage(getImage(getCodeBase(), "monster.gif"));
    troll.setLocation(350, 350);
    setupCoins();
    setFocusable(true);
    addKeyListener(this);
    thread = new Thread(this);
    thread.start();
 }
 public void setupCoins()
 {
    ten = new Coins(10);
    twenty = new Coins(20);
    ten.setLocation(400, 350);
    twenty.setLocation(450, 50);
    ten.setImage(getImage(getCodeBase(), "coins.gif"));
    twenty.setImage(getImage(getCodeBase(), "coins.gif"));
 }
 public void keyPressed(KeyEvent ke) //Event handling
 {
    int key = ke.getKeyCode();
    if(key == KeyEvent.VK_UP)
    user.moveUp();
    else if(key == KeyEvent.VK_DOWN)
    user.moveDown();
    else if(key == KeyEvent.VK_LEFT)
    user.moveLeft();
    else if(key == KeyEvent.VK_RIGHT)
    user.moveRight();
 }
 public void keyReleased(KeyEvent ke) {}
 public void keyTyped(KeyEvent ke) {}
 public void update(Graphics g) {paint(g);}
 public void paint(Graphics g)
 {
    g.clearRect(0, 0, this.getWidth(), this.getHeight());
    ten.paintComponent(g);
    twenty.paintComponent(g);
    monster.setLocation(r.nextInt(10) - 5 + monster.x, r.nextInt(10 - 5 + monster.y));
    monster.paintComponent(g);
    user.paintComponent(g);
    if(user.intersects(monster))
    {
            g.setFont(new Font("Serif", Font.BOLD, 26));
            g.drawString("YOU HAVE DIED, YOU LOSE!", 20, 100); //Prints this when you lose
            thread.interrupt(); //Stopping the thread if you die
        }
 }
 public void run()
 {
    try //Try catch
    {
        while(true) //Only does this while when the boolean is true
        {
            repaint();
            Thread.sleep(10); //Thread sleeps
        }
    } catch(Exception e) {} //Exception handling
 }
 }

1 个答案:

答案 0 :(得分:1)

你的继承顺序似乎很奇怪,但它不是导致问题的原因。请查看此网站:http://www.dreamincode.net/forums/topic/28410-application-to-japplet-and-reverse/

Java Applet需要init()start()stop()destroy()。您需要将这些方法放在Sprite类中,以使Applet正常运行。