2013-05-25 3 views
0

В настоящее время я работаю над проектом java, чтобы держать меня занятым на лето. Я только что закончил свой первый год в университете, поэтому у меня есть базовые знания Java и как это работает. Для моего проекта я решил выбрать себе приключенческую игру. В тех случаях, когда пользователю дается какой-то диалог, им даются два варианта продолжения. Пока все идет хорошо, и я пришел к недостатку, что я не могу решить свою задачу. Ниже мой код для моего основного класса.Пытается выполнить метод один раз, на JButton


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

Метод проходит через предварительно заданный массивList и выбирает «монстр» в случайном порядке. Как вы можете видеть в 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 была назначая метод до значения темпа, а затем вызвать метод скола() из того, что работает. Проблема в том, что каждый раз, когда я нажимаю кнопку, он каждый раз выбирает нового монстра. Я понимаю, почему это происходит, конечно, это кнопка, она будет делать одно и то же действие каждый раз. Проблема в том, что я полностью не в курсе, как это решить. Что разочаровывает, мне бы очень хотелось продолжить мой проект, и любая помощь, которую вы можете дать новичкам, будет высоко оценена. Спасибо заранее, Роб.

+1

Поместите выбранное чудовище в какую-то переменную? – mwerschy

+0

Я вижу еще большую проблему в том, что вы смешиваете данные с кодом, жестко кодируя местоположение своего проводника и состояние в коде вашей программы. Я думаю, что вы не захотите этого делать, иначе вам придется жестко закодировать все, что нужно для огромного, негибкого, невозможно отлаживать или изменять класс Бога. –

+0

Yu какая-то централизованная модель, которая делает диаконы основаны на текущем состоянии игры. Так что, если какой-нибудь монстр существует, вы должны выполнить боевую ветку, иначе вы должны выполнить ветку приключения или что еще нужно сделать. – MadProgrammer

ответ

0

Вместо того, чтобы создавать свои министры в действииПерформированные, вы должны создать это как поле, таким образом, ваши монстры создаются только один раз.

+0

Привет, я не уверен, что понимаю, что вы имеете в виду, мой Java-лингво немного бесполезен. Как в создании его как переменной экземпляра? И монстрами вы имеете в виду класс монстров или метод anyMonster? Не могли бы вы предоставить мне короткий пример? Большое спасибо. –

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