У меня возникла проблема с системой сбора текстовых игр

1
            public void mouseClicked(MouseEvent m) {
            JList l = (JList)m.getSource();
            // If click twice then collect item
            if (m.getClickCount() == 2 && l.getSelectedValue() != null) {
                String i = l.getSelectedValue().toString();
                int q = Integer.parseInt(i.replaceAll("\\)","").split("\\(")[1]), q1 = 0;
                String i2 = i.split("\\(")[0];
                String i3 = i2.substring(0, i2.length() - 1);
                if (q > 1) {
                    q1 = Integer.parseInt(JOptionPane.showInputDialog("How many would you like to take?"));
                }
                else
                    q1 = 1;
                PlayerHandler.addItem(i3, q1);
                if (q1 == q) {
                    lmb.remove(l.getSelectedIndex());
                }
                else {
                    String t = l.getSelectedValue().toString();
                    int s = l.getSelectedIndex();
                    lmb.remove(s);
                    lmb.add(s, t.replaceAll(Integer.toString(q), Integer.toString(q - q1)));
                }
                lma.clear();
                PlayerHandler.listInventory(lma);
            }
        }
    });

Я пытаюсь учиться, когда я иду в проект текстовой игры, и у меня возникла проблема со сбором предметов после того, как враг мертв.

Когда инвентарь приходит вверх, и есть два или более каждого элемента, появится окно с просьбой указать игроку, сколько они хотят взять, скажем, что в инвентаре есть 5 деревянных мечей, это позволит им взять 100 деревянные мечи, помещая их в инвентарь и оставляя "Деревянный меч" (-95) "в таблице монстра-лута.

Если вам нужна дополнительная информация, дайте мне знать, это довольно поздно, и мой мыслитель очень пожарен.

  • 0
    Так ... сделайте сравнение между тем, что запросил пользователь, и тем, что у вас есть, если они не совпадают, повторите запрос пользователя. Вы можете рассмотреть возможность использования JSpinner который может быть сконфигурирован со значением max / min
Теги:
text

2 ответа

1

Измените строку:

q1 = Integer.parseInt(JOptionPane.showInputDialog("How many would you like to take?"));

Для того, чтобы:

q1 = Math.min(Integer.parseInt(JOptionPane.showInputDialog("How many would you like to take?")), q);
  • 0
    Вы должны добавить объяснение.
  • 1
    Вы абсолютно правы, мне следовало объяснить мои рассуждения. В описании упоминается, что «если есть два или более каждого элемента, то всплывает диалоговое окно». В опубликованном коде вы видите строку: if (q > 1) { q1 = Integer.parseInt(JOptionPane.showInputDialog("How many would you like to take?")); } На основании описания, переменная 'q' будет количеством предметов, доступных в инвентаре. Следовательно, использование Math.min с q будет означать «Вы можете взять не более« q »предметов»
1

Подтвердите их ввод. Вы можете сделать простое сравнение, чтобы убедиться, что запрашиваемая сумма меньше или равна доступной сумме. Кроме того, на основе вашего фрагмента кода я предлагаю вам использовать более описательные имена переменных, чем m, 1, q, q1, i, i2 и i3. Когда вы вернетесь, чтобы попытаться работать над этим кодом позже, будет легче запомнить, что все делает, если ваши переменные правильно названы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню