2

キーボードの矢印キーによるユーザー入力で、1 人のプレイヤーがボード上を移動できるゲームを作成しています。目的は、ボード上の宝石を収集し、ランダムに動き回るモンスターを避けることです。GUI でボードを描画するだけで問題が発生します。各「タイル」、「アイテム」、「キャラクター」は、drawRect や drawOval などの単純で汎用的な描画メソッドで描画されます。ただし、これらをパネルの配列に描画する方法がわかりません。

私の問題はコンストラクターまたはペイントメソッドにありますか? ヘルプ!

public class LevelPanel extends JPanel {
    private static Player player;
    private Level level;
    private JLabel gemLabel, scoreLabel, healthLabel;
    private JPanel[][] squares;
    private JPanel boardPanel;
    private JOptionPane optionPane = new JOptionPane();

    public LevelPanel() {
        this.player = player;
        setPreferredSize(new Dimension(300,300));
    setBackground(Color.white);
    setLayout(new GridLayout(10,10));

    gemLabel = new JLabel("Gems Left: 0");
    scoreLabel = new JLabel("Score: 0");
    healthLabel = new JLabel("Health: 100");

    for(int i = 0; i < 10; i++) {
        for(int j = 0; j < 10; j++) {
        squares[i][j] = new JPanel();
        squares[i][j].setBackground(Color.white);
        boardPanel.add(squares[i][j]);
        }
    }

    add(gemLabel);
    add(scoreLabel);
    add(healthLabel);
    add(boardPanel);
    }

    public void paint(Graphics g) {
        super.paint(g);
    level.draw(g);
    }

    private class KeyHandler extends KeyAdapter {
        public void keyPressed (KeyEvent e) {
        int keyCode = e.getKeyCode();
        switch(keyCode) { 
            case KeyEvent.VK_UP:
            player.move(-1,0);
            break;
            case KeyEvent.VK_DOWN:
            player.move(1,0);
            break;
            case KeyEvent.VK_LEFT:
            player.move(0,-1);
            break;
            case KeyEvent.VK_RIGHT: 
            player.move(0,1);
            break;
        }
        gemLabel.setText("Gems Left: " + level.getNumGems());
        scoreLabel.setText("Score: " + player.getScore());
        healthLabel.setText("Health: " + player.getHealth());
        repaint();
    }
}
4

2 に答える 2

1

インスタンス化することはありませsquaresboardPanel:

private JPanel[][] squares = new JPanel[10][10];
private JPanel boardPanel = new JPanel();

またlevel、クラスLevelPanelではインスタンス化されていないようです。このクラスでも、未定義の参照を割り当てていますplayer

public LevelPanel() {
    this.player = player;

参照を渡すことができPlayerます:

public LevelPanel(Player player) {
    this.player = player;
于 2012-11-24T19:33:11.663 に答える
0

代わりに、名前なしで背景色をJPanel[]使用できます。JButton[]

これは、CardLayout で JButton をシャッフルする必要がある 2D 配列に似たゲームの例です 。

于 2012-11-24T19:24:17.383 に答える