java
Q&A
解決したいこと
このコードの問題を解決したい。
わかりやすく、解説して欲しいです。
どうか宜しくお願い致します。
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
該当するソースコード
.EnemyAbstract
package challenge.Abstract;
public abstract class EnemyAbstract {
/*
* 問題、Enemyクラスに必要なメソッドを作成してください。
* 作成時。HumanAbstract抽象クラスを参考にして作成すること。
*/
}
.HumanAbstract
package challenge.Abstract;
import challenge.enemy.Enemy;
public abstract class HumanAbstract {
public abstract void attack(Enemy e);
public abstract void skill(Enemy e);
/*
* 問題HumanAbstractクラス内に以下のゲッター、セッターを記載するようにしましょう。
* 必要なセッターは以下のものを作成すること、アレンジに合わせて追加していくこと
* getName()
* getHp()
* setHp()
* getType()
* getWeak()
*/
}
.Demon
package challenge.enemy;
import challenge.human.Human;
import challenge.message.Type;
import challenge.util.Battle;
//問題、Demonクラスに対してEnemyクラスを継承すること
public class Demon{
public Demon() {
this.name = "魔王";
this.hp = 350;
this.mp = 20;
this.st = 40;
this.power = 10;
this.type = Type.DARK;
this.weak = Type.LIGHT;
}
@Override
public void skill(Human h) {
System.out.println(this.type + "の力で滅ぶがいい!");
Battle.magicDamage(h, this.type,power + 10);
}
}
.Enemy
package challenge.enemy;
public class Enemy{
/*
* Humanクラスを参考にEnemy用のクラスを記述を行う事
*ヒント、パラメータ、処理は基本的に同じだが、
*attackメソッドを実行する時にHumanクラスを引数にすると良い
*/
}
.HalfDemon
package challenge.enemy;
import challenge.human.Human;
import challenge.message.Type;
import challenge.util.Battle;
//問題、HalfDemonクラスに対してEnemyクラスを継承すること
public class HalfDemon{
public HalfDemon() {
this.name = "魔人";
this.hp = 200;
this.mp = 20;
this.st = 40;
this.power = 10;
this.type = Type.FIRE;
this.weak = Type.WATER;
}
@Override
public void skill(Human h) {
System.out.println(this.type + "属性のブレス!");
Battle.magicDamage(h, this.type,power-5);
}
}
.Monster
package challenge.enemy;
public class Monster{
//チャレンジ問題、Slimeクラス、HalfDemonクラス、Demonクラスを参考にして
//あなただけのオリジナルモンスターを作成してください
}
.Slime
package challenge.enemy;
import challenge.human.Human;
import challenge.message.Type;
//問題、Slimeクラスに対してEnemyクラスを継承すること
public class Slime{
public Slime() {
this.name = "スライム";
this.weak = Type.THUNDER;
}
@Override
public void skill(Human h) {
System.out.println("ぷよぷよ跳ねる");
System.out.println("ただそれだけ");
}
}
.Hero
package challenge.human;
public class Hero extends Human{
//チャレンジ問題、Warrior、Wizard、Hunterクラスを参考にして
//あなただけのオリジナルキャラクターを作成してください
}
.Human
package challenge.human;
import challenge.Abstract.HumanAbstract;
import challenge.enemy.Enemy;
import challenge.message.Message;
public class Human extends HumanAbstract{
//問題、Humanクラス内で使用する変数を記載すること
//使用する変数は以下の通り
//※欲しい変数がある場合は別途追加してもかまいません
// name 名前
// hp 体力
// mp 属性
// st スタミナ
// power 火力
// type キャラクター属性
// weak 弱点属性
//初期の値を設定するためのコンストラクタ
//変数を追加する場合は追加で記載を進める。
public Human() {
this.hp = 100;
this.mp = 20;
this.st = 50;
this.power = 5;
}
//問題、HumanAbstractで設定したメソッドを作成すること。
//attackメソッドには以下の処理を行うように記載すること。
//1,Enemyクラスを引数に取得すること
//2,「name」の攻撃、となるようにメッセージを出力すること
//3,Battleクラスのdamageメソッドを呼び出すこと
public void skill(Enemy e) {
System.out.println(Message.EE003);
}
//ゲッターセッターを以下に作成
public String getName() {
return this.name;
}
public int getHp() {
return this.hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public String getType() {
return this.type;
}
public String getWeak() {
return this.weak;
}
}
.Hunter
package challenge.human;
import challenge.enemy.Enemy;
import challenge.util.Battle;
//問題、狩人クラスに対してHumanクラスを継承すること
public class Hunter{
int hp;
int st;
boolean personality = false;
public Hunter() {
this.name = "狩人";
this.hp = 130;
this.st = 80;
this.power = 6;
super.power = 15;
//問題、Hunterの属性を指定してください。
//属性を決めるときはTypeクラスを使用すること
}
@Override
public void attack(Enemy e) {
if(personality) {
Battle.damage(e,this.power + 10);
personality = !personality;
}else {
Battle.damage(e,this.power);
}
}
@Override
public void skill(Enemy e) {
personality = !personality;
System.out.println("特殊な弓を持つ!");
}
}
.Warrior
package challenge.human;
import challenge.enemy.Enemy;
import challenge.message.Type;
import challenge.util.Battle;
//問題、戦士クラスに対してHumanクラスを継承すること
public class Warrior{
private int charge = 0;
public Warrior() {
this.name = "戦士";
this.hp = 150;
this.mp = 5;
this.st = 50;
this.power = 8;
this.type = Type.FIRE;
this.weak = Type.WIND;
}
@Override
public void attack(Enemy e) {
System.out.println("テンションが1上がった");
charge++;
Battle.damage(e, power);
}
@Override
public void skill(Enemy e) {
System.out.println(charge + "回分のチャージ攻撃!");
Battle.damage(e, power * charge * 2);
charge = 0;
}
}
.Wizard
package challenge.human;
import challenge.enemy.Enemy;
import challenge.message.Type;
import challenge.util.Battle;
//問題、魔法使いクラスに対してHumanクラスを継承すること
public class Wizard{
private String magic = Type.LIGHT;
public Wizard() {
this.name = "魔法使い";
this.hp = 70;
this.mp = 80;
this.st = 40;
this.power = 30;
this.type = Type.LIGHT;
this.weak = Type.FIRE;
}
@Override
public void attack(Enemy e) {
System.out.println(magic + "属性の魔法攻撃!");
Battle.magicDamage(e, magic,power);
}
@Override
public void skill(Enemy e) {
int magica = new java.util.Random().nextInt(6);
this.magic = Type.magicGenre[magica];
System.out.println("属性変更!"+magic+"属性!");
}
}
.Message
package challenge.message;
public class Message {
/*
* 問題、Messageクラスで使用するメッセージが不足しているため、作成してください
* 不足しているのは以下のメッセージ
* タイトル:TITLE
* エンディング用出力:ENDING
* 人間側の攻撃:BE001
* 敵側の攻撃:BE002
* 存在しないキャラを選択した時のエラーメッセージ:EE001
* 存在しない敵キャラを選択した時のエラーメッセージ:EE002
*/
final public static String ME001 = "君が操作するキャラを選んでね!";
/*
* チャレンジ問題、キャラクターを追加したら、
* ME002のメッセージを作成しましょう。
*/
final public static String ME002 = "1:戦士、2:魔法使い,3:狩人";
final public static String ME003 = "コンソールに入力してEnterを押してください";
final public static String BE003 = "あなたは何もしなかった";
final public static String BE004 = "敵は何もしなかった";
final public static String BE005 = "効果はばつぐんだ";
final public static String BE006 = "効果はいまひとつのようだ";
final public static String BE007 = "ダメージを受けた";
final public static String EE003 = "スキルは存在しません";
}
.Type
package challenge.message;
public class Type {
/*
* チャレンジ問題、新規に属性を作成したい時は属性の定数を作成しましょう
* ※作成した属性は本当に使われているか他のクラスを確認しつつ追加しましょう
* Wizardクラスのmagic[]等
*/
final public static String NONE = "無";
final public static String FIRE = "炎";
final public static String WATER = "水";
final public static String WIND = "風";
final public static String THUNDER = "雷";
final public static String LIGHT = "光";
final public static String DARK = "闇";
final public static String[] magicGenre = {Type.FIRE,Type.WATER,Type.WIND,Type.THUNDER,Type.LIGHT,Type.DARK};
}
.Battle
package challenge.util;
import java.util.Scanner;
import challenge.enemy.Enemy;
import challenge.human.Human;
import challenge.message.Message;
public class Battle{
private static String input;
//コンソール上で文字入力を受け取るためのAPI
public static Scanner sc = new Scanner(System.in);
/*
* 問題、booleanを返却するためのdeathCheckメソッドを作成してください。
* 作成時、以下の条件を満たす処理を作成すること
* 1,自分の体力と相手の体力を出力すること。
* 2,出力する時に\tを使って「あなた: 70 敵: 100」となるように出力すること
* 3,互いの体力を確認し、どちらかの体力が無くなっている場合はtrueを返却、
* それ以外の場合はfalseを出力すること
*
*/
//あなたの攻撃
public static void yourAttack(Human human, Enemy enemy) {
System.out.println(Message.BE001);
System.out.println("1:攻撃 2:スキル");
input = sc.nextLine();
if (input.equals("1")) {
human.attack(enemy);
} else if (input.equals("2")) {
human.skill(enemy);
} else {
System.out.println(Message.BE003);
}
}
//敵の攻撃
public static void enemyAttack(Human human, Enemy enemy) {
System.out.println(Message.BE002);
int attackChoice = new java.util.Random().nextInt(2);
if (attackChoice == 0) {
enemy.attack(human);
} else if (attackChoice == 1) {
enemy.skill(human);
} else {
System.out.println(Message.BE004);
}
}
/*
* チャレンジ問題、今ある攻撃のメソッドは単純な計算方法でダメージ算出をしています。
* 状態異常やより複雑な計算をさせたいなら、以下のメソッドを書き換えましょう
*/
//通常攻撃を受けた時のメソッド
public static void damage(Human human, int damage) {
human.setHp(human.getHp() - (damage-3));
System.out.println(human.getName() + "は" + (damage-3) + Message.BE007);
}
//敵に攻撃した時のメソッド
public static void damage(Enemy enemy, int damage) {
enemy.setHp(enemy.getHp() - damage);
System.out.println(enemy.getName() + "は" + damage + Message.BE007);
}
//効果抜群な攻撃
public static void superDamage(Human human, int damage) {
human.setHp(human.getHp() - (damage * 3));
System.out.println(Message.BE005);
System.out.println(human.getName() + "は" + (damage * 3) + Message.BE007);
}
//効果抜群な攻撃
public static void superDamage(Enemy enemy, int damage) {
enemy.setHp(enemy.getHp() - (damage * 3));
System.out.println(Message.BE005);
System.out.println(enemy.getName() + "は" + (damage * 3) + Message.BE007);
}
//効果の少ない攻撃
public static void minDamage(Human human, int damage) {
human.setHp(human.getHp() - (damage / 6));
System.out.println(Message.BE006);
System.out.println(human.getName() + "は" + (damage / 6) + Message.BE007);
}
//効果の少ない攻撃
public static void minDamage(Enemy enemy, int damage) {
enemy.setHp(enemy.getHp() - (damage / 3));
System.out.println(Message.BE006);
System.out.println(enemy.getName() + "は" + (damage / 6) + Message.BE007);
}
//敵に魔法攻撃をするためのメソッド
public static void magicDamage(Enemy enemy, String magic, int power) {
if (enemy.getWeak().equals(magic)) {
System.out.println("A");
superDamage(enemy, power);
} else if (enemy.getType().equals(magic)) {
System.out.println("B");
minDamage(enemy, power);
} else {
System.out.println("C");
Battle.damage(enemy, power);
}
}
//敵から魔法攻撃を受けるためのメソッド
public static void magicDamage(Human human, String magic, int power) {
if (human.getWeak().equals(magic)) {
superDamage(human, power);
} else if (human.getType().equals(magic)) {
minDamage(human, power);
} else {
Battle.damage(human, power);
}
}
/*
* チャレンジ問題、今ある攻撃の他に必殺技の処理をするメソッドを作成してみましょう。
* 必殺技を作るときは、Humanabstractクラスにメソッドを追加することから始めましょう。
*/
}
.SetUp
package challenge.util;
import java.util.Scanner;
import challenge.enemy.Demon;
import challenge.enemy.Enemy;
import challenge.enemy.HalfDemon;
import challenge.enemy.Slime;
import challenge.human.Human;
import challenge.human.Hunter;
import challenge.human.Warrior;
import challenge.human.Wizard;
import challenge.message.Message;
public class SetUp {
private static String input;
// コンソール上で文字入力を受け取るためのAPI
public static Scanner sc = new Scanner(System.in);
public static Human setUp(Human human) {
System.out.println(Message.ME001);
System.out.println(Message.ME002);
System.out.println(Message.ME003);
/*
* チャレンジ問題、キャラクターを作成したら、コンソールの入力で キャラクターを使用できるようにif文を修正しましょう
*/
// nextLine()メソッドで入力された値を文字列として扱う
input = sc.nextLine();
if (input.equals("1")) {
human = new Warrior();
} else if (input.equals("2")) {
human = new Wizard();
} else if (input.equals("3")) {
human = new Hunter();
} else {
/*
* 問題、キャラクターが存在しなかった時のエラーメッセージを出力してください
*/
}
return human;
}
/*
* チャレンジ問題、敵キャラクターを作成したら、コンソールの入力で キャラクターを使用できるようにif文を修正しましょう
*/
public static Enemy setUp(Enemy enemy) {
int enemyCode = new java.util.Random().nextInt(3);
switch (enemyCode) {
case 0:
enemy = new Slime();
break;
case 1:
enemy = new HalfDemon();
break;
case 2:
enemy = new Demon();
break;
default:
/*
* 問題、キャラクターが存在しなかった時のエラーメッセージを出力してください
*/
}
return enemy;
}
}
.Main
package challenge;
import challenge.enemy.Enemy;
import challenge.human.Human;
public class Main {
public static Human human;
public static Enemy enemy;
public static void main(String[] args) {
/*
* 問題、Messageで作成したRPGのタイトルを出力しましょう
*/
/*
* 問題、SetUpクラスのSetUpメソッドを使って自分が作成するキャラと敵キャラを準備してください。
*/
System.out.println(human.getName()+"と"+enemy.getName()+"で勝負だ");
//battleメソッドで返却されるintがtrueで返却されるまでループ処理が発生する。
do {} while(battle());
/*
* 問題、Messageで作成したRPGのエンディングを出力しましょう
*/
}
public static boolean battle() {
/*
* 問題、BattleクラスのyourAttackメソッドを実行してください
*/
/*
* 問題、BattleクラスのenemyAttackメソッドを実行してください
*/
/*
* 問題、deathチェックメソッドを呼び出して確認結果のbooleanをreturnで返却してください。
*/
return false;
}
}
自分で試したこと
いろいろ悩み、調べたがわからなかった。
1