2019/08/05 公開
・トランプの操作
トランプ(カード)を扱うクラスを作成しました。
このクラスには、トランプを整列機能(並びを新品の状態にする)、シャッフル機能(ランダムで並び替え)、1~53の番号指定でカードを取得する機能があります。
以下が、そのソースコードです。これは、トランプをシャッフルして、1枚目から53枚目のカードの情報を全て表示するものです。
Cards.java ← クリックしてダウンロードページに移動001: // トランプを操作するクラス 002: class CardsManager { 003: // トランプ配列 004: private int[] cards; 005: 006: // 配列の値 007: // 000 : ジョーカー 008: // 101~113 : スペードの1~13 009: // 201~213 : ハートの1~13 010: // 301~313 : ダイヤの1~13 011: // 401~413 : クラブの1~13 012: 013: // コンストラクタ 014: public CardsManager() 015: { 016: // 配列を作成 017: cards = new int[ 13 * 4 + 1 ]; 018: 019: // 初期化 020: organize(); 021: } 022: 023: 024: // トランプの整列 025: public void organize() 026: { 027: // ジョーカーを格納 028: cards[ 0 ] = 0; 029: 030: for ( int i = 1; i <= 13; ++ i ) { 031: // スペードを格納(添え字:1~13) 032: cards[ i ] = 100 + i; 033: 034: // ダイヤを格納(添え字:14~26) 035: cards[ i + 13 ] = 300 + i; 036: 037: // クラブを格納(添え字:27~39) 038: cards[ i + 26 ] = 400 + i; 039: 040: // ハートを格納(添え字:40~52) 041: cards[ i + 39 ] = 200 + i; 042: } 043: } 044: 045: 046: // トランプのシャッフル 047: public void shuffle() 048: { 049: for ( int i = 0; i < cards.length; ++ i ) { 050: // 0~(配列aryの個数-1)の乱数を発生 051: int rnd = (int)( Math.random() * (double)cards.length ); 052: 053: // cards[ i ]とcards[ rnd ]を入れ替える 054: int w = cards[ i ]; 055: cards[ i ] = cards[ rnd ]; 056: cards[ rnd ] = w; 057: } 058: } 059: 060: 061: // トランプの取得 062: public int getCard( int num ) 063: { 064: // numが、1~53番目以外の場合、-1を戻す 065: if ( ( 1 > num ) || ( 53 < num ) ) return -1; 066: 067: // カードを戻す 068: return cards[ num - 1 ]; 069: } 070: } 071: 072: 073: // メイン 074: public class Cards { 075: public static void main( String[] args ) { 076: // 変数を宣言 077: int card, mark, num; 078: 079: // トランプクラスを作成 080: CardsManager cards = new CardsManager(); 081: 082: // トランプをシャッフル 083: cards.shuffle(); 084: 085: // トランプを順番に表示 086: for ( int i = 1; i <= 53; ++ i ) { 087: // i番目のカードを取得 088: card = cards.getCard( i ); 089: 090: // 結果の表示 091: // マーク 092: mark = card / 100; 093: // 番号 094: num = card % 100; 095: // 表示 096: switch ( mark ) { 097: case 0: 098: // ジョーカー 099: System.out.println( "ジョーカー" ); 100: break; 101: case 1: 102: // スペード 103: System.out.println( "スペードの" + num ); 104: break; 105: case 2: 106: // ハート 107: System.out.println( "ハートの" + num ); 108: break; 109: case 3: 110: // ダイヤ 111: System.out.println( "ダイヤの" + num ); 112: break; 113: case 4: 114: // クラブ 115: System.out.println( "クラブの" + num ); 116: break; 117: } 118: } 119: } 120: }
Cards.javaの出力結果
スペードの1 スペードの11 クラブの10 ジョーカー ハートの12 ダイヤの11 ハートの2 ダイヤの9 スペードの10 : ダイヤの6 ダイヤの7 スペードの6 ダイヤの10 ダイヤの12 クラブの2 ハートの10 スペードの8
この結果から、順番がランダムになったトランプを取り出せたことが確認できます。
それでは、トランプを操作するプログラムのソースコードを解説していきます。
001: // トランプを操作するクラス 002: class CardsManager {
トランプを操作するクラス名を、CardsManagerとしています。
003: // トランプ配列 004: private int[] cards; 005: 006: // 配列の値 007: // 000 : ジョーカー 008: // 101~113 : スペードの1~13 009: // 201~213 : ハートの1~13 010: // 301~313 : ダイヤの1~13 011: // 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: public CardsManager() 015: { 016: // 配列を作成 017: cards = new int[ 13 * 4 + 1 ]; 018: 019: // 初期化 020: organize(); 021: }
クラスのコンストラクタで、クラスの初期化を行っています。53個のint型配列を作成し、organizeメソッドでカード情報を格納しています。
024: // トランプの整列 025: public void organize() 026: { 027: // ジョーカーを格納 028: cards[ 0 ] = 0; 029: 030: for ( int i = 1; i <= 13; ++ i ) { 031: // スペードを格納(添え字:1~13) 032: cards[ i ] = 100 + i; 033: 034: // ダイヤを格納(添え字:14~26) 035: cards[ i + 13 ] = 300 + i; 036: 037: // クラブを格納(添え字:27~39) 038: cards[ i + 26 ] = 400 + i; 039: 040: // ハートを格納(添え字:40~52) 041: cards[ i + 39 ] = 200 + i; 042: } 043: }
トランプを整列させるメソッドです。トランプを新品の状態に戻すイメージです。
ここでの整列は、配列cardsに初期値を代入することです。
046: // トランプのシャッフル 047: public void shuffle() 048: { 049: for ( int i = 0; i < cards.length; ++ i ) { 050: // 0~(配列aryの個数-1)の乱数を発生 051: int rnd = (int)( Math.random() * (double)cards.length ); 052: 053: // cards[ i ]とcards[ rnd ]を入れ替える 054: int w = cards[ i ]; 055: cards[ i ] = cards[ rnd ]; 056: cards[ rnd ] = w; 057: } 058: }
詳細はこちらを参考にしてください。「配列の並び替え」
061: // トランプの取得 062: public int getCard( int num ) 063: { 064: // numが、1~53番目以外の場合、-1を戻す 065: if ( ( 1 > num ) || ( 53 < num ) ) return -1; 066: 067: // カードを戻す 068: return cards[ num - 1 ]; 069: }
指定した番号でカード情報を取得するメソッドです。引数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: for ( int i = 1; i <= 53; ++ i ) { 087: // i番目のカードを取得 088: 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: switch ( mark ) { 097: case 0: 098: // ジョーカー 099: System.out.println( "ジョーカー" ); 100: break; 101: case 1: 102: // スペード 103: System.out.println( "スペードの" + num ); 104: break; 105: case 2: 106: // ハート 107: System.out.println( "ハートの" + num ); 108: break; 109: case 3: 110: // ダイヤ 111: System.out.println( "ダイヤの" + num ); 112: break; 113: case 4: 114: // クラブ 115: System.out.println( "クラブの" + num ); 116: break; 117: }
変数markと変数numの情報を元に結果をコンソール出力しています。
トランプのマークの仕分けには、switch文を使っています。
■関連コンテンツ
ポーカーの役判定 | ポーカーの役を判定 |
神経衰弱 | 1人で神経衰弱 |
配列の並び替え | 配列をランダムに並び替える方法を解説 |
switch文 | 式による処理の分岐に使用するswitch文について解説 |
乱数 randomMath.randomメソッドを使って乱数を発生する方法を解説します。指定範囲の乱数の発生方法も解説しています。 |
|
サイコロの出目確率乱数で1から6の数を発生し、それぞれの数値が出現する回数を調べます。 |
|
ゾロ目の出る確率2つのサイコロの出目を乱数で1から6の数を発生し、出目が同じときの回数と出現率を調べます。 |
|
for文繰り返し処理に使用するfor文をJavaのソースコードを使って説明しています。 |
■新着情報
2022.07.07 | 外部プログラムの実行 | exeファイル実行 |
2022.07.06 | 完全数 | 6=1+2+3 |
■広告