授業ノートのまとめ
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
自習
まだ考えるところ:
スライムA、B、Cという名前を付けるには??
先生に解決してもらったエラー:
1.
主人公がおなくなりになるpublic void death() をstaticにしていた。(ばってんがついてエクリプスがstaticにしましょうといった)
ここはstaticだと、主人公パーティーヒーロー全滅になるらしい。なぜだかまだわからない。staticでまずいのはわかった。
実はstaticの説明を読んでもよくわかってない。要再考。
2.
1.に関連し、Slimeのpublic void attack(Hero h) { で、
h.death();に直す。ここはHero.death();としていた。
とりあえずもう一度自分で1から作ってみる。
package hukusyu;
public class Main01 {
public static void main(String[] args) {
//主人公生成
Hero h = new Hero();
h.name = "みなと";
h.hp = 25;
h.ap = 100;
System.out.println("Hero "+h.name+"生成しました");
System.out.println("hp:"+h.hp+" ap:"+h.ap);
System.out.println("");
//モンスター生成
Monster[] monsters = new Monster[3];
monsters[0] = new Slime();
monsters[1] = new Slime();
monsters[2] = new Slime();
//おそらくこの前に武器装備とかの選択がある。
//目的地に移動(選択)
//主人公がフィールドにいればランダムで敵に遭遇する
//別の町で新たな装備ゲット
//とかか。
System.out.println("モンスターに遭遇、戦闘開始します---");
for(Monster m : monsters) {
h.attack(m);
m.attack(h);
}
}
}
package hukusyu;
public class Hero {
//基本フィールド
String name;
int hp;
int ap;
Hero(){//何も設定されてないテスト用主人公なら
this.hp = 10000;
this.ap = 10000;
this.name = "テスト用主人公";
}
//voidは戻り値なしの意味
//publicは事実上の制限範囲なし
//public voidの次にメソッド名を記述する
public void attack(Monster m) {
System.out.println(this.name+"の攻撃!");
System.out.println(this.ap+"のダメージ!");
m.hp -= this.ap;
}
//staticはnewされなくてもメモリに生成される
public void death() {
System.out.println(this.name+"はしんでしまった!");
System.out.println("game over");
}
//自動生成
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 getAp() {
return ap;
}
public void setAp(int ap) {
this.ap = ap;
}
}
package hukusyu;
public abstract class Monster{
//Monsterに関する「ざっくりした」設定
//abstractは抽象メソッドの意味
//すなわち通常下位になにかある
int hp;
int ap;
String name;
public void attack(Hero h) {
System.out.println(this.name + "の反撃!");
System.out.println("主人公側に10ポイントのダメージをあたえた!");
h.hp -= 5;
}
public void run(Monster m) {
System.out.println(m + "は逃げ出した!");
}
}
package hukusyu;
public class Slime extends Monster{
String name = "スライム";
int hp = 120;
int ap = 10;//スライムの攻撃力
//char suffix;
public void attack(Hero h) {//override
System.out.println(this.name + "のでろでろ攻撃!");
System.out.println(h.name+"に"+this.ap+"のダメージをあたえた!");
h.hp -= this.ap;
if(h.hp <= 0) {
h.death();
}
}
//getter/setter自動生成
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 getAp() {
return ap;
}
public void setAp(int ap) {
this.ap = ap;
}
}