2018年02月21日

VC++でファイル更新待ち

長らく棚上げになっていたファイル更新待ち関数を暫定的に書き換えた、とくに数値はテキトー。忘れても紛失してもいいようにメモしておく、スレッドセーフでもなんでもないトラディショナルC言語的なアプリでもそうしたいときはあるのだ。

// ファイル更新を無限に待つ
// arg:filename rv=0:OK
int waitFileUpdate(char *target){
BOOL b;
DWORD d;
HANDLE hFFCN, hFile;
FILETIME rv, ftbefore, ftafter;
char sDrive[2048], sDir[2048], sFile[2048], sExt[2048], tDir[2048];

hFile = CreateFile( target ,GENERIC_READ,FILE_SHARE_READ,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if( 0==hFile ) return(-1); // ファイルがない場合
GetFileTime( hFile, NULL, NULL, &ftbefore);
CloseHandle( hFile );

//対象ディレクトリ名を作成して監視対象にする
_splitpath(target, sDrive, sDir, sFile, sExt);
if(0==strlen(sDrive)+strlen(sDir)) strcpy(sDir, ".\\");
sprintf(tDir, "%s%s", sDrive, sDir);
hFFCN = FindFirstChangeNotification(
tDir,FALSE,FILE_NOTIFY_CHANGE_LAST_WRITE);
if(INVALID_HANDLE_VALUE==hFFCN) return(-1);

while(1){
//Dir更新待ち
b = FindNextChangeNotification(hFFCN);
if(b==0)return(-2);
//検出事象
d = WaitForSingleObject(hFFCN,INFINITE);
if(d==WAIT_OBJECT_0){
Sleep(50);
// ディレクトリ更新を検出
hFile = CreateFile( target ,GENERIC_READ,FILE_SHARE_READ,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if( 0!=hFile ){ // ファイルがある場合だけ検査
GetFileTime( hFile, NULL, NULL, &ftafter);
CloseHandle( hFile );
if( 0 != CompareFileTime(&ftafter,&ftbefore) ){
// 更新されたのが指定ファイルである
break;
}
}
}else if(d==WAIT_TIMEOUT){ return(-11); // 時間切れ
}else if(d==WAIT_ABANDONED){ return(-12); // 異常終了
}else if(d==WAIT_FAILED){ return(-13); // 異常終了
}else{
return(-21); // 不明なエラー
}
}

b = FindCloseChangeNotification(hFFCN);
if(b==0) return(-3);

return(0);
}
posted by JUD at 01:42| Comment(0) | TrackBack(0) | プログラミング

2018年02月14日

最近プレイ中のゲーム

20180213-3594.png三国志大戦
kroukouがやってるの見ててそこそこ面白そうだったので秋頃に手をつけて、ながらく義勇ロード(シナリオCOM戦)だけやってたけど、年頭あたりから対人戦をボチボチ始めました。
操作がきっちり結果に反映されるのは楽しい。
いまのところ、ほぼ武神デッキ(関羽,馬姫,張苞,伊籍)で済ましてるけど、もう少しプレイヤースキルを積んだら、デッキの工夫をしたいところ。「物理で殴って、回復して粘る」というところから脱却を目指したい。
主に 火曜の昼間と水曜の午前中に出没、五割をキープが目標。
このゲーム(三国志大戦4)の曲も結構好きなんだけど、サントラ出てないんだよなあ。三国志大戦3のサントラは見つけたけど、曲変わってたりするのかな。今度きいてみよう。

20180213-Gothic.pngゴシックは魔法乙女
世間的には今更な感じもあるが、今のところ一番ホット というか楽しんでいる。某氏の「ゴ魔乙の打ち込みやらんか」で誘われたのはきっかけではある。縦スクロールシューティングなど、式神の城III以来ではなかろうか。
シューティングゲームをプレイしているとよく感じる、簡単すぎる序盤を毎回通過しなくてはならないというネガティブ要素がこのゲームにはあまりなくて、面白いステージを繰り返しプレイできる、ということの楽しみを感じている。いやあ、トラディショナルな「攻略したいステージに辿り着くまでの作業」が如何に意欲を削いでいるか、心底わかる。
メインメニュー曲は繰り返し聴いてると少し飽きる感じだけど、シューティングパートの楽曲はいいね。
果たして、二次特有のアレ問題とか、サントラ手に入らねえとか、いろいろな障壁を乗り越えて夏コミにこのネタ出せるのだろうか(笑

モンスターハンターワールド
20180213-MHW.jpg始めて間もないというのに、すでにダレ気味である…。リリース直後のオンライン不具合連発で勢いが削がれたということもあるけど、やっぱり身近にボイチャしながら進められるようなフレがいないとダメよね、っていう典型。野良というか救援も少しやったけど、このゲームは救援呼んだらモンスターが強くなるので、ソロで攻略したほうが楽なんだよなあ。
ゲーム的にはそんなに悪いゲームじゃないと思うんだけど、へたにストーリーがあるせいで、次々とストーリーを進めようとすると装備が整わないので、没入できるストーリーじゃないんだよなあ。そして、ストーリーを進めていかないと狩猟可能なモンスターの種類が増えないので、少しストーリーを進めては装備をちょっと変えまた少し進めて…の繰り返しになってしまってる。俺は作業なら作業、ストーリーならストーリーと分かれていて欲しい人種。
あと、ロードが長い。Pro+SSDでそう思うのだから、そうでない人には相当つらいのではなかろうか。

20180213-KanColle.jpg艦これ
16年の頭から17年の夏までお休みしていたけど、復帰して半年。駆逐艦を除けば、Warspiteと伊13/14以外は前回までのイベントで回収できているので、次の次あたりにはイベントを甲でクリアしたいなあ、という段階。一日一時間以内という範囲で、レベリングと資源改修をしている。まあそれも 録画見たり音楽聴いたりなど ほかの事をしながら、という程度。

ゲームシステムがクソ過ぎて、まじめに取り組めない…。手で任務受領しなきゃならない、古くさいシステム廃止して自動受任にしてくれたら、クソゲーっていうのやめる とは常々言っている。
それと Twitterでも書いたけど、「〜を編成せよ!」「〜で〜に出撃せよ!」の単発任務が大量に残ってしまうため、後発提督ははデイリー開発が8ページ目とかになっちゃって、ページめくりが致命的。新規ユーザーに対する鉄壁の障壁になっている。
posted by JUD at 00:33| Comment(0) | TrackBack(0) | ゲーム

2018年02月01日

MHW(2)

ストーリー進行をコツコツと進めている。わりとゲームに慣れてきた(わりには体調が悪くてあまり進められていない)。
フロンティア民の素直な感想としては、そこそこの防具でもモンスターの即死攻撃はかなり少ない(というかほぼない)けど、行動阻害やスリップダメージ等のハラスメントは多いなあ という感じ。1回の出撃で複数モンスターを相手にすることが多いので、すべての対策を取るというのは難しいのでそういうものだと納得しておこう。

・自動調合については、探索から大型モンスター狩猟が連戦する形になるととても威力が出てくる。採取モーションが超短縮されたので、納刀する武器種だと戦闘中に薬草をもぎ取って自動で回復薬に調合してくれる超便利機能。ハチミツ持ってりゃ自動で回復薬Gになるしね。ON/OFFは使い分けてもいいかも。
・新作はdos系に比べてRキーが2個に増えているので、R1がダッシュ/納刀・R2がガード と操作が分けられたんだけど、R2はストロークが長いキーなのでストレスになる。スレッショルドが調整できればよかったのに。
・モンスターに乗るシステムはあんまり好きじゃないなあ。乗っている間のDPSが低いんだけど、乗ってフィニッシュまで持っていくと長時間ダウンになるので、ダウンとるために乗るっていうプロセスとして前向きになるしかない。トータルではたぶんプラスになるんだろう。
・新しいフィールドが出てくるたびに「〜を調査せよ」っていう任務が出て、出た先で結局大型モンスターを狩猟するクエストに移行するんだけど、最初から狩猟ありきで発注してくれよとは思う。
・大型モンスターの咆哮を ついガードしてしまうんだけど、片手剣だとガードするより放置して耳を塞いだほうが早く復帰できる場合が多い! なんだこれ