ピクチャー ランダム
投稿者 超初心者  (中学生)
投稿日時
2012/9/15 11:36:10
今、VB2010でカードゲームUNOを作ろうとしています。ピクチャーボックスに自分で作成して画像にしたカードをランダムにピクチャーボックスに配置したいのですが、どうすればできますか?また、一度使ったカードはもう使えないというのはどうすれば良いのですか?
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2012/9/15 11:54:56
ランダムなデータの取り扱いについては、過去に何度か話題になっています。
下記のログが参考になるかも知れません。
2009年5月「言いにくいのですが…かぶらない乱数(?)」
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9148
2009年7月「乱数の生成について」
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9206
2009年10月「プログラムについて」
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9420
2010年4月「VB.NETでビンゴゲーム作成」
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9616
下記のログが参考になるかも知れません。
2009年5月「言いにくいのですが…かぶらない乱数(?)」
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9148
2009年7月「乱数の生成について」
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9206
2009年10月「プログラムについて」
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9420
2010年4月「VB.NETでビンゴゲーム作成」
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9616
投稿者 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)を繰り返す
画面へ表示する画像は色と記号からどの画像か分かるよう画像に対応付けしておく必要があります。
カードの情報をどのように扱うか決めないといけないです。
トランプの場合、ジョーカーを除くすべてのカードが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)を繰り返す
画面へ表示する画像は色と記号からどの画像か分かるよう画像に対応付けしておく必要があります。
投稿者 ピクチャー ランダム  (社会人)
投稿日時
2012/9/16 10:06:59
カードは一枚一枚画像を作るのと色と数字を組み合わして作るのではどちらが良いですか?また、組み合わせる方法を教えてください。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2012/9/17 00:20:25
》 ピクチャー ランダム さん
他の人の質問に割り込んではいけません(社会人の肩書で投稿するならなおのこと)。
もしも同一人物なのであれば、質問の途中で(説明なしに)名前を変更しないようにしましょう。
> どちらが良いですか?
データ容量的には、動的に組み合わせて作った方がサイズを小さくできますが、
その方法に悩んで作業が止まってしまうぐらいであれば、とにかくカードの種類分の画像を
手描きで用意してしまうのが、完成までの近道かと思いますよ。
開発段階では、各カードを判読できる程度の大雑把な画像で十分です。そのあと、ゲームが
ある程度仕上がってきてから、きちんとした画像に差し替えていきます。
むしろ、カード情報をどう管理するのか、あるいは、ユーザーにどのように操作させるのかを
作りこむ方が重要なので、そちらを先に仕上げてしまうことをお奨めします。
カードそれぞれに画像を用意しておけば、後から気に入らない絵柄だけを差し替えるのも
容易ですし、そこから発展させて、画像を組み合わせて画像を動的に作ることもできるでしょう。
なお、画像を組み合わたり、文字を描きこんだりするプログラミングについては、
下記のサイトが役に立つと思います。
[.NET Tips] - [画像、印刷編メニュー]
http://dobon.net/vb/dotnet/graphics/index.html
また、カードゲーム作成という事で、下記の記事も参照してみてください。
http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+201207/12070003.txt
http://www.gizcollabo.jp/vbtomo/boards/vbchoshoqa.php?do=spread&num=8253
他の人の質問に割り込んではいけません(社会人の肩書で投稿するならなおのこと)。
もしも同一人物なのであれば、質問の途中で(説明なしに)名前を変更しないようにしましょう。
> どちらが良いですか?
データ容量的には、動的に組み合わせて作った方がサイズを小さくできますが、
その方法に悩んで作業が止まってしまうぐらいであれば、とにかくカードの種類分の画像を
手描きで用意してしまうのが、完成までの近道かと思いますよ。
開発段階では、各カードを判読できる程度の大雑把な画像で十分です。そのあと、ゲームが
ある程度仕上がってきてから、きちんとした画像に差し替えていきます。
むしろ、カード情報をどう管理するのか、あるいは、ユーザーにどのように操作させるのかを
作りこむ方が重要なので、そちらを先に仕上げてしまうことをお奨めします。
カードそれぞれに画像を用意しておけば、後から気に入らない絵柄だけを差し替えるのも
容易ですし、そこから発展させて、画像を組み合わせて画像を動的に作ることもできるでしょう。
なお、画像を組み合わたり、文字を描きこんだりするプログラミングについては、
下記のサイトが役に立つと思います。
[.NET Tips] - [画像、印刷編メニュー]
http://dobon.net/vb/dotnet/graphics/index.html
また、カードゲーム作成という事で、下記の記事も参照してみてください。
http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+201207/12070003.txt
http://www.gizcollabo.jp/vbtomo/boards/vbchoshoqa.php?do=spread&num=8253
投稿者 超初心者  (中学生)
投稿日時
2012/9/17 00:37:06
名前を変えるのを忘れていました。
すみません。
すみません。