java - Java 游戏无法显示

标签 java graphics applet actionlistener bluej

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

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
 }
 }

最佳答案

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

Java Applet 需要有 init()start()stop()destroy().您需要将这些方法放入 Sprite 类中,Applet 才能正常运行。

关于java - Java 游戏无法显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27300075/

相关文章:

java - 如何在android中获取recyclerView项目的X和Y坐标?

java - 用 3 种颜色给三角形上色

macos - 如何在 Cocoa 中的给定时间间隔内淡出矩形?

algorithm - 具有给定纵横比的 TreeMap

java - Web 上的 Java Applet 错误

java - log4J 与 java applet 和 java 插件2

java - 使用 Scanner 和 System.in (Java) 对方法进行 Junit 测试

java - 后续测试方法中的驱动程序对象没有被执行

Java - 计算大型数学表达式

java - 测试 JCTerm,java applet 终端模拟器,可以在 Eclipse 中运行,但不能在浏览器中运行