【Java】じゃんけんプログラムを作ってみた!!

こんにちは、kazuです。
本日はJavaでじゃんけんプログラムを作ったので
それを紹介していきたいと思います。

環境

まずは環境です
OS : Windows10
Java : OpenJava
editor : VisualStudioCode
実行環境 : コマンドプロンプト
になります。

どのようなプログラムか?

題名の通りじゃんけんをするプログラムですが、
じゃんけんプログラムって他の人も結構作っていますが結構特色ありますよね。
軽く調べたところ割と数字を入力してじゃんけんをするそして引き分けの場合も終了してしまう
プログラムが多いように感じました。
ということで今回作るじゃんけんプログラムは文字列(カタカナ)を入力してじゃんけんをして
引き分けの場合は再勝負というごく普通のじゃんけんプログラムを作りました。
当然相手(コンピューター)はランダムに出すようにしています。
流れとしては
1. プレイヤー(自分)がカタカナでグー、チョキ、パーどれかを入力する
2. プレイヤーの入力した文字列を数値に変換する
3. 敵(相手)がランダムで数値を生成する
4. 無限ループに入れる
5. 勝ち負けを決める計算をする
6. 決着(勝ちか負け)がついた場合は勝ちか負けの文字列を出力して無限ループから抜けてプログラムを終了する
6. 引き分け(あいこ)の場合は再度1(カタカナ入力)に戻る
が今回のプログラムの流れになります。

実際にプログラムを見てみよう

ではプログラムを見てみましょう。
クラスごとにファイルを分けていますのでひとクラスずつ見てみましょう!

janken.java

// 実行するクラス
class janken {
  public static void main(String[] args){
    // gemeインスタンス作成
    game obj = new game();
    // games実行
    obj.games();
  }
}
hands.java

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
// 相手と自分のじゃんけんを出すクラス
public class hands {
  public int player() {
    // 自分で入力(カタカナ入力)
    BufferedReader player = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("グー、チョキ、パーどれを出す?");
    // HashMapの宣言
    // Stringをintに変換するため
    Map<String, Integer> map = new HashMap<>();
 
    // 要素を追加
    // {グー=0, チョキ=1, パー=2}
    map.put("グー", 0);
    map.put("チョキ", 1);
    map.put("パー", 2);
    try {
      // 入力した文字を文字列で入れる
      String playerHands = player.readLine();
      // String型をintに変換
      int hand = map.get(playerHands);
      System.out.println("あなたは"+playerHands+"です!");
      return hand;
    } catch (IOException e) {
      System.out.println(e.getMessage());
    }
    return 0;
  }

  public int enemy() {
    // 相手はint型
    // グー : 0 , チョキ : 1 , パー : 2
    int[] enemyHands = {0, 1, 2};
    // 出力する数値をランダム
    Random enemypom = new Random();
    int hand = enemyHands[enemypom.nextInt(3)];
    // 相手が出したものをわかるようにするための出力
    if(0==hand){
      System.out.println("コンピューターはグーです!");
    } else if (1==hand){
      System.out.println("コンピューターはチョキです!");
    } else if (2==hand){
      System.out.println("コンピューターはパーです!");
    };
    return hand;
  }
}
game.java

public class game extends hands {
  public void games(){
    // あいこで再呼び出しされるよう無限ループ
    while(true){
      // メソッドplayer呼び出し
      int player = super.player();
      // メソッドenemy呼び出し
      int enemy = super.enemy();
      // 勝ちと負けと引き分けを計算する
      // 0: 引き分け, 1: 負け, 2: 勝ち
      int result = (player - enemy + 3) % 3;
      if (result == 0) {
        System.out.println("あいこでしょ");
        // continue;
      } else if (result == 2) {
        System.out.println("やった!勝ったよ!!");
        break;
      } else {
        System.out.println("残念負けだよ...");
        break;
      }
    }
  }
}

実行結果

勝ちのパターン

グー、チョキ、パーどれを出す?
// 記入したもの
グー
あなたはグーです!
コンピュータはチョキです!
やった!勝ったよ!!
負けのパターン

グー、チョキ、パーどれを出す?
// 記入したもの
チョキ
あなたはチョキです!
コンピュータはグーです!
残念負けだよ...
引き分けのパターン

グー、チョキ、パーどれを出す?
// 記入したもの
パー
あなたはパーです!
コンピュータはパーです!
あいこでしょ
// ループする
グー、チョキ、パーどれを出す?
// グーチョキパーを入力する
etc...

最後に

いかがでしたでしょうか?
今回はJavaでじゃんけんゲームを作ってみました。
なんか思ったよりもコード多くなってしまいました(笑)
ただやることとしては特にすごいことではないのですが..
ですがJavaの勉強になりました!
他にもっといい書き方があれば教えてください!
最後までご覧いただきありがとうございました。

関連記事

こんにちはkazuです。 本日はJavaでライトアプリを作るのであれば こんな形になるのかなぁと思いながら プログラムを組んでみましたのでそれを解説していきます。 どのようなアプリを作ったか まずはどのようなアプリを作ったかと[…]

関連記事

こんにちは、kazuです。 Java実行時のにVSCodeで書いたものを実行したら文字化けしてしまった 時の解決方法を解説していこうと思います。 環境 OS : Windows10 Java : OpenJDK 環境 : コマン[…]