C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 乱数を利用したゲーム [1]


(過去ログ 117 を表示中)

[トピック内 25 記事 (21 - 25 表示)]  << 0 | 1 >>

■68926 / inTopicNo.21)  Re[17]: 乱数を利用したゲーム
  
□投稿者/ shu (428回)-(2013/11/25(Mon) 11:46:45)
No68917 (hi* さん) に返信

魔界の仮面弁士 さんがフォローしてくれていますが

今回の場合、重複というのは2通りあります。

1つは各回で1から4がランダムに並び変わる必要がある。
1から4の数字を並び替えているだけなので重複は当然ないです。

もう1つは前回、前々回などとのパターンが一致しない。
2回連続で1,3,4,2とならない等

どこまで必要なのでしょうか?各回での話なら既出の通りです。

引用返信 編集キー/
■68931 / inTopicNo.22)  Re[1]: 乱数を利用したゲーム
□投稿者/ 翁名 (1回)-(2013/11/25(Mon) 19:30:49)
No68874 (hi* さん) に返信

貴殿は今プログラミングに夢中になっておられると思います。
そのことはとても貴重な体験であり、きっと今後5から6年後に振り返り見るとそのことを身にしみて感じられると思います。
人生は長いようで短い。短いようで長いのです。

目標とするアプリを早く完成させたいと気持ちははやると思いますが、今夢中になって取り組んでいるその気持ちを大切にしてほしいと願っております。
引用返信 編集キー/
■68935 / inTopicNo.23)  Re[15]: 乱数を利用したゲーム
□投稿者/ Jitta (108回)-(2013/11/25(Mon) 22:28:12)
Jitta さんの Web サイト
No68907 (hi* さん) に返信
> ■No68906 (shu さん) に返信
>
> 「割り当てた数字」と、「他のボタンが表示している数字」を知る必要がありそうです。
> と解答していただいたものですよね?
>
> そのやり方がいまいちわかりません。

 難しいお願いかもしれませんが、「どのように考えて、こうした」というところを教えてください。
No 68882 に、

>  他人が質問に答えられるのは、情報があるからです。
> 情報によって、答えが取り得る範囲を狭められるからです。

と書きました。「どのように考えたか」というのは、範囲を狭めるための情報です。
しかし、多くの人が、その情報を提供してくれません。
できれば、どういう情報を得、それをどのように考えたのか、教えていただきたいです。


> 今困っているのが、4つのボタンに表示する乱数を4つともかぶらないようにさせたいのですが、

shuさんから、 No 68888 で、回答が出ています。
リンク先の 2013/11/12 12:27:57 の方法が、「ランダムな2枚を入れ替える」方法で、一番簡単でしょう。
「1 2 3 4 5 6 7 8 9 0」の中から、たとえば 4 と 9 を取り出して、入れ替えます。
「1 2 3 9 5 6 7 8 4 0」となります。これを適当な回数繰り返せば、ランダムに並びます。
その後、前から順番に参照すれば、「0〜9の数を、重ならないようにランダムに表示する」ことができます。

つまり、「ばらばらに表示しよう」と考えるから、難しくなります。
「ばらばらになったものを、順番に表示しよう」
→「順番になっているものをばらばらにしよう」
→「ばらばらにする、とは?」
→「2つの順番を入れ替えることを何回か実行すれば、ばらばらになる」
のように考えます。

 しかし、これは、イメージしにくいと思います。
ですから、違う方法で実現してみます。

 まず、コンピュータにさせたいことを、整理します。
「ボタン1〜4に、1〜4の数字を、重ならないように表示する」です。
これを実現する手順を、愚直に考えます。

ボタン1に、1〜4のうちのどれかを表示する
ボタン2に、1〜4のうちのどれかで、ボタン1で表示していないものを表示する
ボタン3に、1〜4のうちのどれかで、ボタン1〜2で表示していないものを表示する
ボタン4に、1〜4のうちのどれかで、ボタン1〜3で表示していないものを表示する

ここで、「ボタン1〜nで表示していないもの」としましたが、これを、
「これまでに表示していないもの」とすると、どうでしょうか。

ボタン1に、1〜4のうちのどれかで、これまでに表示していないものを表示する
ボタン2に、1〜4のうちのどれかで、これまでに表示していないものを表示する
ボタン3に、1〜4のうちのどれかで、これまでに表示していないものを表示する
ボタン4に、1〜4のうちのどれかで、これまでに表示していないものを表示する

全てのボタンに同じ条件が適用できました。
そうすると、for 文を使って繰り返せばできそうです。
では、「これまでに表示していないもの」をどうすればいいでしょうか。
「これまでに表示したもの」を覚えておいて、生成した乱数がその中にあるかどうか、確認すればいいでしょう。

乱数を作る
これまでに表示した乱数と比較する
 これまでに表示していれば、乱数を作り直す
ボタンに表示する
4回繰り返す



 おそらく、「ばらばらの数字を表示する方法」を考え、その考えを展開できなかったのだと思います。
プログラムというのは、問題解決の方法です。
問題を考えていては、解けません。
「そのためには、何が必要か」「何が分かれば、この問題が解けるか」「類似した問題はないか」
というところを考えます。

引用返信 編集キー/
■68981 / inTopicNo.24)  Re[16]: 乱数を利用したゲーム
□投稿者/ shu (432回)-(2013/11/27(Wed) 09:09:00)
No68935 (Jitta さん) に返信

> 乱数を作る
> これまでに表示した乱数と比較する
>  これまでに表示していれば、乱数を作り直す
> ボタンに表示する
> 4回繰り返す
>
この方法は今回の4つ位の数であればそれほど問題にならないのですが
数が多い場合にはループが終わらなくなる可能性が高い方法なので避けた方が良いです。

この方法を基にするなら

(1) 1から4のリストを作成
(2) 1つ目を乱数を0から3を発生させそのインデックス位置の数を選ぶ
(3) 1つ目のインデックス位置の数をリストから削除
(4) 2つ目の乱数を0から2を発生させそのインデックス位置の数を選ぶ
(5) 2つ目のインデックス位置の数をリストから削除

これを4つ目まで繰り返すというやり方が近いかと思います。ここに書いた方法では
3とか2という固定的な数ですが実際にはlist.Count-1とすることによりループに
することが出来ます。

引用返信 編集キー/
■69028 / inTopicNo.25)  Re[17]: 乱数を利用したゲーム
□投稿者/ Jitta (114回)-(2013/11/28(Thu) 21:11:48)
Jitta さんの Web サイト
No68981 (shu さん) に返信
> この方法は今回の4つ位の数であればそれほど問題にならないのですが
> 数が多い場合にはループが終わらなくなる可能性が高い方法なので避けた方が良いです。

 ご指摘ありがとうございます。今回は、あえて、このやり方にしておきました。
先に、「プログラムは、あなたがしたいことを、コンピューターにさせるための命令書です。」
と書きました。「私がしたいことは、何か?」を考えると、この方法になるかと思ったからです。

> (1) 1から4のリストを作成
> (2) 1つ目を乱数を0から3を発生させそのインデックス位置の数を選ぶ
> (3) 1つ目のインデックス位置の数をリストから削除
> (4) 2つ目の乱数を0から2を発生させそのインデックス位置の数を選ぶ
> (5) 2つ目のインデックス位置の数をリストから削除

投稿の原稿には、こっちで書いていました。
読み直していて、「1から4のリストを作成」には、考え方の転換が必要だと思いました。
「これまでに表示していないものを表示する」から、
「表示するもののリストを作り、表示したものを引く」に、転換しなければなりません。
shuさんが既に示されている URL を解決策と気づかなかったのは、
この転換ができていないからかな、と思いました。

引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -