初投稿です。
さんざん書かれているじゃんけんアプリを作成しました。
作成期間:2日
言語:Java
環境:MacOS、ターミナル
テキストエディター:Atom
コマンドで操作するゲームです。
ルールは以下の通りです。
- 3回勝負
- じゃんけんの手は配列で管理
- CPUはランダムな数値を作成して手を決める
- プレイヤーは入力された文字を数値に変えて手を決める
- 数値で勝敗を判定する
- 最後に勝負の結果を表示する
実際の画面はこんな感じです。
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)入力を間違えてもデフォルト値でグーが出てしまうことに気づきました。対策します。