画像のランダム表示について

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

画像のランダム表示について

#1

投稿記事 by wm » 15年前

はじめて相談させて頂きます。

現在、画面上の(30, 30)から(450, 450)までの部分を35pixelごとの12*12マスに分け、
そのマスそれぞれに9個に分割して読み込んだブロックの画像(drop.png)をランダムで表示させようとしています。
理想では144個のバラバラな画像が表示されるようにしたいのですが、
動かしてみたところ全てのマスが一緒にチカチカと瞬いてしまいます。
原因が分からないので、お気づきになったことがありましたら教えて頂けますでしょうか?
よろしくお願い致します。

以下ソースになります。

int ScreenDraw() //画像処理
{
//画像ハンドルの宣言
int BG1, BG2, BG3, BG4, BG5; //背景
int drop[9]; //ブロック

//画像の読み込み
BG1 = LoadGraph("graph/bg1.jpg");
BG2 = LoadGraph("graph/bg2.jpg");
BG3 = LoadGraph("graph/bg3.jpg");
BG4 = LoadGraph("graph/bg4.jpg");
BG5 = LoadGraph("graph/bg5.jpg"); //ここまで背景
LoadDivGraph("graph/drop.png", 9, 3, 3, 35, 35, drop); //ブロック

//背景画像の表示
DrawGraph(0, 0, BG1, TRUE);
DrawGraph(30, 0, BG2, TRUE);
DrawGraph(30, 450, BG3, TRUE);
DrawGraph(450, 30, BG4, TRUE);
DrawGraph(30, 30, BG5, TRUE);

//ブロックの初期表示
int masume[12][12]; //ブロックを置くマス目
int i, j, a, x, y;
a= GetRand(8); //ランダム
x= 30; //座標
y= 30; //座標

for(i=0; i<12; i++)
{
for(j=0; j<12; j++) //初期表示
{
DrawGraph(x, y, drop[a], TRUE);
x=x+35;
}
x=30;
y=y+35;
}

return 0;
}

Ma

Re:画像のランダム表示について

#2

投稿記事 by Ma » 15年前

>動かしてみたところ全てのマスが一緒にチカチカと瞬いてしまいます。
もうちょっと詳しく説明してもらえませんか?
画像が一緒になっているのが、画像がいれかわってちかちかなのか、それとも同じ画像が消えたり表示したりでちかちかなのか。。。




まぁ、ソースコード読むことで言わんとしていることはだいたいわかりました。
原因は、GetRand を1ループにつき1回しかしていないことです。
マスごとに違う画像にしたいなら、1ループで144回やらないといけないはずですよ?


つまりこう

for(i=0; i<12; i++)
{
for(j=0; j<12; j++) //初期表示
{
a= GetRand(8); //ランダム
DrawGraph(x, y, drop[a], TRUE);
x=x+35;
}
x=30;
y=y+35;
}

wm

Re:画像のランダム表示について

#3

投稿記事 by wm » 15年前

レスありがとうございます!

説明が下手で申し訳ありません。
画面全体の画像が一斉に入れ替わってちかちかする状態になっていました。
教えて頂いた通りにGetRandをループ内に入れることでマスごとの表示をバラバラにすることができました。
ありがとうございました。

もう一つわからないことがあるのですが、よろしいでしょうか?
今の状態で、144個のマスで違う画像が表示されるようになりましたが
マスごとに表示された画像が高速で入れ替わってしまっています。
ランダムに表示されたそれぞれの画像を入れ替わらないように静止させたいのですが、どうすればいいのでしょうか。

猫旅

Re:画像のランダム表示について

#4

投稿記事 by 猫旅 » 15年前

フラグを使ってはいかがですか?

1、グローバル領域にbool randF = false;
  (ローカルならstaticつけて)と宣言
2、randF = falseならランダムの処理
3、ランダム処理後randFをtrueに

以上で出来るかと思います。

wm

Re:画像のランダム表示について

#5

投稿記事 by wm » 15年前

レスありがとうございます。

以下のようにboolを使ってみたのですが、うまくいきません。

bool randF = true;

if(randF = true)
{
for(i=0; i<12; i++)
{
for(j=0; j<12; j++) //初期表示
{
a= GetRand(8); //ランダム処理
DrawGraph(x, y, drop[a], TRUE);
x=x+35;
}
x=30;
y=y+35;
}
randF = false;
}

trueとfalseを入れ替えるとforの処理自体が行われなくなりますし…。
やり方が間違っているのでしょうか?
何度もお聞きしてしまい申し訳ありませんが、よろしくお願いします。

ランド

Re:画像のランダム表示について

#6

投稿記事 by ランド » 15年前

if文の中が = 1個になってるみたいです。 画像

Ma

Re:画像のランダム表示について

#7

投稿記事 by Ma » 15年前

static bool randF = true;
for(i=0; i<12; i++) {
for(j=0; j<12; j++){
if(randF == true){
a= GetRand(8);
randF = false;
}
DrawGraph(x, y, drop[a], TRUE);
x=x+35;
}
x=30;
y=y+35;
}
if(!randF && GetRand(50) == 0)
randF = true;


for文の実行順番とか理解していますか?
そもそも、インデントされていないのが問題です。
もし、しっかりどのようにプログラムが流れるのか把握していないのなら
入門サイト等を読むなどして基本を学習しなおしましょう。

追記
(↑のプログラムは一定の確率で画面が変わります。静止させたいのなら 最後の if 文をとりけしてください。) 画像

閉鎖

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