質問編集履歴

1

質問内容の改善

2021/01/14 06:51

投稿

D-coder
D-coder

スコア9

test CHANGED
@@ -1 +1 @@
1
- javaで作成したジャンケンプログラムを修正したい
1
+ javaで作成したプログラムコード短くしたい
test CHANGED
@@ -1,8 +1,16 @@
1
+ 先日は無礼な質問の投稿を失礼いたしました。
2
+
3
+
4
+
5
+ 自分なりに改善を重ねた結果分からない点が出ましたので質問致します。
6
+
7
+
8
+
1
- javaで作成したジャンケンプログラムを修正したいのですが上手くせん
9
+ javaで作成したジャンケンプログラムのコード短くしたいと考えていま
2
-
3
-
4
-
5
- イクリプスやVScode上で動く簡単なコンソールアプリケーションを作ってます。
10
+
11
+
12
+
13
+
6
14
 
7
15
  ※作っているゲームの仕様や機能は以下の通り
8
16
 
@@ -24,100 +32,180 @@
24
32
 
25
33
 
26
34
 
35
+ ### 短くしたいと考えているコード
36
+
37
+ 「ジャンケンに主人公が勝利した場合のダメージ処理メソッド」と「ジャンケンに敵が勝利した場合のダメージ処理メソッド」があるクラスです。
38
+
39
+
40
+
27
- 上記ゲーム課題で作っているですが、以下修正加えるよう更に課題が出ました。
41
+ 自分なりに変数などのを使って戦闘時クリティカル分岐コード短くしました。
28
-
29
-
30
-
31
- ### ゲームの修正点1 継承・抽象メソッドを使用したゲームにする
42
+
32
-
33
-
34
-
35
- 具体的にはCpuとHuman(人間)をそれぞれ別のクラスとして作り、共通の親クラスPlayerを継承するようにしたいです。
43
+
36
-
37
-
38
-
44
+
39
- 共通の親クラスPlayerに、CpuとPlayerで共通の変数(hp,name)や処理(ダメージをうける処理)定義し、それぞれ異なる処理を抽象メソッドを利用した形変更するどうすればよいでしょうか?
45
+ ですがSystem.out.println();使った同じような内容の文章下記のコードで四回繰り返てしまっているのですが短くすることはできるのでしょうか?
40
-
41
-
42
-
43
- ### ゲームの修正点2ダメージ処理の保守性を高めたい
46
+
44
-
47
+
48
+
45
- ージの処理の箇所下記のようなコードをダメージ別に何度も書いているを1回にまとめたいのですが方法かりません。
49
+ ****主人公が勝利した場合のソッドも敵が勝利した場合メソッドも似たような処理ので、何かすれば更に短く出来そうなのですがその何かかりません。
50
+
46
-
51
+ ****
47
-
48
-
52
+
49
- 同じような処理を繰り返すハードコーディた設計にるにはどうすれば良いでしょうか
53
+ いただすでしょうか?
50
54
 
51
55
 
52
56
 
53
57
  ```ここに言語を入力
54
58
 
55
- System.out.println(Main.namae.input_enemi+"の勝ち");
56
-
57
-
58
-
59
- System.out.println(Main.namae.input_name+"は10のダメジを受けた");
60
-
61
-
62
-
63
- this.playr_hp=playr_hp-d10;
64
-
65
-
66
-
67
- System.out.println(Main.namae.input_name+"HP:"+this.playr_hp+"/20");
68
-
69
-
70
-
71
- System.out.println(Main.namae.input_enemi+"HP:"+this.enemi_hp+"/20");
72
-
73
-
74
-
75
- System.out.println("-----------------------------------------");
59
+ public class BattleSystem{
60
+
61
+
62
+
63
+ /*フィルド値*/
64
+
65
+
66
+
67
+ public int playrHp = 20;//主人公のHP
68
+
69
+ public int enemiHp = 20;//敵のHP
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ /*主人公が勝利した場合の戦闘処理メソッド*/
80
+
81
+ void ataltuku(){
82
+
83
+ this.playrHp = playrHp;
84
+
85
+ this.enemiHp=enemiHp;
86
+
87
+
88
+
89
+ java.util.Random rand = new java.util.Random();
90
+
91
+ java.util.Random rand2 = new java.util.Random();
92
+
93
+ int damag = rand.nextInt(3)+1;//ダメージのランダム数字1~3を取得
94
+
95
+ int criticalCheck = rand2.nextInt(10);//クリティカル判定 9の時にクリティカル
96
+
97
+ int criticalDamage = damag * 5;//クリティカル判定時のダメージ【com*5倍のダメージ】
98
+
99
+
100
+
101
+ /*戦闘時のダメージ分岐*/
102
+
103
+
104
+
105
+ if(criticalCheck < 8 ) {
106
+
107
+ System.out.println(Main.nameInfo.inputName+"の勝ち");
108
+
109
+ System.out.println(Main.nameInfo.inputEnemi+"は"+damag+"のダメージを受けた");
110
+
111
+ this.enemiHp= enemiHp-damag;
112
+
113
+ System.out.println(Main.nameInfo.inputEnemi+"HP:"+this.enemiHp+"/20");
114
+
115
+ System.out.println(Main.nameInfo.inputName+"HP:"+this.playrHp+"/20");
116
+
117
+ System.out.println("-----------------------------------------");
118
+
119
+ }
120
+
121
+ if(criticalCheck == 9 ) {
122
+
123
+ System.out.println(Main.nameInfo.inputName+"の勝ち");
124
+
125
+ System.out.println(Main.nameInfo.inputEnemi+"は"+criticalDamage+"のダメージを受けた");
126
+
127
+ this.enemiHp= enemiHp-criticalDamage;
128
+
129
+ System.out.println(Main.nameInfo.inputEnemi+"HP:"+this.enemiHp+"/20");
130
+
131
+ System.out.println(Main.nameInfo.inputName+"HP:"+this.playrHp+"/20");
132
+
133
+ System.out.println("-----------------------------------------");
134
+
135
+ }
136
+
137
+
138
+
139
+
140
+
141
+ }//ataltuku()
142
+
143
+
144
+
145
+ /*敵が処理した場合の戦闘処理メソッド*/
146
+
147
+ void dameizi(){
148
+
149
+ this.playrHp = playrHp;
150
+
151
+ this.enemiHp=enemiHp;
152
+
153
+ java.util.Random rand = new java.util.Random();
154
+
155
+ java.util.Random rand2 = new java.util.Random();
156
+
157
+ int damag = rand.nextInt(3)+1;//ダメージのランダム数字1~3を取得
158
+
159
+ int criticalCheck = rand2.nextInt(10);//クリティカルのランダムな数値 9でクリティカル
160
+
161
+ int cd = damag * 5;//クリティカル判定時のダメージ【com*5倍のダメージ】
162
+
163
+
164
+
165
+
166
+
167
+ if( criticalCheck < 8 ) {
168
+
169
+
170
+
171
+ System.out.println(Main.nameInfo.inputEnemi+"の勝ち");
172
+
173
+ System.out.println(Main.nameInfo.inputName+"は"+damag+"のダメージを受けた");
174
+
175
+ this.playrHp=playrHp-damag;
176
+
177
+ System.out.println(Main.nameInfo.inputName+"HP:"+this.playrHp+"/20");
178
+
179
+ System.out.println(Main.nameInfo.inputEnemi+"HP:"+this.enemiHp+"/20");
180
+
181
+ System.out.println("-----------------------------------------");
182
+
183
+ }
184
+
185
+ if( criticalCheck == 9 ) {
186
+
187
+ System.out.println(Main.nameInfo.inputEnemi+"の勝ち");
188
+
189
+ System.out.println(Main.nameInfo.inputName+"は"+cd+"のダメージを受けた");
190
+
191
+ this.playrHp=playrHp-cd;
192
+
193
+ System.out.println(Main.nameInfo.inputName+"HP:"+this.playrHp+"/20");
194
+
195
+ System.out.println(Main.nameInfo.inputEnemi+"HP:"+this.enemiHp+"/20");
196
+
197
+ System.out.println("-----------------------------------------");
198
+
199
+ }
200
+
201
+
202
+
203
+
204
+
205
+ }//dameizi()
206
+
207
+
208
+
209
+ }
76
210
 
77
211
  ```
78
-
79
-
80
-
81
-
82
-
83
- ### ゲームの修正点3ダメージ処理時の文章を簡略化したい
84
-
85
- ダメージ処理の時に
86
-
87
- ```ここに言語を入力
88
-
89
- System.out.println(Main.namae.input_name+"は2のダメージを受けた");
90
-
91
- ```
92
-
93
- ```ここに言語を入力
94
-
95
- System.out.println(Main.namae.input_name+"は5のダメージを受けた");
96
-
97
- ```
98
-
99
- のようにダメージ処理の数字ごとに一々テキストを書いているのを、変数などを使ってダメージの数字が挿入されるようにしたいです。
100
-
101
- ※下記のようなイメージでダメージ文章を簡略化したい
102
-
103
- ```ここに言語を入力
104
-
105
- System.out.println(Main.namae.input_name+"は"+damage+"のダメージを受けた");
106
-
107
- ```
108
-
109
- ### 以上3つの方法をコードで教えて頂ければ幸いです
110
-
111
- 修正点1~3の方法を文章だけでなく、コードで教えて頂ければ幸いです。
112
-
113
- 修正点1~3以外にもハードコーディングを名を直すべき箇所があればそこも教えて頂ければ幸いです。
114
-
115
- するべき処理のイメージはついても具体的な組み込み方が分からず苦戦しています。
116
-
117
- 皆さんの力をお借りできれば嬉しく思います。
118
-
119
-
120
-
121
- コードは以下のリンクをご覧ください。
122
-
123
- [この質問のコード](https://teratail.com/questions/315454?modal=q-comp)