Dxライブラリで模様を作りたい

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

Dxライブラリで模様を作りたい

#1

投稿記事 by JJJuto » 3年前

言葉で説明するのが少し難しいのですが、Dxライブラリを使って、ジャマイカの国旗のような模様を作りたいと思っています。

斜めの線を、中心を軸に時計回りさせる感じです。
また、線が動いた軌跡を虹にしたいです。

コード:

#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
    int i, a, R,O,Y,G,B,A,P;
    ChangeWindowMode(TRUE);
    if (DxLib_Init() == -1) {
        return -1;
    }
    
    R= GetColor(255, 0, 0);
    
    for (i = 0; i < 640; i++){
        for (a = 640; a > 0; a--)
        {
            ClearDrawScreen();
            DrawLine(i, 0, a, 480,R);
            ScreenFlip();
        }
    }
    ScreenFlip();
    WaitKey();
    DxLib_End();
    return 0;
}

上記のようなソースを書きました。(O~Pの色は省略しました)

わからないところとしましては、

①実行すると、(0,0)を軸に線が動いています。これを、上の点は右に向かって、下の点は左に向かって、まるで中心を軸に斜めの線が動いているように見せたい
2重ループではないのでしょうか? その場合、どういったソースにすれば良いか知りたいです。

②軌跡(線の残像)を表示して、色をR,O,Y,G,B,A,P,R,O・・・の順に繰り返したいところです。このとき、塗りつぶしでグラデーションをつけるのではなく、Rの線、Oの線、Yの線・・・と繰り返している感じにしたいです。

説明が下手くそ、DxLibを初めて使うため知識のないこと、大変申し訳ありません。
なお、Java等ではなく、必ずDxLibで書きたいです。
もしわかる方いらっしゃいましたら、教えていただけると嬉しいです。

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

Re: Dxライブラリで模様を作りたい

#2

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

https://ja.wikipedia.org/wiki/%E3%82%B8 ... D%E6%97%97
ジャマイカの国旗 - Wikipedia(ja)

コード:

        const int width = 640;
        const int MAX = 6;
        int i, R[MAX];

        if (DxLib_Init() == -1) {
            return -1;
        }
        {
            ClearDrawScreen();

            R[0] = GetColor(255, 0, 0);
            R[1] = GetColor(255, 255, 0);
            R[2] = GetColor(255, 0, 255);
            R[3] = GetColor(0, 0, 255);
            R[4] = GetColor(0, 255, 255);
            R[5] = GetColor(255, 255, 255);

            int a = 0;
            for (i = 0; i < width; i++) {

                DrawLine(i, 0, width - i, 480, R[a++]);
                if (a > MAX) {
                    a = 0;
                }
            }
            ScreenFlip();
        }

        WaitKey();
        DxLib_End();
こんなんで、どうでせう。
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年前

あたっしゅ さんが書きました:
3年前
こんなんで、どうでせう。
ダメですね。

コード:

                if (a > MAX) {
                    a = 0;
                }
という処理だと、a = MAX の時はそのまま次のループに行き、R[a++]が範囲外へのアクセスになってしまいます。

コード:

                if (a >= MAX) {
                    a = 0;
                }
とするべきでしょう。
もしくは、R[a++]をR[a]として、このif文の代わりに

コード:

                a = (a + 1) % MAX;
とするか。

また、

コード:

SetDrawScreen(DX_SCREEN_BACK); 
をしていないのに

コード:

ScreenFlip();
をしているのも、おかしいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: Dxライブラリで模様を作りたい

#4

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

はぁ、なんか疲れてる...
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

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

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

Re:Re: Dxライブラリで模様を作りたい

#5

投稿記事 by JJJuto » 3年前

お二人ともありがとうございます。いただいたソースを参考にイメージ通りのものができました。

返信

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