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;
}