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

質問編集履歴

3

追加

2020/04/29 08:53

投稿

chimo
chimo

スコア55

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- ```packageって通常メインクラスにインポートされるものだと思っていたのですが、メインメソッドにpackageがある場合はどのように解釈すればよいのでしょう。
1
+ packageって通常メインクラスにインポートされるものだと思っていたのですが、メインメソッドにpackageがある場合はどのように解釈すればよいのでしょう。
2
2
 
3
3
  起動させるクラスは5つありまして
4
4
  ①SimulateMonsterBattle…メインメソッド。BattleWildを起動してるだけ

2

追k

2020/04/29 08:53

投稿

chimo
chimo

スコア55

title CHANGED
File without changes
body CHANGED
@@ -29,7 +29,8 @@
29
29
  もし原因と思われるソースコードあれば指定してもらえれば載せます。
30
30
 
31
31
  ②のコード
32
+
32
- ```java
33
+ ```
33
34
  package pokemon;
34
35
 
35
36
  import java.io.BufferedReader;

1

コード追か

2020/04/29 08:52

投稿

chimo
chimo

スコア55

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- packageって通常メインクラスにインポートされるものだと思っていたのですが、メインメソッドにpackageがある場合はどのように解釈すればよいのでしょう。
1
+ ```packageって通常メインクラスにインポートされるものだと思っていたのですが、メインメソッドにpackageがある場合はどのように解釈すればよいのでしょう。
2
2
 
3
3
  起動させるクラスは5つありまして
4
4
  ①SimulateMonsterBattle…メインメソッド。BattleWildを起動してるだけ
@@ -26,4 +26,287 @@
26
26
  おねがいします。
27
27
 
28
28
  5つクラスがあるのでソースコードが字数制限の関係で全てのせられません。
29
- もし原因と思われるソースコードあれば指定してもらえれば載せます。
29
+ もし原因と思われるソースコードあれば指定してもらえれば載せます。
30
+
31
+ ②のコード
32
+ ```java
33
+ package pokemon;
34
+
35
+ import java.io.BufferedReader;
36
+ import java.io.IOException;
37
+ import java.io.InputStreamReader;
38
+
39
+ class BattleWild {
40
+
41
+ //フィールド(定数)
42
+ final int ESCAPE_SUCCESS_ST_RATE = 50 ; //「にげる」成功率の基準値(50%)
43
+
44
+ //やせいのモンスターとのバトル
45
+ public void mainBattle () {
46
+
47
+ //バトル相手をインスタンス化
48
+ Fushigiyade enemy = new Fushigiyade("やせい","フシギヤデ",20);
49
+ prinTextAsGame("あっ! やせいの " + enemy.getCharacter() + " が とびだしてきた!");
50
+ //何か入力されるまで待機
51
+ System.out.println("▼");
52
+ pushBtn();
53
+
54
+ //自分のモンスターをインスタンス化
55
+ System.out.println("");
56
+ Hitokake myMonster = new Hitokake("ぼく","カケ郎",21);
57
+ prinTextAsGame("ゆけ! " + myMonster.getName() + "!");
58
+ //何か入力されるまで待機
59
+ System.out.println("▼");
60
+ pushBtn();
61
+
62
+ //バトルで使用するローカル変数の定義
63
+ boolean winFlg = true; //勝利フラグ(初期値true)
64
+ boolean escapeFlg = false; //逃走フラグ(初期値false)
65
+ int turn = 0; //ターン数(初期値0)
66
+ int dmg; //与えるダメージ
67
+ String cmd; //プレイヤーからの入力コマンド
68
+ boolean firstAtkFlg; //先攻フラグ
69
+
70
+ //どちらかのHPゼロになるか「にげる」が成功するまでバトルを繰り返す
71
+ while(myMonster.getHp() > 0 && enemy.getHp() > 0){
72
+
73
+ //ターン開始時にローカル変数を初期化
74
+ turn = turn + 1; //繰り返しのたびにターン数を+1する
75
+ dmg = 0;
76
+ cmd = null;
77
+ firstAtkFlg = true; //先攻フラグ(初期値true)
78
+
79
+ //ターン数の表示
80
+ System.out.println("");
81
+ System.out.println("~~~ ターン" + turn + " ~~~");
82
+
83
+ //互いのステータスを表示
84
+ System.out.println("");
85
+ System.out.println("あいて:" + enemy.getStatus() );
86
+ System.out.println("こちら:" + myMonster.getStatus() );
87
+
88
+ //getCmdメソッドからコマンドを受け取る
89
+ System.out.println("");
90
+ cmd = getCmd(myMonster.getName());
91
+
92
+ //先攻・後攻を決定する
93
+ if(myMonster.getSpd() < enemy.getSpd()){
94
+ //相手のモンスターとスピードを比較し、相手が速ければ先攻フラグをfalseに変える
95
+ firstAtkFlg = false;
96
+ }else if (myMonster.getSpd() == enemy.getSpd()){
97
+ //スピードが全く同じであれば50%の確率で先攻フラグをfalseに変える
98
+ firstAtkFlg = judgeFiftyFifty();
99
+ }
100
+
101
+ if(firstAtkFlg){
102
+ //自分のモンスターが先攻の場合
103
+
104
+ //自分のモンスターの行動
105
+ System.out.println("");
106
+ if(cmd.equals("1")){
107
+ //「たたかう」コマンドの場合
108
+
109
+ //相手のモンスターにダメージを与える
110
+ dmg = enemy.damaged(myMonster.useWaza());
111
+ prinTextAsGame(myMonster.getName() + "の " + myMonster.getWaza_nm() + " !");
112
+ prinTextAsGame(" → " + enemy.getName() + " は " + dmg + " のダメージ を うけた!");
113
+
114
+ }else if(cmd.equals("2")){
115
+ //「にげる」コマンドの場合
116
+
117
+ //「にげる」が成功した場合は繰り返しを抜け、失敗した場合は「にげられない!」と表示する
118
+ escapeFlg = challengeEscape(myMonster.getSpd() , enemy.getSpd());
119
+ if(escapeFlg){
120
+ break;
121
+ }else{
122
+ System.out.println("");
123
+ prinTextAsGame("にげられない!");
124
+ }
125
+ }
126
+ //何か入力されるまで待機
127
+ System.out.println("▼");
128
+ pushBtn();
129
+
130
+ //相手のモンスターの行動(HPがゼロの際は何もしない)
131
+ System.out.println("");
132
+ if(enemy.getHp() > 0){
133
+
134
+ //相手のモンスターからダメージを受ける
135
+ dmg = myMonster.damaged(enemy.useWaza());
136
+ prinTextAsGame(enemy.getName() + "の " + enemy.getWaza_nm() + " !");
137
+ prinTextAsGame(" → " + myMonster.getName() + " は " + dmg + " のダメージ を うけた!");
138
+ //自分のモンスターのHPが0の場合は勝利フラグをfalseに変える
139
+ if(myMonster.getHp()==0){
140
+ winFlg = false;
141
+ }
142
+ }
143
+ //何か入力されるまで待機
144
+ System.out.println("▼");
145
+ pushBtn();
146
+
147
+ }else{
148
+ //自分のモンスターが後攻の場合
149
+
150
+ //相手のモンスターの行動
151
+ System.out.println("");
152
+ //相手のモンスターからダメージを受ける
153
+ dmg = myMonster.damaged(enemy.useWaza());
154
+ prinTextAsGame(enemy.getName() + "の " + enemy.getWaza_nm() + " !");
155
+ prinTextAsGame(" → " + myMonster.getName() + " は " + dmg + " のダメージ を うけた!");
156
+ //自分のモンスターのHPが0の場合は勝利フラグをfalseに変える
157
+ if(myMonster.getHp()==0){
158
+ winFlg = false;
159
+ }
160
+ //何か入力されるまで待機
161
+ System.out.println("▼");
162
+ pushBtn();
163
+
164
+ //自分のモンスターの行動(HPがゼロの際は何もしない)
165
+ System.out.println("");
166
+ if(myMonster.getHp() > 0){
167
+ if(cmd.equals("1")){
168
+ //「たたかう」コマンドの場合
169
+
170
+ //相手のモンスターにダメージを与える
171
+ dmg = enemy.damaged(myMonster.useWaza());
172
+ prinTextAsGame(myMonster.getName() + "の " + myMonster.getWaza_nm() + " !");
173
+ prinTextAsGame(" → " + enemy.getName() + " は " + dmg + " のダメージ を うけた!");
174
+
175
+ }else if(cmd.equals("2")){
176
+ //「にげる」コマンドの場合
177
+
178
+ //「にげる」が成功した場合は繰り返しを抜け、失敗した場合は「にげられない!」と表示する
179
+ escapeFlg = challengeEscape(myMonster.getSpd() , enemy.getSpd());
180
+ if(escapeFlg){
181
+ break;
182
+ }else{
183
+ System.out.println("");
184
+ prinTextAsGame("にげられない!");
185
+ }
186
+ }
187
+ }
188
+ //何か入力されるまで待機
189
+ System.out.println("▼");
190
+ pushBtn();
191
+ }
192
+ }
193
+
194
+ //バトル結果
195
+ if(escapeFlg){
196
+ System.out.println("");
197
+ prinTextAsGame("うまく にげきれた!");
198
+ }else{
199
+ if(winFlg){
200
+ System.out.println("");
201
+ prinTextAsGame(enemy.getTrainer() + "の " + enemy.getCharacter() + " は たおれた!");
202
+ }else{
203
+ System.out.println("");
204
+ prinTextAsGame(myMonster.getTrainer() + "は めのまえが まっくらに なった!");
205
+ }
206
+ }
207
+ System.out.println("(バトル終了)");
208
+ }
209
+
210
+ //戦闘コマンドを受け付ける
211
+ //※内部的に使うメソッドなのでprivate設定にする
212
+ private String getCmd(String monsterName) {
213
+ BufferedReader br = null;
214
+ String cmdin = null;
215
+
216
+ try {
217
+ br = new BufferedReader(new InputStreamReader(System.in));
218
+
219
+ do {
220
+ //
221
+ prinTextAsGame(monsterName + "は どうする?");
222
+ System.out.println("1:たたかう 2:にげる");
223
+ System.out.println("▼");
224
+ cmdin = br.readLine();
225
+
226
+ if(!(cmdin.equals("1") || cmdin.equals("2"))){
227
+ System.out.println("[INFO]コマンドが不正です。再入力してください。");
228
+ }
229
+ } while(!(cmdin.equals("1") || cmdin.equals("2")));
230
+
231
+ } catch(IOException e) {
232
+ e.printStackTrace();
233
+ }
234
+
235
+ return cmdin;
236
+ }
237
+
238
+ //何かしらの入力があるまで待機する
239
+ //※内部的に使うメソッドなのでprivate設定にする
240
+ private String pushBtn() {
241
+ BufferedReader br = null;
242
+ String cmdin = null;
243
+
244
+ try {
245
+ br = new BufferedReader(new InputStreamReader(System.in));
246
+ cmdin = br.readLine();
247
+ System.out.println("");
248
+ } catch(IOException e) {
249
+ e.printStackTrace();
250
+ }
251
+ return cmdin;
252
+ }
253
+
254
+ //コマンド「にげる」選択時の処理
255
+ //※内部的に使うメソッドなのでprivate設定にする
256
+ private boolean challengeEscape(int spMy, int spEn) {
257
+ boolean escapeFlag;
258
+
259
+ //成功率(100を越えることを許す)
260
+ int success_rate = (int) ESCAPE_SUCCESS_ST_RATE * spMy / spEn ;
261
+
262
+ //1~100のランダムな数字を取得
263
+ int rndmNum = 1 + (int)(Math.random() * 100.0);
264
+
265
+ //1~100のランダムな数字より成功率の方が高ければ「逃げる」成功
266
+ if(rndmNum < success_rate){
267
+ escapeFlag = true;
268
+ }else{
269
+ escapeFlag = false;
270
+ }
271
+ return escapeFlag;
272
+ }
273
+
274
+ //50%の確率でtrueを返す(すばやさが同じだった場合にどちらを先攻とするか決める際に使用)
275
+ //※内部的に使うメソッドなのでprivate設定にする
276
+ private boolean judgeFiftyFifty() {
277
+ boolean judge = true ;
278
+
279
+ //0か1をランダムで取得
280
+ int rndmNum = (int)(Math.random() * 2.0);
281
+
282
+ if(rndmNum == 0){
283
+ judge = false ;
284
+ }
285
+ return judge;
286
+ }
287
+
288
+ //文字をゲームのように表示(50ミリ秒に1文字)
289
+ //※内部的に使うメソッドなのでprivate設定にする
290
+ private void prinTextAsGame(String txt){
291
+
292
+ //文字列を配列に1文字ずつセット
293
+ char data[] = txt.toCharArray();
294
+
295
+ //配列数を取得
296
+ int arr_num = data.length;
297
+
298
+ for (int i = 0; i < arr_num; i++) {
299
+
300
+ try{
301
+ //指定ミリ秒の間眠る
302
+ Thread.sleep(50);
303
+ }catch(InterruptedException e){
304
+ e.printStackTrace();
305
+ }
306
+
307
+ System.out.print(data[i]);
308
+ }
309
+ System.out.print("\n");
310
+ }
311
+ }
312
+ ```