はじめて相談させて頂きます。
現在、画面上の(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;
}
画像のランダム表示について
Re:画像のランダム表示について
>動かしてみたところ全てのマスが一緒にチカチカと瞬いてしまいます。
もうちょっと詳しく説明してもらえませんか?
画像が一緒になっているのが、画像がいれかわってちかちかなのか、それとも同じ画像が消えたり表示したりでちかちかなのか。。。
まぁ、ソースコード読むことで言わんとしていることはだいたいわかりました。
原因は、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;
}
もうちょっと詳しく説明してもらえませんか?
画像が一緒になっているのが、画像がいれかわってちかちかなのか、それとも同じ画像が消えたり表示したりでちかちかなのか。。。
まぁ、ソースコード読むことで言わんとしていることはだいたいわかりました。
原因は、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;
}
Re:画像のランダム表示について
レスありがとうございます!
説明が下手で申し訳ありません。
画面全体の画像が一斉に入れ替わってちかちかする状態になっていました。
教えて頂いた通りにGetRandをループ内に入れることでマスごとの表示をバラバラにすることができました。
ありがとうございました。
もう一つわからないことがあるのですが、よろしいでしょうか?
今の状態で、144個のマスで違う画像が表示されるようになりましたが
マスごとに表示された画像が高速で入れ替わってしまっています。
ランダムに表示されたそれぞれの画像を入れ替わらないように静止させたいのですが、どうすればいいのでしょうか。
説明が下手で申し訳ありません。
画面全体の画像が一斉に入れ替わってちかちかする状態になっていました。
教えて頂いた通りにGetRandをループ内に入れることでマスごとの表示をバラバラにすることができました。
ありがとうございました。
もう一つわからないことがあるのですが、よろしいでしょうか?
今の状態で、144個のマスで違う画像が表示されるようになりましたが
マスごとに表示された画像が高速で入れ替わってしまっています。
ランダムに表示されたそれぞれの画像を入れ替わらないように静止させたいのですが、どうすればいいのでしょうか。
Re:画像のランダム表示について
フラグを使ってはいかがですか?
1、グローバル領域にbool randF = false;
(ローカルならstaticつけて)と宣言
2、randF = falseならランダムの処理
3、ランダム処理後randFをtrueに
以上で出来るかと思います。
1、グローバル領域にbool randF = false;
(ローカルならstaticつけて)と宣言
2、randF = falseならランダムの処理
3、ランダム処理後randFをtrueに
以上で出来るかと思います。
Re:画像のランダム表示について
レスありがとうございます。
以下のように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の処理自体が行われなくなりますし…。
やり方が間違っているのでしょうか?
何度もお聞きしてしまい申し訳ありませんが、よろしくお願いします。
以下のように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:画像のランダム表示について
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 文をとりけしてください。)
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 文をとりけしてください。)
