2023.05.22
ミニゲーム
「じゃんけん」の作成 その1
「じゃんけん」とは?
「じゃんけん」は、2人以上が同時に手を出し、その指の形で勝敗を決める遊びです。指の形はグー(石)、チョキ(ハサミ)、パー(紙)の3種類です。
「じゃんけん」の勝ち負けは以下のように決まります。
グーは、チョキに勝ち、パーに負ける。 チョキは、パーに勝ち、グーに負ける。 パーは、グーに勝ち、チョキに負ける。 グーとグーは、あいこ(引き分け)。 チョキとチョキは、あいこ(引き分け)。 パーとパーは、あいこ(引き分け)。
プログラムの作成手順
Javaのソースコード
作成手順に従って作った「じゃんけん」のソースコードです。
Janken1.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077
import java.util.Scanner; public class Janken1 { private static final int GUU = 0; // グー private static final int CHOKI = 1; // チョキ private static final int PAA = 2; // パー // 勝敗の判定 // 自分が勝った場合、 1を戻す // 自分が負けた場合、-1を戻す // あいこの場合、 0を戻す private static int judge( int jibun, int aite ) { // あいこの判定 if ( jibun == aite ) return 0; // 勝ちの判定 if ( ( GUU == jibun ) && ( CHOKI == aite ) ) return 1; if ( ( CHOKI == jibun ) && ( PAA == aite ) ) return 1; if ( ( PAA == jibun ) && ( GUU == aite ) ) return 1; // 自分の負け return -1; } // 数値をじゃんけんの手の文字に変換 private static String getTeString( int te ) { if ( 0 == te ) return "グー"; if ( 1 == te ) return "チョキ"; if ( 2 == te ) return "パー"; return ";" } // メイン public static void main( String[] args ) { // 相手の手を決める // 0~2の乱数をaiteに代入 int aite = (int)( Math.random() * 3.0 ); // メッセージを表示 System.out.print( "じゃんけんポン 0:グー 1:チョキ 2:パー → " ); // Scannerを作成 Scanner scan = new Scanner( System.in ); // 自分の手をキーボード入力する int jibun = scan.nextInt(); if ( ( 0 > jibun ) || ( 2 < jibun ) ) { System.out.println( "0~2の数字を入力してください。" ); return; } // 相手の手を出力 System.out.println( "相手の手は、" + getTeString( aite ) ); // 自分の手を出力 System.out.println( "自分の手は、" + getTeString( jibun ) ); // 勝敗の判定 int result = judge( jibun, aite ); switch ( result ) { case 0: System.out.println( "あいこです。" ); break; case 1: System.out.println( "あなたの勝ちです。" ); break; case -1: System.out.println( "あなたの負けです。" ); break; } } }
実行結果
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Janken1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Janken1.java
実行
C:\talavax\javasample>java Janken1
自分の手の選択
じゃんけんポン 0:グー 1:チョキ 2:パー →
パーを選択(2を入力してEnterキーを押す)
じゃんけんポン 0:グー 1:チョキ 2:パー → 2
勝敗を主力
じゃんけんポン 0:グー 1:チョキ 2:パー → 2 相手の手は、グー 自分の手は、パー あなたの勝ちです。
Javaソースコードの解説
ここから、ソースコードを詳しく解説していきます。
001
import java.util.Scanner;
003
public class Janken1 {
クラス名を、Janken1としています。
004 005 006
private static final int GUU = 0; // グー private static final int CHOKI = 1; // チョキ private static final int PAA = 2; // パー
008 009 010 011 012 013
// 勝敗の判定 // 自分が勝った場合、 1を戻す // 自分が負けた場合、-1を戻す // あいこの場合、 0を戻す private static int judge( int jibun, int aite ) {
014 015
// あいこの判定
if ( jibun == aite ) return 0;
自分の手jibunと相手の手aiteが同じ場合、return文で0を戻しています。この0は、あいこ(引き分け)を表しています。
017 018 019 020
// 勝ちの判定
if ( ( GUU == jibun ) && ( CHOKI == aite ) ) return 1;
if ( ( CHOKI == jibun ) && ( PAA == aite ) ) return 1;
if ( ( PAA == jibun ) && ( GUU == aite ) ) return 1;
自分の手jibunが勝つ場合の条件を記述してます。
18行目のif文で、自分の手jibunがグーで相手の手aiteがチョキの場合、return文で1を戻しています。
022 023
// 自分の負け return -1;
ここに到達した場合、return文で-1を戻しています。-1を自分の負けを表しています。
026 027 028 029 030 031 032 033
// 数値をじゃんけんの手の文字に変換 private static String getTeString( int te ) { if ( 0 == te ) return "グー"; if ( 1 == te ) return "チョキ"; if ( 2 == te ) return "パー"; return ";" }
数で表しているじゃんけんの手を文字列に変換するメソッドgetTeStringです。
じゃんけんの手を表すint型の変数teを引数とし、その引数に対応する文字列を戻しています。
0はグー、1はチョキ、2はパーです。それ以外の数の場合、空文字を戻しています。
036 037
// メイン public static void main( String[] args )
このmainメソッドからプログラムを実行します。
039 040 041
// 相手の手を決める // 0~2の乱数をaiteに代入 int aite = (int)( Math.random() * 3.0 );
0~2の整数の乱数を発生し、int型の変数aiteに代入しています。
Math.randomメソッドは0.0以上で1.0未満の乱数を発生するので3.0を掛けることで、0.0以上で3.0未満の乱数を発生することができます。
Math.randomメソッド
public static double Math.random()
・乱数を返します。 パラメータ なし 戻り値 0.0以上、1.0未満の乱数
043 044
// メッセージを表示 System.out.print( "じゃんけんポン 0:グー 1:チョキ 2:パー → " );
print文で、自分の手をキーボードから入力する値を表示しています。print文を使っているので改行されずに、キーボード入力した値は、このメッセージの右側に表示されます。println文を使うとキーボード入力した値は下に表示されます。
046 047
// Scannerを作成
Scanner scan = new Scanner( System.in );
標準入力System.inを使って、Scannerクラスのscanを初期化しています。
049 050
// 自分の手をキーボード入力する int jibun = scan.nextInt();
nextIntメソッドで、キーボードから入力された1行を読み取り、その値をint型の変数jibunに代入しています。
051 052 053 054
if ( ( 0 > jibun ) || ( 2 < jibun ) ) { System.out.println( "0~2の数字を入力してください。" ); return; }
056 057
// 相手の手を出力 System.out.println( "相手の手は、" + getTeString( aite ) );
059 060
// 自分の手を出力 System.out.println( "自分の手は、" + getTeString( jibun ) );
063 064
// 勝敗の判定 int result = judge( jibun, aite );
065 066 067 068 069 070 071 072 073 074 075
switch ( result ) { case 0: System.out.println( "あいこです。" ); break; case 1: System.out.println( "あなたの勝ちです。" ); break; case -1: System.out.println( "あなたの負けです。" ); break; }
以上です。