悪魔退治ゲーム作成

Java

オブジェクト配列を使ってミニゲームを作ってみよう!

この記事の対象者

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;
				}
			}
		}
	}
}
Java
スポンサーリンク
シェアする
mjpurinをフォローする
ジョイタスネット

コメント

タイトルとURLをコピーしました