今回は、Javaで作成するミニゲームと題して下のゲームを作成したいと思います。
じゃんけんゲーム
毎度おなじみ「じゃんけんゲーム」シンプルに、楽しめるゲームとして最もポピュラーなものだと思います。
それをJava言語を使ってコンソールゲームにしました。
しかし、バグもあります。。。
Mainメソッド
メインメソッドは変更しません。前回のコードはこちらから見れます。※前回の記事です。
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String input = scan.next();
FirstCls first = new FirstCls();
if ("exe".equals(input)) {
first.execute(scan);
}
boolean isNumber = first.isNumberString(input);
if (isNumber) {
System.out.println(input + "は数字です。");
} else {
System.out.println(input + "は数字ではありません。");
}
}
}
今回の実装はFirstCls#executeから始めます。。。
実際に作ってみた
ここで、Mainメソッド変更しません。とはじめに記載したのではじめが分かりづらいです。起動したら「exe」と入力する必要がありました(笑)
そして、実装したコード(FirstCls)は下のようなコードです。
※使用していないゴミコードは削除しています。全体はこちらのGithubで見ることができます。
public class FirstCls {
/** システム(OS)で使用する改行コード */
private static final String SEPARATOR = System.getProperty("line.separator");
/** プレーヤの勝利フラグ */
private static final Integer WIN = 1;
/** プレーヤの敗北フラグ */
private static final Integer LOOSE = 2;
/** プレーヤの引き分けフラグ */
private static final Integer DRAW = 3;
public void execute(Scanner scan) {
System.out.println("*** EXECUTEを起動します ***");
// じゃんけんの手のマップ
Map<String, String> map = createJankenTe();
// じゃんけんの勝敗マップ
Map<String, Integer> judgeMap = createJudgement();
Random rnd = new Random();
while(true) {
System.out.print("じゃんけん。。。");
String player = scan.next();
int cpu = rnd.nextInt();
System.out.println("あなた:" + map.get(player) + " CPU:" + map.get(String.valueOf(cpu)));
if (judgeMap.get(player + cpu) == WIN) {
System.out.println("You win!");
} else if (judgeMap.get(player + cpu) == LOOSE) {
System.out.println("You loose!");
} else if (judgeMap.get(player + cpu) == DRAW) {
System.out.println("Draw! one more time ...");
continue;
}
System.out.println(SEPARATOR + "もう一度やる?" + SEPARATOR + "y: もう一度 n: やめる");
String more = scan.next();
if ("n".equals(more)) {
break;
}
}
}
/**
* じゃんけんの手を設定したMapを返却する
* @return Map
*/
private Map<String, String> createJankenTe() {
Map<String, String> map = new HashMap<>();
map.put("1", "グー");
map.put("2", "チョキ");
map.put("3", "パー");
return map;
}
/**
* じゃんけんの勝敗パターンをMapに設定
* @return Map
*/
private Map<String, Integer> createJudgement() {
Map<String, Integer> map = new HashMap<>();
map.put("12", WIN);
map.put("23", WIN);
map.put("31", WIN);
map.put("21", LOOSE);
map.put("32", LOOSE);
map.put("13", LOOSE);
map.put("11", DRAW);
map.put("22", DRAW);
map.put("33", DRAW);
return map;
}
}
こんな感じです。
処理内容
Mainメソッドは。。。割愛します。
FirstCls#execute()では、ジャンケンで取りうる手(グー・チョキ・パー)をMapに設定しておき、1~3の入力に対応してそれぞれの手を表示、じゃんけんの判定にしようします。
勝敗の判定には、全てのパターンをMapに記憶してプレーヤーの手とCPUの手を連結→プレーヤー:グー、CPU: チョキであれば"12"で勝敗マップからは「1」が取得できます。
1は勝利判定のフラグです。
詳細は上のコードに書いてありますので。。。
近くに、これの解説動画も作成いたします。
問題
バグがあるのですが、それはどこでしょうか?
<ヒント>
動かしてみるとわかります。
でわでわ。。。
関連ページ一覧
Eclipse セットアップ
- Java Install Eclipse〜開発ツールのインストール〜
- TensorFlow C++環境〜EclipseにCDTをインストール〜
- Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
- Eclipse Meven 開発手順〜プロジェクトの作成〜
- Java OpenCV 環境セットアップ(on Mac)
- Eclipse SceneBuilderを追加する
- JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
Java Basic一覧
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜