アットウィキロゴ
Javaプログラミング入門
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

Javaプログラミング入門

じゃんけん

最終更新:

javatutorial

- view
管理者のみ編集可

1. 何を作るか


今回は、コンソール(黒い画面)上で動く「じゃんけんゲーム」を作ります。
じゃんけんといえば「グー・チョキ・パー」ですが、プログラミングの世界では、言葉をそのまま扱うよりも数文字や数字に置き換えて考えると、コンピュータにとって計算しやすくなります。
まずは、じゃんけんの手を「0・1・2」の数字に置き換えてみましょう。

じゃんけんの手と数値
数値 じゃんけんの手
0 グー
1 チョキ
2 パー

いきなり完成したプログラムを書こうとすると、頭が混乱してしまいます。
意図した処理を行わせるためには、「どの順番で考えるか」という論理的な思考がとても大切です。
今回は以下のスモールステップで、少しずつプログラムを組み立てていきます。

1. 入力:プレイヤー(あなた)がキーボードから数字を打ち込む
2. 乱数:コンピュータがランダムに数字を選ぶ
3. 条件分岐勝敗判定:二つの数字を比べて、勝ち・負け・あいこを決める

それでは、さっそく順番に作っていきましょう!

ステップ1:プレイヤーの入力


まずは、プレイヤーがキーボードから「0・1・2」のどれかを入力できるようにします。
入力を受け取るためには、これまで学んだ Scanner を使います。

サンプル:Janken.java
  1. import java.util.Scanner;
  2.  
  3. public class Janken {
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6.  
  7. System.out.println("じゃんけんゲームを開始します!");
  8. System.out.print("あなたの手を入力してください(0:グー, 1:チョキ, 2:パー): ");
  9.  
  10. int playerHand = scanner.nextInt();
  11. System.out.println("あなたの手は " + playerHand + " です。");
  12. }
  13. }

【解説】
ここでは、変数 playerHand を用意して、プレイヤーが入力した数字を記憶させています。
実行して「1」と入力すると、画面に「あなたの手は 1 です。」と表示されるはずです。
これで「入力」の部分は完成です。

ステップ2:コンピュータの乱数


次はコンピュータの番です。
毎回同じ手を出してくるコンピュータではゲームになりませんから、毎回ランダムに手を変える仕組みが必要です。
ここで登場するのが 乱数 です。
Random を使って、0から2までの数字をランダムに作ります。

サンプル:Janken.java
  1. import java.util.Scanner;
  2. import java.util.Random;
  3.  
  4. public class Janken {
  5. public static void main(String[] args) {
  6. Scanner scanner = new Scanner(System.in);
  7. System.out.println("じゃんけんゲームを開始します!");
  8. System.out.print("あなたの手を入力してください(0:グー, 1:チョキ, 2:パー): ");
  9. int playerHand = scanner.nextInt();
  10.  
  11. Random random = new Random();
  12. int computerHand = random.nextInt(3);
  13. System.out.println("コンピュータの手は " + computerHand + " です。");
  14. }
  15. }

【解説】
新しく random.nextInt(3) という命令を追加しました。
これは「0、1、2」の中からランダムに一つ数字を選んでくれる便利な機能です。選ばれた数字は、変数 computerHand に記憶させています。
これで、プレイヤーとコンピュータ、両方の手が揃いました!

ステップ3:条件分岐による勝敗判定


最後に、二つの数字を比べて勝敗を決めます。
「もし〜なら」という判断をするためには、条件分岐(if文)を使います。

サンプル:Janken.java
  1. import java.util.Scanner;
  2. import java.util.Random;
  3.  
  4. public class Janken {
  5. public static void main(String[] args) {
  6. Scanner scanner = new Scanner(System.in);
  7. System.out.println("じゃんけんゲームを開始します!");
  8. System.out.print("あなたの手を入力してください(0:グー, 1:チョキ, 2:パー): ");
  9. int playerHand = scanner.nextInt();
  10.  
  11. Random random = new Random();
  12. int computerHand = random.nextInt(3);
  13. System.out.println("コンピュータの手は " + computerHand + " です。");
  14.  
  15. if (playerHand == computerHand) {
  16. System.out.println("結果:あいこです!");
  17. } else if ((playerHand == 0 && computerHand == 1) ||
  18. (playerHand == 1 && computerHand == 2) ||
  19. (playerHand == 2 && computerHand == 0)) {
  20. System.out.println("結果:あなたの勝ちです!");
  21. } else {
  22. System.out.println("結果:あなたの負けです!");
  23. }
  24. }
  25. }

【解説】
if文を使って、以下の3つのパターンに分けています。
1. あいこ:プレイヤーの手とコンピュータの手が全く同じ (==) 場合です。
2. 勝ち:プレイヤーが勝つ条件は3つあります。「自分がグー(0)で相手がチョキ(1)」または「自分がチョキ(1)で相手がパー(2)」または「自分がパー(2)で相手がグー(0)」です。これを &&(かつ)と ||(または)を使って繋ぎました。
3. 負け:あいこでも勝ちでもない場合は、自動的に「負け」になります(else で処理します)。

実行結果
じゃんけんゲームを開始します!
あなたの手を入力してください(0:グー, 1:チョキ, 2:パー): 1
コンピュータの手は 2 です。
結果:あなたの勝ちです!

よくあるまちがいと注意点


💡注意! 等価演算子(==)と代入演算子(=)を間違える
if文の中で条件を書くとき、if (playerHand = computerHand) と書いてしまうのは初心者がとてもよくやるミスです。
「=」が1つだと、変数に値を「入れる(代入)」という意味になってしまいます。
二つの値が「同じかどうか比べる」ときは、必ず「==」と2つ並べて書きましょう。

💡注意! 想定外の数字が入力されたら?
もしプレイヤーが「3」や「100」といった数字を入力したらどうなるでしょうか?
現在のプログラムでは「勝ち」や「あいこ」の条件に当てはまらないため、すべて else の処理に入ってしまい「あなたの負けです!」と表示されてしまいます。
今回は完璧に対処しなくても大丈夫ですが、「ユーザーは必ず正しい数字を入れてくれるとは限らない」と意識しておくことは、プログラミングにおいて非常に重要です。

コラム:アルゴリズムの工夫でコードを短くする?


今回は if 文を使って、「自分がグーで相手がチョキなら…」とすべての勝ちパターンを正直に書きました。
しかし、少し高度な話になりますが、「引き算」と「割り算の余り」を組み合わせた計算式を使うと
なんとこの長い if 文を1行の計算式で判定することができます。

たとえば、「 (プレイヤーの手 - コンピュータの手 + 3) % 3 」という数式を計算すると、
その答えが「0ならあいこ、1なら負け、2なら勝ち」と綺麗に分かれるのです!
不思議ですよね。プログラミングは、こうした数学のような「アルゴリズム(計算手順)の工夫」を知ることで
長いコードを魔法のように短くすることができる面白さを持っています。今はまだ「そんな方法もあるんだな」と知っておくだけで十分です!

最近更新されたスレッド
人気記事ランキング
ウィキ募集バナー