現在、多次元配列に動画を格納したものをランダマイズし、それらを再生していくプログラムを書いています。
以前「2次元配列のランダマイズについて」で質問させていただき、その回答を元にランダマイズは行っています。
動画の配列格納およびランダマイズはうまくいくのですが、再生に問題が生じて困っています。
コンパイルエラーは出ないのですが、各動画の冒頭が順に再生され、その時CPU使用率が100%になってしまいます。
ランダマイズ後、最初の動画が終わったら次の動画が再生されるというプログラムにするにはどうしたらよいか。また、CPUの問題はなぜ生じるのか。詳しい方おりましたら、ご教示くださると助かります。
当方、C/C++の基礎知識はあります。
環境は
OS: windows 7 home premium
ライブラリ: DXライブラリ
コンパイラ: VC++ 2008
です。
以下、コードです。
#include "vector"
#include "algorithm"
#include "cstdlib"
#include "ctime"
#include "iostream"
#include "DxLib.h"
#include "string"
using namespace std;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{ ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
int sti[4][6];
sti[0][0] = LoadGraph("t1.avi");
sti[0][1] = LoadGraph("t2.avi");
sti[0][2] = LoadGraph("t3.avi");
sti[0][3] = LoadGraph("t4.avi");
sti[0][4] = LoadGraph("t5.avi");
sti[0][5] = LoadGraph("t6.avi");
sti[1][0] = LoadGraph("t7.avi");
sti[1][1] = LoadGraph("t8.avi");
sti[1][2] = LoadGraph("t9.avi");
sti[1][3] = LoadGraph("t10.avi");
sti[1][4] = LoadGraph("t11.avi");
sti[1][5] = LoadGraph("t12.avi");
sti[2][0] = LoadGraph("t13.avi");
sti[2][1] = LoadGraph("t14.avi");
sti[2][2] = LoadGraph("t15.avi");
sti[2][3] = LoadGraph("t16.avi");
sti[2][4] = LoadGraph("t17.avi");
sti[2][5] = LoadGraph("t18.avi");
sti[3][0] = LoadGraph("t19.avi");
sti[3][1] = LoadGraph("t20.avi");
sti[3][2] = LoadGraph("t21.avi");
sti[3][3] = LoadGraph("t22.avi");
sti[3][4] = LoadGraph("t23.avi");
sti[3][5] = LoadGraph("t24.avi");
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0 ){
srand((unsigned)time(NULL));
int seed = rand();
for(int i = 0; i < 4; i++){
srand(seed);
random_shuffle(sti[i], &sti[i][6]);
}
vector<int> result;
for(int i = 0; i < 4; i++){
result.insert(result.begin(), sti[i], &sti[i][3]);
}
random_shuffle(result.begin(), result.end());
for (vector<int>::iterator it = result.begin(); it != result.end(); it++) {
PlayMovieToGraph(*it);
DrawExtendGraph(0,0,640,480,*it,FALSE);
}
}
DxLib_End() ;
return 0 ;
}