Javaプログラミング学習サイト ゆるゆるプログラミング

2020/03/23 公開

・神経衰弱 その2

ここでは神経衰弱のソースコードを解説しています。「神経衰弱」

このプログラムでは、カードの管理は要素数52個の1次元の配列で行います。結果を出力するときに横に13枚、縦に4枚に並べます。

それでは、神経衰弱のソースコードを順番に解説していきます。

001:    // 神経衰弱
002:    public class ShinkeiSuijaku {

トランプを操作するクラス名を、ShinkeiSuijakuとしています。

003:    	// カードの状態を表す定数
004:    	final static int STATUS_HIDE = 0;	// 伏せられた状態
005:    	final static int STATUS_OPEN = 1;	// オープンの状態
006:    	final static int STATUS_PAIR = 2;	// 揃った状態
007:    
008:    	// カード番号を格納する配列
009:    	static int[] cards;
010:    
011:    	// カードの状態を格納する配列
012:    	static int[] statuses;
013:    
014:    	// オープンしたカードを記憶する配列
015:    	static int[] memory;

神経衰弱に使う定数と、配列を宣言しています。

定数は、カードの以下の3つの状態を表しています。

  STATUS_HIDEは、カードが伏せられた状態

  STATUS_OPENは、カードをオープンした状態

  STATUS_PAIRは、既にペアになっている状態

次に配列の説明です。

配列cardsには、カードの番号を格納します。1~13を4個ずつ計52個の値を格納します。

配列statusesには、カードの状態をを格納します。上記の3つの定数のいずれかを格納します。

配列memoryには、1度オープンしたカード番号を格納します。0は記憶なしで、記憶した場合1~13の値が代入されます。

018:    	// カードの初期化
019:    	private static void initCards()
020:    	{
021:    		// カードを格納する配列
022:    		cards = new int[ 52 ];
023:    
024:    		// カードを配列に格納し、シャフルする
025:    		for ( int i = 0; i < cards.length; i++ )
026:    			cards[ i ] = ( i / 4 ) + 1;
027:    
028:    		for ( int i = 0; i < cards.length; ++ i ) {
029:    			// 0~(配列cardsの個数-1)の乱数を発生
030:    			int rnd = (int)( Math.random() * (double)cards.length );
031:    
032:    			// cards[ i ]とcards[ rnd ]を入れ替える
033:    			int w = cards[ i ];
034:    			cards[ i ] = cards[ rnd ];
035:    			cards[ rnd ] = w;
036:    		}
037:    	}

カードを初期化するメソッドです。

int型配列cardsに1~13を4個ずつ格納し、乱数を使って並び替えています。

並び替えはこちらを参考にしてください。「配列の並び替え」

040:    	// 状態の初期化
041:    	private static void initStatuses()
042:    	{
043:    		statuses = new int[ 52 ];
044:    		// カードの状態を"隠された状態"にする
045:    		for ( int i = 0; i < statuses.length; i++ )
046:    			statuses[ i ] = STATUS_HIDE;
047:    	}

カードの状態を初期化するメソッドです。int型配列statusesの要素数を52で作成し、全ての要素に定数STATUS_HIDEを代入しています。これは全てのカードが伏せられていることを意味します。

050:    	// 記憶の初期化
051:    	private static void initMemory()
052:    	{
053:    		memory = new int[ 52 ];
054:    		for ( int i = 0; i < memory.length; i++ )
055:    			memory[ i ] = 0;
056:    	}

1度オープンしたカード番号を記憶する配列を初期化するメソッドです。int型配列memoryの要素数を52で作成し、全ての要素に0を代入しています。0は、まだ記憶していないことを意味しています。記憶されると1~13のいずれかの値が入ります。

続きはこちらです。「神経衰弱 その3」

■関連コンテンツ

ポーカーの役判定 ポーカーの役を判定
トランプの操作 トランプを操作するクラス
配列の並び替え 配列をランダムに並び替える方法を解説
switch文 式による処理の分岐に使用するswitch文について解説
値のコンソール表示 print()、println()とは?
Math.randomの使い方について解説-画像

乱数 random

Math.randomメソッドを使って乱数を発生する方法を解説します。指定範囲の乱数の発生方法も解説しています。

サイコロの目のでる確率は?-画像

サイコロの出目確率

乱数で1から6の数を発生し、それぞれの数値が出現する回数を調べます。

サイコロの目のでる確率は?-画像

ゾロ目の出る確率

2つのサイコロの出目を乱数で1から6の数を発生し、出目が同じときの回数と出現率を調べます。

繰り返し処理に使用するfor文について解説-画像

for文

繰り返し処理に使用するfor文をJavaのソースコードを使って説明しています。

条件による処理の分岐に使用するif文について解説-画像

if文

条件による処理の分岐に使用するif文について解説

■新着情報

2022.07.07 外部プログラムの実行 exeファイル実行
2022.07.06 完全数 6=1+2+3

■広告

Topへ