どうやら創作意欲も復活してきたようなので、麻雀牌
の方は取り敢えず置いておき、先ずはリソースのイメージも整ったトランプカード
を先にやっつけましょうか?(注)
注:改めて書くと思いますが、現在上記54(4種 x 13枚 + Joker + 背景)のビットマップをファイル名のIDでCards.resourcesというC#用のリソースファイルに纏めています。
カードイメージが整ったので「いざ、出陣!」と張り切るのは良いのですが、今回は色々なトランプゲームに対応できるトランプカードゲーム用のを汎用インフラ(DLL)を考えているので、"OOP (Object Oriented Programing)"らしく、じっくりと構成(プログラム構造)を考える必要があります。
こういう場合は「現実のトランプゲームを行う場合の必要なもの、事項、条件をリビュー、分析」してみることが非常に重要だと思います。(注)
注:「私の経験上」の話ですが、紙のアルバムをシミュレートしたAlbumとか、麻雀放浪記をシミュレートしたChincirorinなどで有効でした。
取り敢えず、思いついたことを列挙してみましょう。
(1)先ずはトランプカードが必要ですね。(イメージは出来たので、ソフトウェア的にはこれから作ります。Card クラス?)
(2)トランプカードを使う(表示する)台が要りますね。(CardTable コントロール?-座布団でもよいのですが...)
(3)トランプカードは↑のイメージの様に、クラブ、ダイヤ、ハート、スペードという4つのスート(suit プロパティ?)が1~13(number プロパティ?)まであります。
(4)また、トランプカードは表と裏があり、初期的には隠された状態(裏)で、使われる時に表にされ(Used プロパティ?)、台の上の所定の位置に裏、また表で置かれ(表示(Shown プロパティ?)され)ます。
(5)トランプゲームを始める際にはカードの山(Card クラスのインスタンスの配列?)を「切る(シャッフル)-初期化(Initialization)メソッド?」する必要があります。これはスートと番号順に並んだ53枚のカードをランダム、無秩序に再度並び替えることを意味します。
(6)シャッフル(初期化)されたカードの山は一人ゲームの場合を含め、「誰か(Player or Owner プロパティ?)に配られる」ことからゲームが開始されます。配られただけの状態(Owner プロパティは非null)では、使われていますが(Used プロパティは非null)、まだ表示されず(Shown プロパティは false)、使い切ると捨てられる(Discard プロパティ or Used プロパティ?がfalse)ことになります。
(7)トランプゲーム自体は、固有のルールと勝敗判断で進みますが、それは今回のプログラムには関係ありません。今回のプログラムは「台の上で、トランプカードをシャッフルし、プレーヤーに裏の状態で配り、必要に応じて表を見せ、最後に捨てられる」までを簡単にまとめる(ライブラリー化する)ことが目的です。
以上から「Card クラスのメンバー配列を持つ、CardTableクラスのコントロール(PictureBoxクラスから派生?)を作り、シャッフル、配る、表に返す、捨てる等のメソッドを持たせる」イメージが湧いてきました。しかし、上で書いたプロパティはまだオーバーラップしていそうで、もう少し整理する必要がありそうですね。

