一个猜数字的游戏,采用双线程,第一局游戏正常,结束后会弹出是否继续游戏的提示,可是无论是我选择继续还是退出游戏,要么开始死循环,要么就是跳转到请输入一个数,疯狂循环,不会改了
下面是我的代码
是main函数里while写的不对嘛
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
using namespace std;
clock_t Begin, End;
double g_Time;
int g_n, g_num, g_sec, g_flag;
DWORD WINAPI Timer(LPVOID lpParameter)
{
while (g_flag)
{
End = clock();
Sleep(10);
}
return 0;
}
DWORD WINAPI Gamer(LPVOID lpParameter)
{
while (g_flag)
{
cout << "请输入一个数(1-10000):";
cin >> g_n;
if (g_n > g_num)
{
cout << "太高" << endl;
}
else if (g_n < g_num)
{
cout << "太低" << endl;
}
else
{
g_flag = 0;
return 0;
}
}
return 0;
}
class Thread
{
public:
HANDLE h1, h2;
void Create()
{
h2 = CreateThread(NULL, 0, Gamer, NULL, 0, NULL);
h1 = CreateThread(NULL, 0, Timer, NULL, 0, NULL);
}
};
class Game
{
public:
void Play()
{
int op = 0;
g_flag = 1;
srand((unsigned int)time(NULL));
g_num = rand() % 10000 + 1;
Thread T;
cout << "请输入游戏时间(单位为秒):";
cin >> g_sec;
g_Time = 0;
Begin = clock();
T.Create();
while (g_Time < g_sec && g_flag)
{
g_Time = double(End - Begin) / CLOCKS_PER_SEC;
}
if (g_flag == 0)
{
cout << "正确猜出数:" << g_num << endl;
}
else
{
cout << endl
<< "游戏超时,该数字为:" << g_num << endl;
}
}
};
int main()
{
char op;
while (1)
{
Game Gamer;
Gamer.Play();
cout << "游戏结束,输入1退出游戏,输入其它键重新开始。" << endl;
cin >> op;
if (op == '1')
{
break;
}
}
return 0;
}