Dxライブラリでランダムに画像を配置したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
JJJuto
記事: 29
登録日時: 3年前

Dxライブラリでランダムに画像を配置したい

#1

投稿記事 by JJJuto » 3年前

Dxライブラリにおいて、1つの画像をランダムに複数個描画させるのは、どういったソースを書けばできますか?
1つの画像をa.jpgとして、10個、乱数を用いて、ランダムに配置したいです。

コード:

        int i,n,m,image[9];
	srand((unsigned int)time(NULL));

	for (i = 0; i < 10; i++) {
        n = rand() % 640;
	m = rand() % 480;
		image[i] = LoadGraph(".\\Media\\a.jpg");

		DrawRotaGraph(n, m, 0.2, 0.2, image[i], TRUE);
	}
	
大分省いてますが、こんな感じで書いてみました。
アドバイス、正しいソース等お願いします。

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

Re: Dxライブラリでランダムに画像を配置したい

#2

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

同じ画像を複数回 LoadGraph する必要は、ありません。

コード:

        // 初期化省略

	int image = LoadGraph(".\\Media\\a.jpg");

	// ループ
	while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
	{
	    // 画面を初期化する
	    ClearDrawScreen() ;

            for (i = 0; i < 10; i++) {
                n = rand() % 640;
	        m = rand() % 480;

	        DrawRotaGraph(n, m, 0.2, 0.2, image, TRUE);
	    }

	    // 裏画面の内容を表画面に反映させる
	    ScreenFlip() ;
        }

        // 後始末省略
今回は、ビルドしてないです。
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: Dxライブラリでランダムに画像を配置したい

#3

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

標準のrand関数は、乱数の質が低い可能性があります。
DXライブラリには、GetRandという乱数を取得する関数があります。

コード:

	int image = LoadGraph(".\\Media\\a.jpg");

	// ループ
	while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) {
		// 画面を初期化する
		ClearDrawScreen();

		for (int i = 0; i < 10; i++) {
			int n = GetRand(640 - 1);
			int m = GetRand(480 - 1);

			DrawRotaGraph(n, m, 0.2, 0.2, image, TRUE);
		}

		// 裏画面の内容を表画面に反映させる
		ScreenFlip();
	}
上記のコードでは、毎フレーム画像を表示する位置が変わります。
位置を固定する場合は、事前に画像を表示する位置を決め、保存しておくといいでしょう。

コード:

	int image = LoadGraph(".\\Media\\a.jpg");

	// 画像を表示する位置を決める
	int n[10], m[10];
	for (int i = 0; i < 10; i++) {
		n[i] = GetRand(640 - 1);
		m[i] = GetRand(480 - 1);
	}

	// ループ
	while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) {
		// 画面を初期化する
		ClearDrawScreen();

		// 画像をあらかじめ決めた位置に表示する
		for (int i = 0; i < 10; i++) {
			DrawRotaGraph(n[i], m[i], 0.2, 0.2, image, TRUE);
		}

		// 裏画面の内容を表画面に反映させる
		ScreenFlip();
	}
同じ数値10を何度を使用しているので、定数として定義して使用するとさらに良いでしょう。

コンパイルしてチェックしていないので、間違っていたらごめんなさい。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

JJJuto
記事: 29
登録日時: 3年前

Re: Dxライブラリでランダムに画像を配置したい

#4

投稿記事 by JJJuto » 3年前

できました、ありがとうございます♪

返信

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