Cast.java
package rpg;
import java.util.ArrayList;
import java.util.List;
public class Cast {
private String name;
private int hp = 10;
private List<Item> list = new ArrayList<>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public void addItem(Item item) {
list.add(item);
System.out.println(name + " は " + item.getName() + " をゲットした");
}
public void useItem() {
Item item = list.remove(0);
System.out.println(name + " は " + item.getName() + " を使った");
item.use(this);
}
public void talk(String s) {
System.out.println(" ――――――――――");
System.out.println(name + "< " + s + " |");
System.out.println(" ――――――――――");
}
public void printItems() {
if (list.size() == 0) {
System.out.println("アイテムを持っていません");
return;
}
System.out.println("アイテムの一覧を表示します。");
System.out.println("-----");
for (Item item : list) {
System.out.println(item.getName());
}
}
}
Player.java
package rpg;
public class Player {
public static void main(String[] args) {
Cast cast = new Cast();
cast.setName("ゆうしゃ");
cast.talk("こんにちは!");
Item item = new Yakusou();
cast.addItem(item);
item = new Yakusou();
cast.addItem(item);
item = new Dokukeshisou();
cast.addItem(item);
cast.printItems();
cast.useItem();
cast.useItem();
cast.useItem();
cast.printItems();
}
}
Item.java
package rpg;
public abstract class Item {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void use(Cast cast);
}
Yakusou.java
package rpg;
public class Yakusou extends Item {
public Yakusou() {
setName("やくそう");
}
@Override
public void use(Cast cast) {
int hp = cast.getHp();
cast.setHp(hp + 10);
System.out.println(cast.getName() + " のHPが " + cast.getHp() + " に増えた");
}
}
Dokukeshisou.java
package rpg;
public class Dokukeshisou extends Item {
public Dokukeshisou() {
setName("どくけしそう");
}
@Override
public void use(Cast cast) {
System.out.println(cast.getName() + " のからだからどくがきえた");
}
}
Player.java が長くなって読みにくくなってきたので、オブジェクト指向っぽく書き直してみる。
別のメソッドに分割したい部分を選択して、メニューから[リファクタリング]-[メソッドの抽出]を選択すると、Eclipseがいい感じで分割してくれる。
package rpg;
public class Player {
public static void main(String[] args) {
createBrave();
createSlime();
}
private static void createSlime() {
Cast slime = new Cast();
slime.setName("スライム");
System.out.println(slime.getName() + " があらわれた!");
}
private static void createBrave() {
Cast cast = new Cast();
cast.setName("ゆうしゃ");
cast.talk("こんにちは!");
Item item = new Yakusou();
cast.addItem(item);
item = new Yakusou();
cast.addItem(item);
item = new Dokukeshisou();
cast.addItem(item);
cast.printItems();
cast.useItem();
cast.useItem();
cast.useItem();
cast.printItems();
}
}
Player.java
package rpg;
public class Player {
public static void main(String[] args) {
Player player = new Player();
Cast brave = player.createBrave();
Cast slime = player.createSlime();
player.fight(brave, slime);
}
private Cast createSlime() {
Cast slime = new Cast();
slime.setName("スライム");
System.out.println(slime.getName() + " があらわれた!");
return slime;
}
private Cast createBrave() {
Cast cast = new Cast();
cast.setName("ゆうしゃ");
cast.talk("こんにちは!");
Item item = new Yakusou();
cast.addItem(item);
item = new Yakusou();
cast.addItem(item);
item = new Dokukeshisou();
cast.addItem(item);
cast.printItems();
cast.useItem();
cast.useItem();
cast.useItem();
cast.printItems();
return cast;
}
private void fight(Cast c1, Cast c2) {
int hp;
while (true) {
c1.attack(c2);
hp = c2.getHp();
if (hp <= 0) {
System.out.println(c2.getName() + " は死んでしまった");
break;
}
c2.attack(c1);
hp = c1.getHp();
if (hp <= 0) {
System.out.println(c1.getName() + " は死んでしまった");
break;
}
}
}
}
Gitを使ってソースコードを管理する
プロジェクト名「hello」を右クリックして[チーム]-[プロジェクトの共用]を選択する。
「Gitリポジトリーの構成」画面で「作成」をクリックして新しくGit管理下に置くファイルの保存先フォルダを指定する。
「完了」をクリックすると、プロジェクトがGit管理下に再配置される。
プロジェクト名の右側に「NO HEAD」と表示されればOK。
まだソースコードがGitに登録されていない状態なので、登録する操作を行う。
プロジェクトを右クリックして[チーム]-[コミット]を選択する。
「Gitステージング」のタブが表示されるので、Git管理下に置きたいファイルを選択して「+」をクリックし、「ステージされた変更」の方にファイルを移動させる。
コミットメッセージに「first commit」を入力して「コミット」をクリックする。
ファイル名の右下に黄色いアイコンが表示される。
攻撃力を変えてみる
Cast.java
package rpg;
import java.util.ArrayList;
import java.util.List;
public class Cast {
private String name;
private int hp = 10;
private int power = 5;
private List<Item> list = new ArrayList<>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getPower() {
return power;
}
public void setPower(int power) {
this.power = power;
}
public void addItem(Item item) {
list.add(item);
System.out.println(name + " は " + item.getName() + " をゲットした");
}
public void useItem() {
Item item = list.remove(0);
System.out.println(name + " は " + item.getName() + " を使った");
item.use(this);
}
public void talk(String s) {
System.out.println(" ――――――――――");
System.out.println(name + "< " + s + " |");
System.out.println(" ――――――――――");
}
public void printItems() {
if (list.size() == 0) {
System.out.println("アイテムを持っていません");
return;
}
System.out.println("アイテムの一覧を表示します。");
System.out.println("-----");
for (Item item : list) {
System.out.println(item.getName());
}
}
public void attack(Cast cast) {
int hp = cast.getHp();
cast.setHp(hp - power);
System.out.println(getName() + " が " + cast.getName() + " を攻撃(" + power + "のダメージ)");
}
}
武器を持てるようにする
Item にならって、抽象クラス Weapon を作成する。
名前と攻撃力があればよさそう。
Weapon.java
package rpg;
public abstract class Weapon {
private String name;
private int power;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPower() {
return power;
}
public void setPower(int power) {
this.power = power;
}
}
Cast が武器を装備できるようにする。
Cast.java
package rpg;
import java.util.ArrayList;
import java.util.List;
public class Cast {
private String name;
private int hp = 10;
private int power = 5;
private Weapon weapon;
private List<Item> list = new ArrayList<>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getPower() {
return power;
}
public void setPower(int power) {
this.power = power;
}
public Weapon getWeapon() {
return weapon;
}
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
System.out.println(name + " は " + weapon.getName() + "を装備した");
}
public void addItem(Item item) {
list.add(item);
System.out.println(name + " は " + item.getName() + " をゲットした");
}
public void useItem() {
Item item = list.remove(0);
System.out.println(name + " は " + item.getName() + " を使った");
item.use(this);
}
public void talk(String s) {
System.out.println(" ――――――――――");
System.out.println(name + "< " + s + " |");
System.out.println(" ――――――――――");
}
public void printItems() {
if (list.size() == 0) {
System.out.println("アイテムを持っていません");
return;
}
System.out.println("アイテムの一覧を表示します。");
System.out.println("-----");
for (Item item : list) {
System.out.println(item.getName());
}
}
public void attack(Cast cast) {
int hp = cast.getHp();
cast.setHp(hp - power);
System.out.println(getName() + " が " + cast.getName() + " を攻撃(" + power + "のダメージ)");
}
}
ひのきのぼうを作る。
Hinokinobou.java
package rpg;
public class Hinokinobou extends Weapon {
public Hinokinobou() {
setName("ひのきのぼう");
setPower(3);
}
}
勇者にひのきのぼうを装備する。
Player.java
private Cast createBrave() {
Cast cast = new Cast();
cast.setName("ゆうしゃ");
cast.talk("こんにちは!");
cast.setWeapon(new Hinokinobou());
Item item = new Yakusou();
cast.addItem(item);
item = new Yakusou();
cast.addItem(item);
item = new Dokukeshisou();
cast.addItem(item);
cast.printItems();
cast.useItem();
cast.useItem();
cast.useItem();
cast.printItems();
return cast;
}
武器を持った分だけ余計にダメージを与えられるようにする。
Cast.java
public void attack(Cast cast) {
int hp = cast.getHp();
int damage = power;
if (weapon != null) {
damage += weapon.getPower();
}
cast.setHp(hp - damage);
System.out.println(getName() + " が " + cast.getName() + " を攻撃(" + damage + "のダメージ)");
}
もう少し強い武器を持たせてスライムを一撃で倒したいので、銅のつるぎを作る。
DounoTsurugi.java
package rpg;
public class DounoTsurugi extends Weapon {
public DounoTsurugi() {
setName("銅のつるぎ");
setPower(5);
}
}
経験値を増やしてレベルアップしたい
勇者と敵を分けるために、Cast を抽象クラスに変更する。
経験値も追加する。
Cast.java
public abstract class Cast {
private int exp;
private String name;
private int hp = 10;
private int power = 5;
private Weapon weapon;
private List<Item> list = new ArrayList<>();
public Cast(String name, int power, int exp) {
this.name = name;
this.power = power;
this.exp = exp;
}
public int getExp() {
return exp;
}
public void plusExp(int exp) {
this.exp += exp;
}
勇者のクラスとスライムのクラスを作成する。
Brave.java
package rpg;
public class Brave extends Cast {
public Brave() {
super("ゆうしゃ", 5, 1);
}
}
Slime.java
package rpg;
public class Slime extends Cast {
public Slime() {
super("スライム", 3, 3);
}
}
戦いに勝ったら経験値を増やす。
Player.java
private void fight(Cast c1, Cast c2) {
int hp;
while (true) {
c1.attack(c2);
hp = c2.getHp();
if (hp <= 0) {
System.out.println(c2.getName() + " は死んでしまった");
System.out.println(c1.getName() + " の経験値が " + c2.getExp() + " 増えた");
c1.plusExp(c2.getExp());
break;
}
c2.attack(c1);
hp = c1.getHp();
if (hp <= 0) {
System.out.println(c1.getName() + " は死んでしまった");
break;
}
}
}