乱数でいくつかの弾を同時に落としたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kenzou

乱数でいくつかの弾を同時に落としたい

#1

投稿記事 by kenzou » 2年前

#include <stdio.h>
#include <stdlib.h>
#include <handy.h>

int main()
{
int i;
int x;
int y;
int v;


HgOpen(600, 600);

for (;;)
{
v = rand() % 9;
x = rand() % 600;
for (i= 1 ; i <= 5 ; i++)
{

for (y=650; 0 <= y; y -= v)
{


HgClear();
HgCircle( x, y, 15);
HgSleep(0.05);


}

}
}
HgGetChar();
HgClose();
return 0;
}
自分は、ある簡単なゲームを作ろうと思いまして、パーツ事に作っているんですが、弾を同時に異なった速さで落とす場合の書き方を教えて頂きたいのです。
環境は VS Codeを使っており、handygraphicのライブラリを使っています。

kenzou

Re: 乱数でいくつかの弾を同時に落としたい

#2

投稿記事 by kenzou » 2年前

ちなみに、この上に書いたプログラムでは、1つずつしか落ちてきません

box
記事: 2002
登録日時: 13年前

Re: 乱数でいくつかの弾を同時に落としたい

#3

投稿記事 by box » 2年前

rand()の使い方について、
当方の稚拙な知識では、
乱数の種を初期化してから
rand()を呼ぶ、
というやり方しか知りません。

質問者さんの今のコードには
初期化の部分が見当たらないように
思えますが、そこはそれで
いいんですね?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
あたっしゅ
記事: 663
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: 乱数でいくつかの弾を同時に落としたい

#4

投稿記事 by あたっしゅ » 2年前

> rand()の使い方について、当方の稚拙な知識では、乱数の種を初期化してから
> rand()を呼ぶ、というやり方しか知りません。

疑似乱数の種を初期化しないと、毎回、同じ疑似乱数が発生します。
よって、DeBUG しやすくなります。
疑似乱数の種を初期化するのは、BUG が取れてからでいい、と考えます。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 乱数でいくつかの弾を同時に落としたい

#5

投稿記事 by みけCAT » 2年前

ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。

複数の弾を落とすには、複数の弾の情報を管理しないといけません。
例えばこんな感じでしょうか? (ノーチェックなのでもしかしたら間違っているかもしれません)

コード:

#include <stdio.h>
#include <stdlib.h> 
#include <handy.h>

#define NUM_TAMA 5

int main()
{
    int i;
    int x[NUM_TAMA];
    int y[NUM_TAMA];
    int v[NUM_TAMA];

    HgOpen(600, 600);

    for (;;)
    {
        for (i=0; i < NUM_TAMA; i++)
        {
            v[i] = rand() % 9 + 1;
            x[i] = rand() % 600;
            y[i] = 650;
        }
        for (;;)
        {
            int alive_exists = 0;
            HgClear();
            for (i=0; i < NUM_TAMA; i++)
            {
                if (0 <= y[i])
                {
                    HgCircle( x[i], y[i], 15);
                    y[i] -= v[i];
                    if (0 <= y[i]) alive_exists = 1;
                }
            }
            HgSleep(0.05);
            if (!alive_exists) break;
        }
    }
    HgGetChar();
    HgClose();
    return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る