オブジェクト配列を使ってミニゲームを作ってみよう!
この記事の対象者
Javaでオブジェクト指向を学び始めた人。
お題
(一般クラス)Heroクラス,Demonクラス(アプリケーションクラス)DemonAppクラスを作成し、以下の処理を作成せよ
[実行例 成功] デーモンが現れた(hp:911) ヒーローが集まった A(hp:34,power:56) B(hp:93,power:71) C(hp:54,power:50) D(hp:52,power:56) E(hp:41,power:97) F(hp:61,power:83) G(hp:70,power:91) H(hp:91,power:85) I(hp:35,power:64) J(hp:38,power:91) デーモンが稲妻(22)を放った Aは22のダメージをうけた(hp:12) Bは22のダメージをうけた(hp:71) Cは22のダメージをうけた(hp:32) Dは22のダメージをうけた(hp:30) Eは22のダメージをうけた(hp:19) Fは22のダメージをうけた(hp:39) Gは22のダメージをうけた(hp:48) Hは22のダメージをうけた(hp:69) Iは22のダメージをうけた(hp:13) Jは22のダメージをうけた(hp:16) --ヒーローたちの攻撃-- Aは56のダメージを与えた(Demon:855) Bは71のダメージを与えた(Demon:784) Cは50のダメージを与えた(Demon:734) Dは56のダメージを与えた(Demon:678) Eは97のダメージを与えた(Demon:581) Fは83のダメージを与えた(Demon:498) Gは91のダメージを与えた(Demon:407) Hは85のダメージを与えた(Demon:322) Iは64のダメージを与えた(Demon:258) Jは91のダメージを与えた(Demon:167) デーモンが稲妻(45)を放った Aは45のダメージをうけた(hp:-33) Aは力つきた Bは45のダメージをうけた(hp:26) Cは45のダメージをうけた(hp:-13) Cは力つきた Dは45のダメージをうけた(hp:-15) Dは力つきた Eは45のダメージをうけた(hp:-26) Eは力つきた Fは45のダメージをうけた(hp:-6) Fは力つきた Gは45のダメージをうけた(hp:3) Hは45のダメージをうけた(hp:24) Iは45のダメージをうけた(hp:-32) Iは力つきた Jは45のダメージをうけた(hp:-29) Jは力つきた --ヒーローたちの攻撃-- Bは71のダメージを与えた(Demon:96) Gは91のダメージを与えた(Demon:5) Hは85のダメージを与えた(Demon:-80) デーモンは朽ち果てた ヒーローたちは勝利した!
[実行例 失敗] デーモンが現れた(hp:968) ヒーローが集まった A(hp:80,power:69) B(hp:80,power:51) C(hp:59,power:87) D(hp:63,power:70) E(hp:97,power:93) F(hp:56,power:72) G(hp:43,power:72) H(hp:63,power:91) I(hp:30,power:81) J(hp:35,power:63) デーモンが稲妻(49)を放った Aは49のダメージをうけた(hp:31) Bは49のダメージをうけた(hp:31) Cは49のダメージをうけた(hp:10) Dは49のダメージをうけた(hp:14) Eは49のダメージをうけた(hp:48) Fは49のダメージをうけた(hp:7) Gは49のダメージをうけた(hp:-6) Gは力つきた Hは49のダメージをうけた(hp:14) Iは49のダメージをうけた(hp:-19) Iは力つきた Jは49のダメージをうけた(hp:-14) Jは力つきた --ヒーローたちの攻撃-- Aは69のダメージを与えた(Demon:899) Bは51のダメージを与えた(Demon:848) Cは87のダメージを与えた(Demon:761) Dは70のダメージを与えた(Demon:691) Eは93のダメージを与えた(Demon:598) Fは72のダメージを与えた(Demon:526) Hは91のダメージを与えた(Demon:435) デーモンが稲妻(49)を放った Aは49のダメージをうけた(hp:-18) Aは力つきた Bは49のダメージをうけた(hp:-18) Bは力つきた Cは49のダメージをうけた(hp:-39) Cは力つきた Dは49のダメージをうけた(hp:-35) Dは力つきた Eは49のダメージをうけた(hp:-1) Eは力つきた Fは49のダメージをうけた(hp:-42) Fは力つきた Hは49のダメージをうけた(hp:-35) Hは力つきた ヒーローたちは全滅した
ゲームの仕様
●デーモンのHPは800~999のランダム
●デーモンの放つ全体攻撃の威力は10~50のランダム
●ヒーローは10人固定
●ヒーローの名前はA,B…….
●それぞれのヒーローの初期値ー>HPは30~99のランダム、攻撃力は50~99のランダム
●先制攻撃はデーモン固定
●デーモンのHPが0以下になったら勝利で終了
●ヒーロー全員のHPが0以下になったら敗北で終了
作成の手順
Heroクラスの作成
//static フィールド static int deathCount; //インスタンスフィールド String name; int hp; int power; //引数1個のコンストラクタ 引数で名前を受け取り、内部でhpとpowerをランダムに生成する //インスタンスメソッド void attacked(int lightning) 引数に電撃攻撃力を受け取り内部でhpを減らす処理を書く 実行例を参考に出力し、もし死んだ場合はdeathCountを増やす void showInfo() 登場した際の 名前(hp:HP,power:POWER) を出力する。
import java.util.*;
public class Hero{
static int deathCount=0;
String name;
int hp;
int power;
Hero(String name){
this.name=name;
Random rand=new Random();
this.hp=rand.nextInt(70)+30;
this.power=rand.nextInt(50)+50;
}
void attacked(int lightning){
this.hp -= lightning;
System.out.printf("%sは%dのダメージをうけた(hp:%d)%n",this.name,lightning,this.hp);
if(this.hp <=0){
System.out.printf("%sは力つきた%n",this.name);
deathCount++;
}
}
void showInfo(){
System.out.printf("%s(hp:%d,power:%d)%n",this.name,this.hp,this.power);
}
}
Demonクラスの作成
//インスタンスフィールド int hp //コンストラクタ 引数なしのコンストラクタを作成し、内部で800~999のhpを生成しフィールドにセットする。 //インスタンスメソッド void lightning(Hero[] heroes) 攻撃力10~50をランダムに生成し、引数で入ってきたheroesそれぞれにダメージを与える。 (heroそれぞれがattackedを実行する) boolean isDeadAttackedBy(Hero h) 引数に攻撃者を受け取りその攻撃者の攻撃力をもとにhpを減らす。 もし死んだ場合はtrueを返す void appear() 登場した際の出力を作成する
import java.util.*;
public class Demon{
int hp;
Demon(){
Random rand=new Random();
this.hp=rand.nextInt(200)+800;
}
void lightning(Hero[] heroes){
Random rand =new Random();
int lightning=rand.nextInt(41)+10;
System.out.printf("デーモンが稲妻(%d)を放った%n",lightning);
for(Hero h:heroes){
if(h.hp>0){
h.attacked(lightning);
}
}
}
boolean isDeadAttackedBy(Hero h){
this.hp -= h.power;
System.out.printf("%sは%dのダメージを与えた(Demon:%d)%n",h.name,h.power,this.hp);
if(this.hp<=0){
System.out.println("デーモンは朽ち果てた");
return true;
}
return false;
}
void appear(){
System.out.printf("デーモンが現れた(hp:%d)%n",this.hp);
}
}
DemonAppクラスの作成
//デーモンインスタンスを生成 //デーモン登場 //「ヒーローが集まった」を出力 //要素数10でヒーロー配列作成 //for文でAから順に名前をつけながらHeroインスタンスを生成し、配列に入れる //無限ループ //デーモンの攻撃 //全員死んだかの判定(全員死んだ場合終了) //ヒーローたちの攻撃(この際、HP>0の人しか攻撃できないので注意) //デーモンが死んだ場合は終了
public class DemonApp{
public static void main(String[] args){
Demon demon=new Demon();
demon.appear();
System.out.println("ヒーローが集まった");
Hero[] heroes=new Hero[10];
for(int i=0;i<heroes.length;i++){
char c = (char)('A'+i);
heroes[i] = new Hero(c+"");
heroes[i].showInfo();
}
while(true){
demon.lightning(heroes);
if(Hero.deathCount==heroes.length){
System.out.println("ヒーローたちは全滅した");
return;
}
System.out.println("--ヒーローたちの攻撃--");
for(int i=0;i<heroes.length;i++){
if(heroes[i].hp > 0 && demon.isDeadAttackedBy(heroes[i])){
System.out.println("ヒーローたちは勝利した!");
return;
}
}
}
}
}
コメント