Java

オブジェクト指向でRPGを作ってみる – 武器の種類を増やす

投稿日:

現状では「ひのきの棒」しかありませんが、もっと強い武器も欲しいところです。

武器の種類を増やしてみましょう。

まずは武器を拾うところで複数の種類に対応してみましょう。

Rpg.java

package rpg.model;
import rpg.model.arms.Arms;
import rpg.model.arms.ArmsCreator;
import rpg.model.item.Item;
import rpg.model.item.ItemCreator;
import rpg.model.monster.Monster;
import rpg.model.monster.MonsterCreator;

public class Rpg {
  private Brave brave;
  public Rpg() {
    brave = new Brave();
    brave.setName("ヨシヒコ");
  }
  public Brave getBrave() {
    return brave;
  }
  public Monster getMonster() {
    MonsterCreator mc = new MonsterCreator();
    return mc.createMonster();
  }
  public Item getItem() {
    ItemCreator ic = new ItemCreator();
    return ic.createItem();
  }
  public Arms getArms() {
    ArmsCreator ac = new ArmsCreator();
    return ac.createArms();
  }
}

ArmsCreatorクラスで武器を生成するようにします。

package rpg.model.arms;

public class ArmsCreator {
  public Arms createArms() {
    double v = Math.random();
    Arms arms = null;
    if (v < 0.5) {
      arms = new HinokiRod();
    } else {
      arms = new BambooPole();
    }
    return arms;
  }
}

たけざおに対応するBambooPoleを作ります。

package rpg.model.arms;

  public BambooPole() {
    super("たけざお");
  }
  public int getRatio() {
    return 3;
  }
}

装備ボタンで起動されるArmsActionでは、勇者が持っている武器の中から選択できるようにします。これはItemActionに似たように実装すれば可能です。

package rpg.contoller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import rpg.model.Brave;
import rpg.model.arms.Arms;
import rpg.view.BattleFrame;

public class ArmsAction implements ActionListener {
  private BattleFrame battleFrame;
  public ArmsAction(BattleFrame bf) {
    battleFrame = bf;
  }
  @Override
  public void actionPerformed(ActionEvent e) {
    System.out.println("装備");
    Brave brave = battleFrame.getBrave();
    List<Arms> list = brave.getArmses();
    if (list.size() == 0) {
      // 装備を持ってない
      JOptionPane.showMessageDialog(battleFrame, "装備を持ってません");
      return;
    }
    Object[] armses = createArmsArray();
    Object armsName = JOptionPane.showInputDialog(
      battleFrame, 
      "装備を選択してください", 
      "装備",
      JOptionPane.PLAIN_MESSAGE, 
      null, 
      armses,
      armses[0]);
    if (armsName == null) return;
    if (armsName.equals(armses[0])) {
      brave.setArms(null);
    } else {
      Arms arms = brave.getArms((String)armsName);
      brave.setArms(arms);
      String msg = brave.getName() + "は、"
                 + arms.getName() + "を装備した。";
      JOptionPane.showMessageDialog(battleFrame,
      msg,
      "装備",
      JOptionPane.INFORMATION_MESSAGE);
    }
  }
  private Object[] createArmsArray() {
    Brave brave = battleFrame.getBrave();
    List<Arms> armses = brave.getArmses();
    List<String> list = new ArrayList<>();
    list.add("装備なし");
    for (Arms arms : armses) {
      if (!list.contains(arms.getName())) {
        list.add(arms.getName());
      }
    }
    return list.toArray();
  }
}

-Java
-, , ,

Copyright© UMLとJavaで学ぶオブジェクト指向プログラミング入門 , 2025 All Rights Reserved Powered by STINGER.