スポンサーリンク

Javaでコンソール版じゃんけんプログラムを作成してみた

Java

こんにちは、鈴木俊吾です。

先日、現在使っているパソコンにJavaの開発環境を導入してみました。
せっかくなので、何かちょっとしたものを作成してみようと思いまして…。
今回は、コンソール版「じゃんけん」プログラムを組んでみることにしました。

プログラミングの勉強を始めて、基本的な文法を理解してきたら…。
じゃんけんのプログラムは、何となく作ってみたくなりますよね。
普通にサンプルプログラムを書いているだけよりは面白いですし。

今回作成したじゃんけんプログラムの簡単な解説もしてみますので…。
同じようにJavaの学習をしている方の参考になれば幸いです。

スポンサーリンク

コンソール版じゃんけんプログラムの仕様

今回作成した、じゃんけんプログラムの仕様を簡単にまとめると以下のようになります

  1. プレイヤーから手の入力を受け付ける。
  2. コンピュータは手をランダムに選ぶ。
  3. 勝敗結果を表示する。
  4. リトライ機能付き。

手の入力は、標準入力から行います。
コンピュータの手は、ランダムに「グー」「チョキ」「パー」のいずれかを選択します。
勝敗結果では、各プレイヤーの手の内容・勝敗結果・勝敗数を表示します。
リトライする場合には、勝敗数を引き継いだ状態でじゃんけんをします。

あまり複雑にならないように、できるだけシンプルなルールを採用。
とりあえず、これだけの機能があれば普通にじゃんけんはできますという程度ですね。

コンソール版じゃんけんプログラムの実装

それでは、コンソール版じゃんけんプログラムの実装に移ります。

Handクラス

まず、じゃんけんの「手」を定義してみます。
これを「Hand」クラスとします。

この「Hand」クラスには、各手の名前と勝敗チェックの機能を持たせます。
例えば、「グー」の手は、「チョキ」に強く、「パー」に弱いという情報を保持させるといった感じ。

ConsoleRPS/Hand.java at master · suzushin7/ConsoleRPS

setWinHandメソッドで勝ちの手、setLoseHandメソッドで負けの手を設定します。
getResultメソッドでは、相手の手を受け取ります。
自分の手が勝ちの場合は1、負けの場合は-1、引き分けの場合は0を返します。

RPSクラス

RPSというのは、じゃんけんを表す英語の「rock-paper-scissors」の頭文字を取ったもの。
要するに、このクラスは、じゃんけんの機能をまとめたものというわけです。

ConsoleRPS/RPS.java at master · suzushin7/ConsoleRPS

コンストラクタでは、主に初期化処理を行っています。
それぞれの手を作成、強い手と弱い手の登録、各変数の初期化をしています。

setPlayerHandメソッドは、標準入力から手を表す数字を受け取って、その数字に対応するHandクラスを取得します。
setCpuHandメソッドは、Math.randomメソッドを使ってランダムに0~2の数字を取得して、その数字に対応するHandクラスを取得します。

playOnceメソッドは、1回分のじゃんけん処理をまとめたものです。
ユーザーに手の入力をしてもらい、コンピュータの手を設定後、じゃんけんの結果を出力します。

retryCheckメソッドは、もう一度じゃんけんをするかどうかの確認を行います。
「t」を入力するとリトライ、「f」を入力するとプログラムを終了します。

Mainクラス

Mainクラスは、プログラムの起点です。

ConsoleRPS/Main.java at master · suzushin7/ConsoleRPS

じゃんけん処理はRPSクラスにまとめてありますので…。
do-whileループで、playOnceメソッドを呼び出しています。
条件チェックにはretryCheckメソッドを使用すればOK。

ソースコード全体は、Githubに上げてあります。
もし気になる方がいたら確認してみてください。

コンソール版じゃんけんプログラムの実行例

試しに、じゃんけんプログラムを実行してみた結果の例が以下のようになります。

ConsoleRPS/result-sample.txt at master · suzushin7/ConsoleRPS

この例では、最初にグーを出して負け、次にパーを出して勝ち、となった状況です。
きちんと勝敗結果が表示されているのが分かりますね。

ひとこと

今回の記事では、Javaでコンソール版じゃんけんプログラムを作成してみた過程をまとめてみました。

できるだけオブジェクト指向を意識しつつ、プログラムを書いてみたのですが…。
うーん、もっと綺麗に書けそうな気がするのですよね。
まあでも、今のところは、現状のままで動くので良しとしておきます。
もっと良い方法が思いついたら、その都度改善を加えていこうと思います。

今回のプログラムは出発点。
徐々にもっと高度なプログラムを組めるようにしたいですね。
目標としては、何か実用的なアプリを作成して公開することです。
さーて、引き続きプログラミングの勉強を頑張るぞ!

スポンサーリンク

鈴木俊吾
鈴木俊吾

『一度きりの人生、楽しむべきだよね絶対!』をモットーに、人生大逆転を目指して活動をしているフリーライター。
自分がやりたいと思ったことは、何でもやってみるスタイル。

ブログでは、ライフログを中心に、仕事・趣味・思ったことなどについてまとめていきます。
いくつか記事を読んでいくうちに、私の人となりが何となくつかめるかと思います。

Twitterをフォローしていただくと、ブログからの更新通知を手軽に受け取ることができます。
読者の皆さんとも積極的に交流をしていきたいと思っていますので…。
あなたからのフォローを楽しみにしています!