現状では「ひのきの棒」しかありませんが、もっと強い武器も欲しいところです。
武器の種類を増やしてみましょう。
まずは武器を拾うところで複数の種類に対応してみましょう。
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();
}
}