Top
プログラム課題集
スロットゲーム
下記実装例はあくまで、実装例です。
この実装内容には問題があります。
ゲームとしての問題(特典がない。例えば、揃った場合に何らかの報酬がない。等)を除いても、問題があります。
例えば、任意の十字キーを押下した場合、「getch」は2回分の入力を拾ってしまいます。
いかにすればこの問題に対処出来るか考えて見て下さい。
#include
<windows.h>
#include
<conio.h>
// 終了フラグ
bool
finFlg =
false
;
// サブスレッド関数
DWORD WINAPI ThreadFunc(LPVOID vdParam)
{
// スロットの値
int
value = 0;
int
tmpValue = 1;
// 受信メッセージ
MSG msg;
// 処理完了まで繰り返す
while
(finFlg ==
false
)
{
// メッセージ受信処理
if
(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
// メッセージ受信がある場合
if
(value < 100)
{
// スロットの値が2桁以下の場合
value = (value + tmpValue) * 10;
}
else
{
// スロットの値が3桁以上の場合(終了処理)
value = value + tmpValue;
finFlg =
true
;
}
}
else
{
// メッセージ受信がない場合
printf("
%d\n
", value + tmpValue);
tmpValue++;
if
(tmpValue >= 10)
{
tmpValue = 1;
}
}
};
return
0;
}
// メイン処理
int
main()
{
// スレッドのID
DWORD dwID;
// スレッド生成
CreateThread(NULL, 0, ThreadFunc, NULL, 0, &dwID);
// 処理完了まで繰り返す
while
(finFlg ==
false
)
{
// 入力待機処理
_getch();
// 生成したスレッドに非同期イベント通知処理
PostThreadMessage(dwID, WM_USER, 0, 0);
};
return
0;
}