前回をまだ読んでない方はこちら
👉 【ポケモン×Java】Lv7:『勝つのはどっちだ?』〜while〜
🎮 バトル再開
HP0になったら、その時点でバトル終了!
このしくみは while文 で実現できたね!
……でも、思わぬバグが発生!
**両方のHPが0になって「引き分け」になっちゃうことがある**んだ。
今回は、この問題を「if文」で解決しよう!
💡 if文
で勝敗を正しく判定しよう!
❗ なぜバグが起きたの?
while (pi.hp > 0 && hi.hp > 0) {
pi.attack(hi);
hi.attack(pi);
}
このままだと、ヒトカゲが0になってもピカチュウが攻撃を受けちゃう!
📒 トレーナーメモ
条件が成立している間は、中の処理がすべて実行される。
攻撃したあとに「相手のHPが0以下か」をちゃんと見て、止める工夫が必要!
▷ 修正版のコード
BattleStage.java
package pokemon;
class BattleStage {
public static void main(String[] args) {
Pikachu pi = new Pikachu();
Hitokage hi = new Hitokage();
while (pi.hp > 0 && hi.hp > 0) {
pi.attack(hi);
// ヒトカゲのHPを確認して、倒れたら終了!
if (hi.hp <= 0) {
// while文を終了する
break;
// ヒトカゲのHPを確認して、倒れてなかったらヒトカゲの攻撃
} else {
hi.attack(pi);
}
}
}
}
📒 トレーナーメモ
if(条件){処理}
は、もし(条件)なら{処理}を実行意味!if(hi.hp <= 0) {break;}
の意味は、
もし、(ヒトカゲのhpが0)なら{ループを止める!}break
には、for文やwhile文を終了する機能がある- これで「両者同時に倒れる」ケースを防げるよ!
else{処理}
は、もし、それ以外なら{処理}を実行の意味
✍️ 練習
- while文の中に、「HPを確認してbreakする処理」を追加しよう!
Hintコード:
while (pi.hp > 0 && hi.hp > 0) {
pi.attack(hi);
if (hi.hp <= 0) {
break;
} else {
hi.attack(pi);
}
}
次回:『新技!ピカチュウ、アイアンテール!』
ナイスバトルをありがとう!!
勝負を経験して、ポケモンたちが成長したようだ!
次回は別の技も使えるようになるぞ!!
次の投稿まで――
ピッピカチュウ!!
あとがき
ここまで読んでくれて、本当にありがとうございました。
「プログラミングって難しい…」って思ってた人も、
「ちょっと楽しいかも…!」って思ってもらえたらうれしいな。
次の投稿も、よろしくおねがいします。
💬 コメント・フィードバック歓迎!
「この章わかりやすかった!」
「これ表現まちがってない?」
「次は○○をやってほしい!」などなど、
お気軽にコメントで教えてくださいね!
✅ 実行例(一部)
ピカチュウ がバトルに登場!
ピカーーッ!!
ヒトカゲ がバトルに登場!
カゲェーッ!!
...省略
ピカチュウ の 10万ボルト!
ヒトカゲ に 20 のダメージ!
ヒトカゲ の HP は 0 になった!