7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Javaでじゃんけんアプリ

Last updated at Posted at 2018-08-22

初投稿です。
さんざん書かれているじゃんけんアプリを作成しました。

作成期間:2日
言語:Java
環境:MacOS、ターミナル
テキストエディター:Atom

コマンドで操作するゲームです。
ルールは以下の通りです。

  • 3回勝負
  • じゃんけんの手は配列で管理
  • CPUはランダムな数値を作成して手を決める
  • プレイヤーは入力された文字を数値に変えて手を決める
  • 数値で勝敗を判定する
  • 最後に勝負の結果を表示する

実際の画面はこんな感じです。

スクリーンショット 2018-08-23 2.15.35.png

Jankenクラス

対戦のクラスです。

Janken.java
package jankenapp;

public class Janken {
  static String[] handList = {"グー","チョキ","パー"};

  static void startMessage() {
    System.out.println("--------------------");
    System.out.println("じゃんけんをしましょう!3回勝負です!");
  }

  static void endMessage() {
    System.out.println("ありがとうございました!また遊びましょうね!");
    System.out.println("--------------------");
  }

  public static void main(String[] args) {
    Player player = new Player();
    CPU cpu = new CPU();
    Judge judge = new Judge();

    // 開始の挨拶
    startMessage();

    for (int i = 1; i <= 3; i++) {
     System.out.println("【" + i + "回戦目】");

     // CPUが手をランダムに作成
     cpu.setHand();
     // Playerが手を入力
     player.setHand();
     // Player,CPUの手を表示
     System.out.println("・あなたの手:" + handList[player.getHand()]);
     System.out.println("・わたしの手:" + handList[cpu.getHand()]);
     // 判定
     judge.judgement(cpu.getHand(), player.getHand());
    } // 繰り返し終わり
    // 結果を表示
    judge.result();
    // 終了の挨拶
    endMessage();
  }
}

Playerクラス

Scannerを使って手を文字列で取得し、switch文で数値化しています。

Player.java
package jankenapp;
import java.util.*;

public class Player {
  int hand;

  public void setHand() {
    System.out.print("「グー」「チョキ」「パー」のどれかを入力してください。>");
    Scanner sc = new Scanner(System.in);
    String inputHand = sc.nextLine();

    switch(inputHand) {
      case "グー":
        hand = 0;
        break;
      case "チョキ":
        hand = 1;
        break;
      case "パー":
        hand = 2;
        break;
      default:
        System.out.println("間違えたので終了します…。");
    }
  }

  public int getHand() {
    return hand;
  }
}

CPUクラス

randomメソッドでランダムに手を決めています。

CPU.java
package jankenapp;
import java.util.*;

public class CPU {
    int hand;

    public void setHand() {
     double rand = Math.random() * 3;
     hand = (int)rand;
    }

    public int getHand() {
      return this.hand;
    }
}

Judgeクラス

勝敗の判定と勝負の結果のクラスです。
判定方法はそれぞれの手を数値化し、(CPUの手-プレイヤーの手+3)%3で求めています。
プレイヤーの勝敗引き分けの回数をカウントし、結果をif文で表示しています。

Judge.java
Package jankenapp;

public class Judge {
  int judge;
  int win;
  int lose;
  int even;

  public void judgement(int cpuHand, int playerHand) {
    judge = (cpuHand - playerHand + 3 ) % 3;

    switch(judge) {
      case 0:
        System.out.println("あいこです!");
        even++;
        break;
      case 1:
        System.out.println("あなたの勝ちです!");
        win++;
        break;
      case 2:
        System.out.println("あなたの負けです!");
        lose++;
        break;
      default:
    }
    System.out.println("--------------------");
  }

  public void result() {
    System.out.println("【勝敗の結果】");
    System.out.println("勝ち:" + win + "回");
    System.out.println("負け:" + lose + "回");
    System.out.println("あいこ:" + even + "回");
    System.out.println("");
    if (win > lose) {
      System.out.println("この勝負はあなたの勝ちです!おめでとう!");
    } else if (win < lose) {
      System.out.println("この勝負はあなたの負けです!どんまい!");
    } else {
      System.out.println("この勝負は引き分けです!");
    }
  }
}

独学なのでお見苦しい箇所がありましたらすみません。
ご助言など頂けますと嬉しいです。

最後まで閲覧ありがとうございました。

【参考】
じゃんけんアルゴリズムをちょっと応用
(判定式を参考にさせていただきました。)

追記
(8/23)入力を間違えてもデフォルト値でグーが出てしまうことに気づきました。対策します。

7
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?