投稿者 shu  (社会人) 投稿日時 2012/9/15 16:07:36
まずは
カードの情報をどのように扱うか決めないといけないです。
トランプの場合、ジョーカーを除くすべてのカードが1枚づつしかないので
0~51の数字を各カードに対応付けするという方法でマークや数の情報を吸収できますが、
UNOの場合、同じ色の同じ数字(または記号カード)のカードが2枚あったり、WildCardでは
4枚あったりとすべてを数字に対応させると色と数字を分けたり同じカードの判断をするのが
困難です。
そこで色と記号の情報をもった構造体またはクラスを使用されるのがいろいろな処理をする上で
楽だと思います。

カードゲームを作る場合、すべてのカードの集まりを管理する配列やリストなどを作っておくと
同一札(完全に同じカード)を重複して使わなくてすみます。
UNOの場合108枚あるので108の大きさの配列またはリストを用意されると良いと思います。

カードをランダムに出したいというのは現実の手順ではシャッフルにあたるのでシャッフル用の
処理をつくるとよいと思います。なんでもよいのでばらばらになれば良いということであれば
例えば
(1)0番目の要素と1~107番目のどれかを交換する
(2)1番目の要素と2~107番目のどれかを交換する
というのを最後まで続けると結構ごちゃごちゃになります。

現実のシャッフルに近い混ぜ方とすると
(1)半分位の位置から前半を最後部におく(後ろが詰まるように)
(2)残りの半分位の位置から前半を(1)の前に置く
(3)さらに残りの半分位の位置から前半を(2)の前に置く
(4)というようにして適当なところで残ったカードを一番前に置く
という処理をすると実際に近い混ざり方になります。
これを実現するにはもうひとつシャッフル用の配列またはリストを用意するとやりやすいです。

両手でばらばらとするシャッフルなら
(1)まず2つに分ける(A、Bとする)
(2)Aから何枚かとって新しいリスト(Cとする)に追加
(3)Bから何枚かとってCに追加
(4)A,Bがすべて終わるまで(2)と(3)を繰り返す


画面へ表示する画像は色と記号からどの画像か分かるよう画像に対応付けしておく必要があります。