2014-12-04 4 views
0

Приветствую всех, я пытаюсь создать игру, в которой пользователь играет как своего рода персонаж, и пытается собирать монеты, избегая при этом монстров, которые появляются. Моя программа компилируется без ошибок, но при запуске апплета ничего не появляется. Это может быть из-за порядка расширения. У меня есть все, но я не уверен. Любая помощь будет принята с благодарностью (это для финального школьного проекта для моего вступления в класс Java). Вот код, я знаю, что это долго, но все это относится к вопросу под рукой:Игра в 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 
} 
} 
+0

Изменить 'public void paintComponent (Graphics g)' на '@Override public void paintComponent (Graphics g)' и отчитаться. –

ответ

1

Ваш порядок наследования кажется странным, но это не причиняет проблему. Посмотрите на этом сайте: http://www.dreamincode.net/forums/topic/28410-application-to-japplet-and-reverse/

Java апплеты должны иметь init(), start(), stop() и destroy(). Вам нужно будет поместить эти методы в свой класс Sprite для использования апплета.

+0

Извините за поздний ответ, но я на самом деле исправил его в порядке, в котором у меня были вещи. Теперь он отображает персонажа и монстра и позволяет мне двигаться к монетам (хотя он чрезвычайно глючит, и мне еще нужно добавить любые счетчик монет). Ваш ответ тоже будет работать. – Fyree

+0

Играя с апплетами, я понял, что вам действительно не нужны эти методы. Я считаю, что вам просто нужно переопределить 'paint()' или 'paintComponent()'. Но пока вы работаете, это не имеет большого значения – Nikolai97

Смежные вопросы