0

我目前正在做一个 java 项目,让我在夏天忙个不停。我刚刚完成了大学的第一年,所以我对 Java 及其工作原理有了基本的了解。对于我的项目,我决定选择你自己的冒险游戏之类的东西。在给用户一些对话的地方,然后给他们两个如何进行的选项。到目前为止一切顺利,我遇到了一个我无法解决的缺陷。以下是我的小学课程代码。


public DisplayPanel() {
        core = new Core();
        stat = new StatusPanel();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Quest!");

        middle = new JPanel();
        bottom = new JPanel();
        left = new JButton("Explore");
        right = new JButton("Think");
        textArea = new JTextArea();

        middle.setLayout(new GridLayout(1, 1));
        middle.add(textArea);
        bottom.add(stat);


        left.addActionListener(this);
        right.addActionListener(this);


        setLayout(new BorderLayout());
        add(left, BorderLayout.WEST);
        add(right, BorderLayout.EAST);
        add(middle, BorderLayout.CENTER);
        add(bottom, BorderLayout.SOUTH);

        changeText("You wake up in a strange woods and walk forwards into the mist\n " +
                "You decide whether it's best to think how you got here " +
                "\n or search the area for clues");



        setSize(600, 700);
        setResizable(false);
        setVisible(true);

    }

    public static void changeText(String newText) {
        textArea.setText(newText);
    }

    public static void appendText(String newText) {
        textArea.append(newText);
    }


    public void actionPerformed(ActionEvent e) {

        String cmd = e.getActionCommand();
        Monsters m = new Monsters();


        try {
            core.load("goblinstier1.txt");
        } catch (IOException e1) {
            e1.printStackTrace();
        }


        /////////////////////////////////////////////////////////////////////////
        /////////////////////////////LEFT/////OPTION1////////////////////////////
        /////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////
        //////////////////////////////ORIGINAL CHOICE////////////////////////////
        /////////////////////////////////////////////////////////////////////////

        if(e.getSource() == left) {
            textArea.setText("You explore the area for clues and hear a rustling in a bush.\n " +
                    "It might be someone who can help? Or it could be a monster! \n" +
                    "You ready your knife in preperation!\n");
            stat.incrementClickCount();

            option2a = new JButton("Talk");
            option2a.addActionListener(this);
            option2a.setActionCommand("left2a"); 
            add(option2a, BorderLayout.WEST);

            option2b = new JButton("Leave");
            option2b.addActionListener(this);
            option2b.setActionCommand("right2b"); 
            add(option2b, BorderLayout.EAST);

            right.setVisible(false);
            left.setVisible(false);


        }


        /////////////////////////////////////////////////////////////////////////
        ////////////////////////////LEFTA/////OPTION2////////////////////////////
        /////////////////////////////////////////////////////////////////////////
        Monsters temp = null;
        temp = core.anyMonster();




        if(cmd == "left2a") {
            option2a.setText("Attack!");
            option2b.setText("Flee!");
            stat.incrementClickCount();
            fightClick++;



                if(fightClick >=2) {

                    appendText("You grip your shiv and cleave!");
                    temp.cleave();

                    if(temp.getHealth()<=0) {
                        appendText("You have " +stat.getHealth2()+ " health remaining ");
                        stat.gold();
                        stat.xp();

                    }else {
                        stat.hit();
                    }
                }

        }

我的问题在于 LEFTA 选项二我试图编写一种战斗系统,用户有机会战斗或逃跑。它的工作方式是通过我的核心类中的一个名为 anyMonster 的方法,我将在下面显示它。

public Monsters anyMonster() {
        int index = randomGenerator.nextInt(monsters.size());
        Monsters monsters1 = monsters.get(index);
        DisplayPanel.changeText("A monster appears! It's a " + monsters1 + "!\n What shall you do?\n");
        return monsters1;
    }

该方法循环通过预先设置的arrayList并随机选择一个“Monster”。正如您在 DisplayPanel 中看到的,我尝试在 actionPerformed 类中调用它,然后如果用户按下按钮,它将攻击怪物,代码如下。

public void cleave()
    {
        randomNum = 7 + (int)(Math.random() * ((10 - 7) + 1));

        newHealth=health-randomNum;
        health=newHealth;
        DisplayPanel.appendText(" You attack for " +randomNum+ " Damage, it has " +health+ " health remaining!\n ");
        if(health<=0){
            DisplayPanel.appendText("The monster falls to the ground");
        }
}
}

我在 DisplayPanel 中进行这项工作的方式是将方法分配给一个临时值,然后从有效的方法中调用 cleave() 方法。问题是每次我点击按钮时都会选择一个新的怪物。我意识到为什么会发生这种情况,当然它是一个按钮,它每次都会执行相同的操作。问题是我完全不知道如何解决这个问题。令人沮丧的是,我真的很想继续我的项目,您可以为新手提供的任何帮助将不胜感激。在此先感谢,罗布。

4

1 回答 1

0

与其在 actionPerformed 中创建你的牧师,不如将其创建为一个字段,这样你的怪物只会被创建一次。

于 2013-05-25T20:05:02.183 回答