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ソースコード
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
格納する値は整数で、
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(); }
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; } }
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 ]; }
0以上の値が戻って来た場合、カード情報の取得に成功したと判断します。
ここまでが、トランプを操作するクラスCardsManagerの説明です。
073 074
// メイン public class Cards {
クラス名を、Cardsとしています。
075
public static void main( String[] args ) {
076 077
// 変数を宣言 int card, mark, num;
079 080
// トランプクラスを作成
CardsManager cards = new CardsManager();
トランプを操作するクラスCardsManagerを作成しています。
この時点で、CardsManagerのコンストラクタが実行され、トランプの初期化と整列処理が行われます。
082 083
// トランプをシャッフル
cards.shuffle();
085 086 087 088
// トランプを順番に表示 for ( int i = 1; i <= 53; ++ i ) { // i番目のカードを取得 card = cards.getCard( i );
091 092
// マーク
mark = card / 100;
取得したカード情報cardを100で割った値をマークの種類を格納する変数markに代入しています。
mark=0は、ジョーカー
mark=1は、スペード
mark=2は、ハート
mark=3は、ダイヤ
mark=4は、クラブ
093 094
// 番号
num = card % 100;
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; }
トランプのマークの仕分けには、switch文を使っています。
以上です。
トランプに関するコンテンツ
「トランプ」に関係があるコンテンツをまとめています。