hayashi0001
@hayashi0001 (S hayashi)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ターン制ゲームの戦闘結果の戻り値について

解決したいこと

戻り値(retrun)の解決

javaでターン制のゲーム(結果の出力)をつくっています。
曖昧なreturn設定のせいでエラーが発生しました。
解決方法を教えて下さい。

詳細:戦闘結果としてやりたいこと
   playerのhitpointが0になった場合"GameOver"と出力
   across(ランダムに遭遇した敵)のhitpointが0になった場合"明日は、何をする?"と出力
   15ターンで勝敗が決まらなかったら "勝負は決まらなかった。"と出力

書いたコード

TextQuestCard fight(TextQuestCard[] monster, TextQuestCard[] player) {
		TextQuestCard across = player[0].adventure(monster, player);
		
		int battlestart = 0;
		int MyTurn = 0; 
		int EnemyTurn = 0;
		
		if(battlestart == 0) {
			if(player[0].speed >= across.speed) {
				MyTurn = 1 ; 
				EnemyTurn = 0;
			}
			else {
				MyTurn = 0 ; 
				EnemyTurn = 1;
			}
			battlestart = 1;
		}
		
		for(int i = 1; i <= 15; i++) {
			if(MyTurn == 1) {
				/////////////////////自分のターンが先行////////////////////////////

				//////////////////////戦闘エフェクト//////////////////////////////
				System.out.println(player[0].name + "の攻撃");
				//////////////////////ダメージ計算////////////////////////////////
				across.hitPoint = across.hitPoint - player[0].atkPoint;
				System.out.println(across.name + "に" + player[0].atkPoint + "のダメージ");
				if(across.hitPoint <= 0) {
					System.out.println(across.name + "を倒した!");
					return player[0];
				}
				System.out.println(across.name + "の攻撃");
				player[0].hitPoint = player[0].hitPoint - across.atkPoint;
				System.out.println(player[0].name + "は" + across.atkPoint + "のダメージ");
				if(player[0].hitPoint <= 0) {
					System.out.println(player[0].name + "は倒れてしまった!");
					return 0;
				}
				
			}
			
			if(EnemyTurn == 1) {
				/////////////////////相手ターンが先行////////////////////////////

				//////////////////////戦闘エフェクト//////////////////////////////
				System.out.println(across.name + "の攻撃");
				//////////////////////ダメージ計算////////////////////////////////
				player[0].hitPoint = player[0].hitPoint - across.atkPoint;
				System.out.println(player[0].name + "は" + across.atkPoint + "のダメージ");
				if(player[0].hitPoint <= 0) {
					System.out.println(player[0].name + "は倒れてしまった!");
					return 0;
				}
				
				System.out.println(player[0].name + "の攻撃");
				across.hitPoint = across.hitPoint - player[0].atkPoint;
				System.out.println(across.name + "に" + player[0].atkPoint + "のダメージ");
				if(across.hitPoint <= 0) {
					System.out.println(across.name + "を倒した!");
					return player[0];
				}
				
			}
		}
		return null;
	}

TextQuestCard result = player[0].fight(monster, player);
		if(result == null) {
			System.out.println("勝負は決まらなかった。");
		}
		if(result == 0) {
			System.out.println("GameOver");
		}
		if(result == player[0].hitPoint) {
			System.out.println("明日は、何をする?");

		}

情報が足りなかったりした場合はご連絡お願いします。

0

1Answer

fightメソッドの返り値がTextQuestCardというObjectなのに、なぜInteger型を返して比較しようとしているのでしょうか。まずそこをTextQuestCardクラスのObjectを返すのか、hitPointのInteger型を返すのか統一しないとダメだと思います。
ifの分岐的に、fightメソッドはIntegerを返すようにして、メソッド内で残hitPointを計算してその値を返せば良い気がします。

1Like

Comments

  1. @hayashi0001

    Questioner

    エラーがなくなり、ちゃんと動きました!ありがとうございます。

Your answer might help someone💌