2019.08.05

2025.01.21

トランプの操作

トランプを扱うクラスの作成

トランプ(カード)を扱うクラスを作成しました。

このクラスには、トランプを整列機能(並びを新品の状態にする)、シャッフル機能(ランダム並び替え)、1~53の番号指定でカードを取得する機能があります。

カードの種類と番号は以下のような整数値として扱います。

100の位の値がマークの種類、100未満の値がカードの番号になるようにしています。0はジョーカーです。

000は、ジョーカー
101~113は、スペードの1~13
201~213は、ハートの1~13
301~313は、ダイヤの1~13
401~413は、クラブの1~13

Javaソースコード

以下が、そのソースコードです。

これは、トランプシャッフルして、1枚目から53枚目のカードの情報を全て表示するものです。

Cards.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
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// トランプを操作するクラス
class CardsManager {
	// トランプ配列
	private int[] cards;

	//  配列の値
	//  000 : ジョーカー
	//  101~113 : スペードの1~13
	//  201~213 : ハートの1~13
	//  301~313 : ダイヤの1~13
	//  401~413 : クラブの1~13

	// コンストラクタ
	public CardsManager()
	{
		// 配列を作成
		cards = new int[ 13 * 4 + 1 ];

		// 初期化
		organize();
	}


	// トランプの整列
	public void organize()
	{
		// ジョーカーを格納
		cards[ 0 ] = 0;

		for ( int i = 1; i <= 13; ++ i ) {
			// スペードを格納(添え字:1~13)
			cards[ i ] = 100 + i;

			// ダイヤを格納(添え字:14~26)
			cards[ i + 13 ] = 300 + i;

			// クラブを格納(添え字:27~39)
			cards[ i + 26 ] = 400 + i;

			// ハートを格納(添え字:40~52)
			cards[ i + 39 ] = 200 + i;
		}
	}


	// トランプのシャッフル
	public void shuffle()
	{
		for ( int i = 0; i < cards.length; ++ i ) {
			// 0~(配列aryの個数-1)の乱数を発生
			int rnd =  (int)( Math.random() *  (double)cards.length );

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


	// トランプの取得
	public int getCard( int num )
	{
		// numが、1~53番目以外の場合、-1を戻す
		if ( ( 1 > num ) || ( 53 < num ) ) return -1;

		// カードを戻す
		return cards[ num - 1 ];
	}
}


// メイン
public class Cards {
	public static void main( String[] args ) {
		// 変数を宣言
		int card, mark, num;

		// トランプクラスを作成
		CardsManager cards = new CardsManager();

		// トランプをシャッフル
		cards.shuffle();

		// トランプを順番に表示
		for ( int i = 1; i <= 53; ++ i ) {
			// i番目のカードを取得
			card = cards.getCard( i );

			// 結果の表示
			// マーク
			mark = card / 100;
			// 番号
			num = card % 100;
			// 表示
			switch ( mark ) {
				case 0:
					// ジョーカー
					System.out.println( "ジョーカー" );
					break;
				case 1:
					// スペード
					System.out.println( "スペードの" + num );
					break;
				case 2:
					// ハート
					System.out.println( "ハートの" + num );
					break;
				case 3:
					// ダイヤ
					System.out.println( "ダイヤの" + num );
					break;
				case 4:
					// クラブ
					System.out.println( "クラブの" + num );
					break;
			}
		}
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis Cards.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac Cards.java

実行

C:\talavax\javasample>java Cards

実行結果

スペードの1
スペードの11
クラブの10
ジョーカー
ハートの12
ダイヤの11
ハートの2
ダイヤの9
スペードの10

  :

ダイヤの6
ダイヤの7
スペードの6
ダイヤの10
ダイヤの12
クラブの2
ハートの10
スペードの8

この結果から、順番がランダムになったトランプを取り出せたことが確認できます。

Javaソースコードの解説

それでは、トランプを操作するプログラムソースコードを解説していきます。

001
002
// トランプを操作するクラス
class CardsManager {

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

003
004
005
006
007
008
009
010
011
	// トランプ配列
	private int[] cards;

	//  配列の値
	//  000 : ジョーカー
	//  101~113 : スペードの1~13
	//  201~213 : ハートの1~13
	//  301~313 : ダイヤの1~13
	//  401~413 : クラブの1~13

メンバ変数を宣言しています。int型変数cardsは、カードの情報を格納するもので、ジョーカー1枚とスペード・ハート・ダイヤ・クラブの番号1~13の合計53個(1+4×13)の値を格納します。

格納する値は整数で、

000は、ジョーカー

101~113は、スペードの1~13

201~213は、ハートの1~13

301~313は、ダイヤの1~13

401~413は、クラブの1~13

です。100の位の値がマークの種類、100未満の値がカードの番号になるようにしています。

013
014
015
016
017
018
019
020
021
	// コンストラクタ
	public CardsManager()
	{
		// 配列を作成
		cards = new int[ 13 * 4 + 1 ];

		// 初期化
		organize();
	}

クラスコンストラクタで、クラスの初期化を行っています。53個のint型配列を作成し、organizeメソッドでカード情報を格納しています。

024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
	// トランプの整列
	public void organize()
	{
		// ジョーカーを格納
		cards[ 0 ] = 0;

		for ( int i = 1; i <= 13; ++ i ) {
			// スペードを格納(添え字:1~13)
			cards[ i ] = 100 + i;

			// ダイヤを格納(添え字:14~26)
			cards[ i + 13 ] = 300 + i;

			// クラブを格納(添え字:27~39)
			cards[ i + 26 ] = 400 + i;

			// ハートを格納(添え字:40~52)
			cards[ i + 39 ] = 200 + i;
		}
	}

トランプを整列させるメソッドです。トランプを新品の状態に戻すイメージです。

ここでの整列は、配列cardsに初期値を代入することです。

046
047
048
049
050
051
052
053
054
055
056
057
058
	// トランプのシャッフル
	public void shuffle()
	{
		for ( int i = 0; i < cards.length; ++ i ) {
			// 0~(配列aryの個数-1)の乱数を発生
			int rnd =  (int)( Math.random() *  (double)cards.length );

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

配列cardsの値の順番をランダムに変更しています。

061
062
063
064
065
066
067
068
069
	// トランプの取得
	public int getCard( int num )
	{
		// numが、1~53番目以外の場合、-1を戻す
		if ( ( 1 > num ) || ( 53 < num ) ) return -1;

		// カードを戻す
		return cards[ num - 1 ];
	}

指定した番号でカード情報を取得するメソッドです。引数numに1~53の範囲外の値を指定すると-1を戻すようにしています。

0以上の値が戻って来た場合、カード情報の取得に成功したと判断します。

ここまでが、トランプを操作するクラスCardsManagerの説明です。

次に、クラスCardsManagerを使うソースコードの説明です。

073
074
// メイン
public class Cards {

クラス名を、Cardsとしています。

075
	public static void main( String[] args ) {

このmainメソッドからプログラムを実行します。

076
077
		// 変数を宣言
		int card, mark, num;

このプログラムで使う変数を宣言しています。

079
080
		// トランプクラスを作成
		CardsManager cards = new CardsManager();

トランプを操作するクラスCardsManagerを作成しています。

この時点で、CardsManagerのコンストラクタが実行され、トランプの初期化と整列処理が行われます。

082
083
		// トランプをシャッフル
		cards.shuffle();

shuffleメソッドで、トランプの並びをランダムに変更します。

085
086
087
088
		// トランプを順番に表示
		for ( int i = 1; i <= 53; ++ i ) {
			// i番目のカードを取得
			card = cards.getCard( i );

for文で、トランプの1枚目から53枚目までループを作り、getCardメソッドを呼んでカード情報を取得しています。

091
092
			// マーク
			mark = card / 100;

取得したカード情報cardを100で割った値をマークの種類を格納する変数markに代入しています。

mark=0は、ジョーカー

mark=1は、スペード

mark=2は、ハート

mark=3は、ダイヤ

mark=4は、クラブ

093
094
			// 番号
			num = card % 100;

取得したカード情報cardを100で割った余りをカード番号を格納する変数numに代入しています。

num=0は、ジョーカー

095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
			// 表示
			switch ( mark ) {
				case 0:
					// ジョーカー
					System.out.println( "ジョーカー" );
					break;
				case 1:
					// スペード
					System.out.println( "スペードの" + num );
					break;
				case 2:
					// ハート
					System.out.println( "ハートの" + num );
					break;
				case 3:
					// ダイヤ
					System.out.println( "ダイヤの" + num );
					break;
				case 4:
					// クラブ
					System.out.println( "クラブの" + num );
					break;
			}

変数markと変数numの情報を元に結果をコンソール出力しています。

トランプのマークの仕分けには、switch文を使っています。

以上です。

トランプに関するコンテンツ

トランプ」に関係があるコンテンツをまとめています。

関連コンテンツ

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

2020.08.27

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

2021.03.31

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

2020.05.07

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

2020.08.25

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

2023.03.20

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

2020.03.20

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

2016.08.04

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

2020.03.23

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

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

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

2015.12.27

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

2016.01.31

自然数と整数って何が違う?

2020.03.23

複数の数値の合計値と平均値を計算するプログラムをJavaのソースコードを使って解説しています。

2020.03.23

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

2016.01.14

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

2020.03.23

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

2020.03.23

繰り返し処理の作り方を解説しています。

2016.03.02

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

2022.08.29

割り算で割り切れずに残った端数を剰余(余り)といいます。この剰余の計算をJavaのソースコードを使って解説しています。

2020.03.23

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

2020.03.23

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

2021.03.31

広告