既に排出したブロックを記録しておいて、7個全部排出するまで同じ種類のブロックを
排出しないようにすれば「7種1巡」が実現できます
( 下記のサンプルでは既に排出したブロックの番号を UseBlockNo配列に記録して、
同じブロックが出力されないようにするための処理に使用しています )
#include "DxLib.h"
int UseBlockNoNum = 0 ;
int UseBlockNo[ 7 ] ;
int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0;
int time = 0;
int r = 0;
int GetBlockNo()
{
int i, RandBlockNo ;
// 既に 7 つ出力していたらエラー
if( UseBlockNoNum >= 7 )
{
return -1 ;
}
do
{
// ランダムなブロック番号を取得
RandBlockNo = GetRand( 6 ) + 1 ;
// 既に使われたブロック番号だったら do 〜 while ループから抜けられない
// ( 既に使われていたブロック番号だった場合は i が UseBlockNoNum になる前に for ループを抜けてしまうため )
for( i = 0 ; i < UseBlockNoNum && UseBlockNo[ i ] != RandBlockNo ; i ++ ){}
}while( i != UseBlockNoNum ) ;
// 使用したブロック番号を保存
UseBlockNo[ UseBlockNoNum ] = RandBlockNo ;
// 使用したブロック番号の数を増やす
UseBlockNoNum ++ ;
// ランダムなブロック番号を返す
return UseBlockNo [ UseBlockNoNum - 1 ] ;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
ChangeWindowMode(TRUE);
SRand(GetNowCount());
if (DxLib_Init() == 1) return -1;
while (!ProcessMessage()) {
SetDrawScreen(DX_SCREEN_BACK);
ClearDrawScreen();
time++;
if (time == 1)a = GetBlockNo();
if (time == 2)b = GetBlockNo();
if (time == 3)c = GetBlockNo();
if (time == 4)d = GetBlockNo();
if (time == 5)e = GetBlockNo();
if (time == 6)f = GetBlockNo();
if (time == 7)g = GetBlockNo();
DrawFormatString(0, 0, GetColor(255, 255, 255), "%d %d %d %d %d %d %d",a,b,c,d,e,f,g);
ScreenFlip();
}
DxLib_End();
return 0;
}