ページ 11

ランダムに関して

Posted: 2012年10月21日(日) 03:46
by 海Sea
いつも、お世話になっています。

さっそく申し訳ありませんが、今回の質問です。
配列の要素数に対して要素数を超えないように扱うために、
CPUがランダムでプレイヤーの持つ動的配列の要素数から上手く選ばせるには
どうすればいいでしょうか?

トランプなどのカードゲームで、
自分のカードを相手に取らせるのはいいのですが、
現在のカード数を動的配列で扱っているため、
ランダムで自分のカードを取らせる場合に上手く配列の要素を超えないように、
選ばせることができません。

つまり、
playerCard[20]
の場合は、0~19の数で、
playerCard[3]
の場合は、0~2の数で相手にランダムで選ばせたいのですが、
上手い方法が思いつかず悩んでいます。
もし、何かしらありましたら、ご教授頂ければ嬉しいです。
よろしくお願いします。

Re: ランダムに関して

Posted: 2012年10月21日(日) 08:19
by 赤鬼
海Sea さんが書きました:いつも、お世話になっています。

さっそく申し訳ありませんが、今回の質問です。
配列の要素数に対して要素数を超えないように扱うために、
CPUがランダムでプレイヤーの持つ動的配列の要素数から上手く選ばせるには
どうすればいいでしょうか?

トランプなどのカードゲームで、
自分のカードを相手に取らせるのはいいのですが、
現在のカード数を動的配列で扱っているため、
ランダムで自分のカードを取らせる場合に上手く配列の要素を超えないように、
選ばせることができません。

つまり、
playerCard[20]
の場合は、0~19の数で、
playerCard[3]
の場合は、0~2の数で相手にランダムで選ばせたいのですが、
上手い方法が思いつかず悩んでいます。
もし、何かしらありましたら、ご教授頂ければ嬉しいです。
よろしくお願いします。
自分でどこまでやったのか欲しいところですが、簡単な例を挙げると

コード:

int num=rand();
playerCard[num%選ばせたい数(プレイヤーの持っている枚数)];

とかでできるとおもいます。
ただ、rand関数は疑似乱数を返し、その値は固定値ですので、srand関数や秒数入れたりいろいろ処理してください。

Re: ランダムに関して

Posted: 2012年10月21日(日) 11:37
by 海Sea
>赤鬼さん
自分でどこまでやったのか欲しいところですが、簡単な例を挙げると

コード:

int num=rand();
playerCard[num%選ばせたい数(プレイヤーの持っている枚数)];

とかでできるとおもいます。
ただ、rand関数は疑似乱数を返し、その値は固定値ですので、srand関数や秒数入れたりいろいろ処理してください。[/quote]

ありがとうございます。
とりあえずrand関数でプレイヤーの持っている数の値を
出そうとやってみてはいたんですが、
動作が上手くいかずという状態でした。
お答えを参考に作成してみます。