神経衰弱 その4

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

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

102
103
104
105
106
107
108
109
110
111
112
113
	// 指定した状態の数を戻す
	private static int getStatusNumber( int status  )
	{
		int number = 0;

		for ( int i = 0; i < statuses.length; i++ ) {
			if ( statuses[ i ] == status )
				++ number;
		}

		return number;
	}

引数として与えた状態を持つカードの個数を戻すメソッドです。このメソッドは、まだオープンしていないカードの数を取得したり、全てのカードがペアになっているかの判定に使います。

for文を使って配列statusesの値と引数statusが一致した個数を戻しています。

116
117
118
	// カードを1枚オープン
	private static int openCard()
	{

伏せているカードを1枚オープンするメソッドです。オープンしたカード番号を戻します。(配列添え字ではない)

119
120
121
		// 伏せられたカードの数を取得
		int hidenumber = getStatusNumber( STATUS_HIDE );
		if ( 1 > hidenumber ) return 0;

上記のgetStatusNumberメソッド引数STATUS_HIDEを渡して、伏せているカードの枚数を取得しています。結果はint型変数hidenumberに代入しています。

変数hidenumberが1未満の場合、return文で0を戻します。

123
124
		// 1~hidenumberの乱数を発生
		int rnd =  (int)( Math.random() *  (double)hidenumber ) + 1;

乱数を使って1からhidenumberの値を発生し変数rndに代入しています。変数rndは、伏せているカードの何番目をオープンするかの判定に使います。

126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
		// 伏せられたカードのrnd番目のカードをオープン
		int cardnum = 0;
		for ( int i = 0; i < statuses.length; i++ ) {
			if ( STATUS_HIDE == statuses[ i ] ) {
				--rnd;			
				if ( 0 == rnd ) {
					// 状態を"オープンの状態"に変更
					statuses[ i ] = STATUS_OPEN;
					// カード番号を代入
					cardnum = cards[ i ];
					//記憶を登録
					memory[ i ] = cardnum;
					break;
				}
			}
		}

for文を使って配列statusesの値がSTATUS_HIDEのものを探します。見つかったら変数rndから1を引いていき、rndが0になったときのカードをオープンします。

statuses[ i ]にSTATUS_OPENを、変数cardnumにカード番号cards[ i ]を代入しています。そして、memory[ i ]にcardnumを代入します。これで1度オープンしたカードが記憶されます。

143
144
		// オープンしたカード番号を戻す
		return cardnum;

メソッドの最後に、return文でオープンしたカード番号crdnumを戻します。

148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
	// 記憶したカード番号で隠されているカードをオープン
	private static boolean openMemoryCard( int cardnum )
	{
		for ( int i = 0; i < statuses.length; i++ ) {
			if ( STATUS_HIDE == statuses[ i ] ) {
				if ( cardnum == memory[ i ] ) {
					// 状態を"オープンの状態"に変更
					statuses[ i ] = STATUS_OPEN;
					return true;
				}
			}
		}

		return false;
	}

伏せているカードのうち、指定したカード番号を記憶しているカードをオープンするメソッドです。カードをオープンできた場合はtrueを戻し、オープンできなかった場合はfalseを戻します。

for文を使って配列statusesの値がSTATUS_HIDEのものを探します。さらに指定したカード番号cardnumとmemory[ i ]の値が一致したら、そのカードをオープンします。

statuses[ i ]にSTATUS_OPENを代入しています。

165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
	// "オープン状態"の2枚のカード番号が同じかを判定	
	private static boolean isPair()
	{
		int number, cardnum;

		number = 0;
		cardnum = 0;
		for ( int i = 0; i < statuses.length; i++ ) {
			if ( STATUS_OPEN == statuses[ i ] ) {
				++ number;
				if ( 1 == number ) {
					// 1枚目
					cardnum = cards[ i ]; 
				}
				else {
					// 2枚目
					if ( cardnum == cards[ i ] ) {
						return true;
					}
					break;
				}
			}
		}

		return false;
	}

オープン状態のカードを2枚探し、そのカード番号が一致しているかを判定しています。2つのカード番号が一致している場合はtrueを、違う場合がfalseを戻します。

変数numberは見つけたオープン状態のカード数で、numberが1の場合に変数cardnumにカード番号を代入しています。numberが2の場合に、cardnumとcards[ i ]の一致判定をしています。

193
194
195
196
197
198
199
200
	// 状態の変更(旧状態→新状態)
	private static void replaceStatus( int oldStatus, int newStatus )
	{
		for ( int i = 0; i < statuses.length; i++ ) {
			if ( oldStatus == statuses[ i ] )
				statuses[ i ] = newStatus;
		}
	}

カードの状態を変更するメソッドです。変数oldStatusで与えられた状態を、変数newStatusに変更します。

オープンしたカード(STATUS_OPEN)を伏せる(STATUS_HIDE)などに使います。

関連コンテンツ

自動で神経衰弱を行う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

メソッドを抜けるときに使用するreturn文について説明しています。

2020.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

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

2020.03.23

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

2016.01.14

for文で変数名iがよく使われる理由について説明しています。興味のある方は是非。

2022.08.29

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

2020.03.23

広告