2021.03.31

神経衰弱 その2

神経衰弱のJavaソースコード解説 1回目

このプログラムでは、カードの管理は要素数52個の1次元の配列で行います。

結果を出力するときに横に13枚、縦に4枚に並べます。

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

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

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

003
004
005
006
007
008
009
010
011
012
013
014
015
	// カードの状態を表す定数
	final static int STATUS_HIDE = 0;	// 伏せられた状態
	final static int STATUS_OPEN = 1;	// オープンの状態
	final static int STATUS_PAIR = 2;	// 揃った状態

	// カード番号を格納する配列
	static int[] cards;

	// カードの状態を格納する配列
	static int[] statuses;

	// オープンしたカードを記憶する配列
	static int[] memory;

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

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

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

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

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

次に配列の説明です。

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

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

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

018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
	// カードの初期化
	private static void initCards()
	{
		// カードを格納する配列
		cards = new int[ 52 ];

		// カードを配列に格納し、シャフルする
		for ( int i = 0; i < cards.length; i++ )
			cards[ i ] = ( i / 4 ) + 1;

		for ( int i = 0; i < cards.length; ++ i ) {
			// 0~(配列cardsの個数-1)の乱数を発生
			int rnd =  (int)( Math.random() *  (double)cards.length );

			// cards[ i ]とcards[ rnd ]を入れ替える
			int w = cards[ i ];
			cards[ i ] = cards[ rnd ];
			cards[ rnd ] = w;
		}
	}

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

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

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

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

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

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

続きは、以下の記事を参照してください。

自動で神経衰弱を行うJavaのソースコードを紹介しています。興味のある方は、ご覧ください。

2021.03.31

関連コンテンツ

トランプゲームの1つポーカーの役を判定をプログラムを作成してみませんか?。興味のある方は、ご覧ください。

2020.08.27

トランプ(カード)を扱うクラスを紹介しています。

2019.08.05

配列に格納されている数値をランダムに並び替える方法を詳しく解説しています。ソースコード付きです。

2016.01.31

式の値によって処理を分岐する方法を詳しく解説しています。

2016.08.04

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

乱数の意味と、Math.randomメソッドの使い方をソースコードを使って詳しく解説しています。

2015.12.27

1から6のサイコロの目が出る確率を割り出すプログラムの作りかたを解説しています。

2020.05.07

2つのサイコロを振って同じ目が出る確率を割り出すプログラムの作り方を解説しています。

2020.08.25

処理を繰り返すために使用するfor文について解説しています。

2020.03.23

条件式を判断して処理を分岐する方法を詳しく説明しています。

2023.03.20

プログラムの最初に実行されるメソッドは?

2022.12.13

プログラミングで使う変数って何?

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

Javaのプログラムを作ってみませんか?プログラミングに必要なものの用意から実行までを説明しています。

2020.03.23

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

Swingパッケージを使ってグラフィック表示を行う方法を解説しています。

2020.03.23

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

繰り返し処理を使ったJavaのソースコードサンプルを紹介しています。

2020.03.23

配列を使うJavaソースコードを多数紹介しています。

2021.05.18

数学に関係するJavaのメソッドやソースコードなどを紹介しています。

2022.10.25

三角形、台形、円などいろいろな図形の面積を計算するプログラムを紹介しています。詳しくは、記事をご覧ください。

2021.05.18

StringクラスとStringBuilderクラスを利用したプログラミングの仕方を紹介しています。

2016.12.16

Javaを使った簡単な応用プログラム(生年月日から年齢を計算プログラムなど)を紹介しています。

2022.07.07

プログラミング、ITに関する用語をまとめています。

2022.10.17

日本で使われてきた伝統文様「和柄」について解説しています。

2022.07.27

同じ型の変数(データ)を複数個まとめて管理するデータの持ちかたがあります。これが配列です。くわしくは、記事をご覧ください。

2016.01.14

Javaプログラムの構成について解説しています。詳しくは、こちらをご覧ください。

2020.03.23

メソッドの定義方法を詳しく解説しています。Javaのサンプルソースコードを使った説明もあります。

2020.03.23

「ゆるゆるプログラム」のコンテンツを紹介しています。興味のある方はこの記事をご覧ください。

2020.03.23

広告