新機能として、魔法を使えるようにしてみましょう。
実際のRPGでは、経験値をためてレベルが上がったりするタイミングで魔法を覚えたりしますが、ここではシンプルにするためにアイテムや装備と同様に「魔法の巻物」をフィールドで拾うことで、魔法を覚えられるようにしましょう。
巻物は英語で Scroll なので、ホイミの巻物として HealScroll を作成しましょう。
巻物の親クラスとしてScrollを用意しておきましょう。
package rpg.model.scroll;
public class Scroll {
private String name;
public Scroll(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
HeadScrollはScrollを継承して作成します。
package rpg.model.scroll;
public class HealScroll extends Scroll {
public HealScroll() {
super("ホイミ");
}
}
ホイミの巻物を作ったので、フィールドで移動したときに確率で拾えるようにしましょう。
RpgFrameの中に巻物を拾う処理を追加します。
} else if (isArmsFound()) {
// 装備を拾う処理
Arms arms = rpg.getArms();
Brave brave = rpg.getBrave();
brave.addArms(arms);
String msg = arms.getName() + "を見つけた!";
JOptionPane.showMessageDialog(
this, msg,
"アイテム", JOptionPane.INFORMATION_MESSAGE);
} else if (isScrollFound()) {
Scroll scroll = rpg.getScroll();
System.out.println(scroll.getName());
}
}
private boolean isScrollFound() {
double v = Math.random();
return v < 0.05;
}
private boolean isArmsFound() {
double v = Math.random();
return v < 0.05;
}
RpgにgetScroll()メソッドを追加して巻物を生成してもらいます。
public Arms getArms() {
ArmsCreator ac = new ArmsCreator();
return ac.createArms();
}
public Scroll getScroll() {
ScrollCreator sc = new ScrollCreator();
return sc.createScroll();
}
}
ScrollCreatorのところでエラーが出ているので、ScrollCreatorを作成します。
ScrollCreator
package rpg.model.scroll;
public class ScrollCreator {
public Scroll createScroll() {
return new HealScroll();
}
}
勇者が複数の巻物を所持できるようにします。
public class Brave extends Chara {
private int exp = 0;
private int level = 1;
private int gold = 0;
private List<Arms> armses = new ArrayList<>();
private List<Item> items = new ArrayList<>();
private List<Scroll> scrolls = new ArrayList<>();
private Arms arms; //現在装備している武器
private Statuses statuses = new Statuses();
public Brave() {
hp = 10;
setName("ヨシヒコ");
}
public int getExp() {
return exp;
}
public void addExp(int p) {
exp += p;
}
public void addItem(Item item) {
System.out.println(item.getName() + "を入手した。");
items.add(item);
}
public void addArms(Arms arms) {
System.out.println(arms.getName() + "を入手した。");
armses.add(arms);
}
public void addScroll(Scroll scroll) {
System.out.println(scroll.getName() + "を入手した。");
scrolls.add(scroll);
}
RpgFrameで巻物を拾ったら勇者に持たせるようにします。
ダイアログの表示も追加します。
} else if (isScrollFound()) {
Scroll scroll = rpg.getScroll();
System.out.println(scroll.getName());
Brave brave = rpg.getBrave();
brave.addScroll(scroll);
String msg = scroll.getName() + "を見つけた!";
JOptionPane.showMessageDialog(
this, msg,
"アイテム", JOptionPane.INFORMATION_MESSAGE);
}
先頭の画面で所持している巻物に対応した呪文を使えるようにします。
JButton armsButton = new JButton("装備");
armsButton.addActionListener(new ArmsAction(this));
buttonsPanel.add(armsButton);
JButton scrollButton = new JButton("呪文");
scrollButton.addActionListener(new ScrollAction(this));
buttonsPanel.add(scrollButton);
ScrollActionを作ります。他のActionと似たように書きます。
package rpg.contoller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import rpg.view.BattleFrame;
public class ScrollAction implements ActionListener {
private BattleFrame battleFrame;
public ScrollAction(BattleFrame bf) {
battleFrame = bf;
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("呪文を使う");
}
}
戦闘画面で「呪文」ボタンを押すと、コンソールに「呪文を使う」とメッセージが出るようになります。