Visual C++ Express Edition 2008
DX ライブラリ ver. 3.00 e
Windows Vista 64bit
マウスのクリックに合わせて、時間を記録し保存。
起動時にそれをロードして同じタイミングに画面に時間を表示するプログラム。
になる予定だったのですが、ロードすると途中からデータをリードしてくれません。
たとえば、60個ぐらいクリックすると途中で、全部0になってしまいました。
前半のロード部分付近がいけないと思っているのですが、原因究明のお手伝いお願いします
#include "DxLib.h" #include <deque> #include <fstream> using namespace std; typedef struct{ int x; int y; //座標 int WheelRotVol;//ホイールの回転量 unsigned int Button[8]; //ボタンの押した状態 }Mouse_t; Mouse_t Mouse; int GetHitMouseStateAll_2(Mouse_t *Nezumi){ if(GetMousePoint( &Nezumi->x, &Nezumi->y ) == -1){ //マウスの位置取得 return -1; } int MouseInput=GetMouseInput(); //マウスの押した状態取得 for(int i=0; i<8; i++){ //マウスのキーは最大8個まで確認出来る if( (MouseInput & 1<<i ) != 0 ) Nezumi->Button++; //押されていたらカウントアップ else Nezumi->Button = 0; //押されてなかったら0 } Nezumi->WheelRotVol = GetMouseWheelRotVol() ; //ホイール回転量取得 return 0; } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ ChangeWindowMode(TRUE);//ウィンドウモード if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化 SetMouseDispFlag( TRUE ) ;//マウス表示オン int White = GetColor(255,255,255); int soundHandle = LoadSoundMem("0.ogg"); PlaySoundMem(soundHandle,DX_PLAYTYPE_BACK); deque<int> push_list; ifstream ifs("data.dat"); deque<int> bullets; if(!ifs.fail()){ int size; ifs.read((char*)&size,sizeof(int)); for(int i = 0; i < size; i++){ int dat = 0; ifs.read((char*)&dat,sizeof(int));//ここで、ロードするdatが途中からおかしくなる。 bullets.push_back(dat); printfDx("read %d \n",dat); } } int track = 0; while(ProcessMessage()==0 && ClearDrawScreen()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){ //↑メッセージ処理 ↑画面をクリア ↑ESCが押されていない GetHitMouseStateAll_2(&Mouse); //マウスの入力状態取得 int pos = GetSoundCurrentTime( soundHandle ) ; DrawFormatString(0,0,White,"座標[%d,%d],回転量:%d, 位置 %d",Mouse.x,Mouse.y,Mouse.WheelRotVol,pos); for(int i=0; i<8; i++){ DrawFormatString(0, 20+20*i, White, "ボタン%d:%u", i, Mouse.Button); } if(Mouse.Button[0] == 1){ printfDx("%d\n",pos); push_list.push_back(pos); } if(track < bullets.size() && bullets[track] < pos){ printfDx("%d %d\n",pos,bullets[track]); track++; } ScreenFlip(); } ofstream ofs( "data.dat" ); int size = push_list.size(); ofs.write((const char *)&size,sizeof(int)); for(int i = 0; i < size; i++){ int data = push_list; ofs.write((const char *)&data,sizeof(int)); printfDx("record %d ",data); } ScreenFlip(); WaitKey(); DxLib_End(); return 0; }