teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

追記

2018/07/19 11:19

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -20,14 +20,14 @@
20
20
  c. 次に`PlayerClass`と`EnemyClass`に`turn`メソッドを追加します。
21
21
  これは`BattleClass`から呼び出すためのメソッドです。
22
22
 
23
- ※)`PlayerClass`と`EnemyClass`が`CharacterClass`を継承しているのであれば、Character Classにturnメソッドを定義してオーバーライドするのでも良いかと。
23
+ ※)`PlayerClass`と`EnemyClass`が`CharacterClass`を継承しているのであれば、`Character Class``turn`メソッドを定義してオーバーライドするのでも良いかと。
24
24
 
25
25
  戦闘は`BattleClass`は`PlayerClass`クラスと`EnemyClass`クラスの`trun`メソッドを呼び出す形にします。
26
26
  ```
27
27
  プレーヤーとエネミーを分けて`List`で管理するのが良いと思います。
28
28
  ```
29
29
 
30
- 戦闘不能ならスキップさせたいのであれば、trunメソッド内で自身がisAliveかどうかを呼び出してください。
30
+ 戦闘不能ならスキップさせたいのであれば、`trun`メソッド内で自身が`isAlive`かどうかを呼び出してください。
31
31
  ```Java
32
32
  public void trun() {
33
33
  if(!isAlive()) {
@@ -42,6 +42,11 @@
42
42
 
43
43
  ---
44
44
 
45
+ > つまりBattleClass(審判)は今はAのターンだからAが行動してという指示を出すだけで、実際の行動はCharacterClassのAが決めるということですね。
46
+
47
+ はい、その認識でOKです。あと`BattleClass`が行う事はPT単位の全滅判定です。
48
+ 全滅したPTがEnemyClassなら戦闘終了、PCならゲームオーバー処理など。
49
+
45
50
  > スキルを使用する場合は
46
51
  > public abstract int damage(Character user,Character target){
47
52
 

5

追記

2018/07/19 11:19

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -43,19 +43,20 @@
43
43
  ---
44
44
 
45
45
  > スキルを使用する場合は
46
+ > public abstract int damage(Character user,Character target){
46
47
 
47
- `SkillDataClass`にはスキル以外の情報を持たないほうがいいです。
48
+ `Character`の情報はスキルではないので、`SkillDataClass`にはスキル以外の情報を持たないほうがいいです。
48
49
  あくまでも該当のスキルを使うのは`EnemyDataClass`と`PlayerDataClass`なので有って。
49
50
  `SkillDataClass`クラスではないからです。
50
51
 
51
52
  ダメージは考慮事項が多いので、ダメージ計算を行う専用の処理(クラス/メソッド)を作成したほうが良いですが。
52
- ここではまずシンプルに、相手からの被弾時に行う処理として`CharacterClass`に`damage`メソッドを追加します。ここで、Skillの情報を元にHPとかデバフの状態を設定すればよいでしょう。
53
+ ここではまずシンプルに、相手からの被弾時に行う処理として`CharacterClass`に`damage`メソッドを追加します。ここで、`Skill`の情報を元にHPの加減算、バフデバフの状態を設定すればよいでしょう。
53
54
 
54
55
  あと考慮することはPT全体への全体攻撃があるかどうかです。
55
56
  あるなら、その点も考えてみてください。最初はターゲット単体へのダメージ処理を実装するのが良いでしょう。
56
57
 
57
58
  `EnemyClass`の場合は、
58
- 1,使用スキルを選択(条件やランダム)
59
+ 1,保持しているスキルリストから使用スキルを選択(条件やランダム)
59
60
  2,`BattleClass`クラスから相手PTの情報を取得、ヘイトに応じて攻撃するターゲットを選択。
60
61
  3,スキルをターゲットに攻撃。
61
62
 

4

追記

2018/07/19 11:03

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -45,12 +45,20 @@
45
45
  > スキルを使用する場合は
46
46
 
47
47
  `SkillDataClass`にはスキル以外の情報を持たないほうがいいです。
48
- あくまでもスキルを使うのは`EnemyDataClass`と`PlayerDataClass`なので有って。
48
+ あくまでも該当のスキルを使うのは`EnemyDataClass`と`PlayerDataClass`なので有って。
49
49
  `SkillDataClass`クラスではないからです。
50
+
50
- 実際にはダメージ計算するクラスを作成したほうが良いですが。
51
+ ダメージ考慮事項が多いので、ダメージ計算を行う専用の処理(クラス/メソッド)を作成したほうが良いですが。
52
+ ここではまずシンプルに、相手からの被弾時に行う処理として`CharacterClass`に`damage`メソッドを追加します。ここで、Skillの情報を元にHPとかデバフの状態を設定すればよいでしょう。
53
+
54
+ あと考慮することはPT全体への全体攻撃があるかどうかです。
55
+ あるなら、その点も考えてみてください。最初はターゲット単体へのダメージ処理を実装するのが良いでしょう。
56
+
51
- EnemyClassの場合は、
57
+ `EnemyClass`の場合は、
58
+ 1,使用スキルを選択(条件やランダム)
52
- 1,BattleClassクラスから相手PTの情報を取得、ヘイトに応じて攻撃するターゲットを選択。
59
+ 2,`BattleClass`クラスから相手PTの情報を取得、ヘイトに応じて攻撃するターゲットを選択。
53
- 2,スキルを選択(条件やランダム)しターゲットに攻撃。
60
+ 3,スキルをターゲットに攻撃。
61
+
54
62
  このような形に。
55
63
 
56
64
  > ファイルから読み込まない場合、スキルの追加はインナークラスで書いて行けば良いのでしょうか?
@@ -59,4 +67,7 @@
59
67
  保持している`Skill`は`PlayerDataClass`と`EnemyDataClass`では、`HashMap`で管理する形で良いかと。`SkillTree`クラスを作るかどうかは、好みになるのではないかと。
60
68
  どうしてもファイルから読みたいならば、リソース(ファイル)をロードするクラスを作って、`SkillTree`に展開するなど。
61
69
  ◇参考情報
62
- [Properties](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Properties.html)
70
+ [Properties](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Properties.html)
71
+
72
+ 長々と書きましたが、実際にコードを書いてみることをお勧めします。
73
+ コードを書いた後にポイントを絞って再質問したほうが回答が付きやすいかと。

3

追記

2018/07/19 10:57

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -56,4 +56,7 @@
56
56
  > ファイルから読み込まない場合、スキルの追加はインナークラスで書いて行けば良いのでしょうか?
57
57
 
58
58
  `SkillBuilder`クラスを新設して、`Skill`を生成して返すクラスを作るのと。
59
- 保持している`Skill`は`PlayerDataClass`と`EnemyDataClass`では、`HashMap`で管理する形で良いかと。`SkillTree`クラスを作るかどうかは、好みになるのではないかと。
59
+ 保持している`Skill`は`PlayerDataClass`と`EnemyDataClass`では、`HashMap`で管理する形で良いかと。`SkillTree`クラスを作るかどうかは、好みになるのではないかと。
60
+ どうしてもファイルから読みたいならば、リソース(ファイル)をロードするクラスを作って、`SkillTree`に展開するなど。
61
+ ◇参考情報
62
+ [Properties](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Properties.html)

2

追記

2018/07/19 10:21

投稿

umyu
umyu

スコア5846

answer CHANGED
File without changes

1

追記

2018/07/19 10:16

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -38,4 +38,22 @@
38
38
  ```
39
39
 
40
40
  d. 最初はシンプルに戦闘の枠組みを作って、あとから細部を詰めていく形のほうが良いです。
41
- 初心者なら特にそうです。最初は外部ファイルから読まない、特殊な処理を入れない。
41
+ 初心者なら特にそうです。最初は外部ファイルから読まない、特殊な処理を入れない。
42
+
43
+ ---
44
+
45
+ > スキルを使用する場合は
46
+
47
+ `SkillDataClass`にはスキル以外の情報を持たないほうがいいです。
48
+ あくまでもスキルを使うのは`EnemyDataClass`と`PlayerDataClass`なので有って。
49
+ `SkillDataClass`クラスではないからです。
50
+ 実際にはダメージを計算するクラスを作成したほうが良いですが。
51
+ EnemyClassの場合は、
52
+ 1,BattleClassクラスから相手PTの情報を取得、ヘイトに応じて攻撃するターゲットを選択。
53
+ 2,スキルを選択(条件やランダム)しターゲットに攻撃。
54
+ このような形に。
55
+
56
+ > ファイルから読み込まない場合、スキルの追加はインナークラスで書いて行けば良いのでしょうか?
57
+
58
+ `SkillBuilder`クラスを新設して、`Skill`を生成して返すクラスを作るのと。
59
+ 保持している`Skill`は`PlayerDataClass`と`EnemyDataClass`では、`HashMap`で管理する形で良いかと。`SkillTree`クラスを作るかどうかは、好みになるのではないかと。