- 締切済み
C++で画像を被らないようにランダムに表示
初めまして。 現在、C++を勉強しているものです。 配列に収納された画像をランダムにpictureboxに表示させたいです。 しかし、ダブらないようにしたいです。 1枚だけならどこかでソースが載っていたのでそれをコピーしたらいいだけだと思うので問題はないのですが、3枚をランダム表示させ、なおかつ同じ物が表示しないようにしたいのです。 1枚目の画像が決定した後、それ以外の画像からランダムに選択。さらに1枚目・2枚目の画像が決定したらそれ以外の画像からランダムに選択。 初心者の案としては (1)重複なしの乱数を生成 (2)生成された数を配列と参照する (3)参照された画像をpictureboxに表示する こんな事が出来ますか? また、どうしたらいいのでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- okdummy001
- ベストアンサー率41% (5/12)
画像がなんらかのコンテナで管理されていて、配列の添え字でアクセスできるという前提で答えますが、ランダムに添え字を選んでいく途中で、一度選択した添え字を別の「表示済みの画像番号を記録しておくコンテナ」に入れて管理すれば出来ますよね。擬似コード的に以下のような感じでどうでしょう。 deque<Image> images; deque<size_t> ignore; for( deque<Image>::iterator it = images.begin(); it != images.end(); it++ ) { size_t i = SelectRandomImageIndex(); while( find(ignore.begin(),ignore.end(),i) != ignore.end() ) { i = SelectRandomImageIndex(); } DrawImage(); ignore.push_back(i); }
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
配列内の要素をかき混ぜ(デタラメに交換)、アタマから三つを表示する。