抢答比赛游戏
编写程序实现一个抢答控制器游戏。该应用场景适合于解决对等多角色的优先问题的抢占模型。具体实现为,当开始抢答时选手A, B, C几乎同时按下时,系统给出按键最快的玩家编号。
设计任务要求一- :
- 任意时候按下键盘上的’S’,则开始进入抢答, 输出提示抢答开始。5秒的抢
答时间过后则抢答无效,并且输出提示抢答时间到。 - 开始后三个选手 角色可能会几乎同时按下键盘上的’A"B"C’,用来模拟抢答
角色按键。一旦有角色先按下抢答按键,则抢答结束,并输出提示抢到答
题权的角色。 - 需要选择一个能实时检测键盘按键动作事件的Windows系统函数。
设计任务要求二: - 输出抢答调试功能。提示每个角色的抢答按键时间,要求精确到10ms
主函数
int main()
{
char begin; //抢答开始信号
printf("请输入S,发出抢答信号:\n");
scanf("%c",&begin); //输入大写S表示开始抢答
getchar();
if(begin=='S')
{
funtion();
}
return 0;
}
选择胜出选手
void change_funtion(double duration1,double duration2,double duration3)
{
double min;
min = duration1;
if(duration1<duration2&&duration1<duration3)
{
printf( "选手A胜出\n");
printf("抢答所用时间为:%0.2lfS\n",duration1);
}
if(duration2<duration1&&duration2<duration3)
{
printf( "选手B胜出\n");
printf("抢答所用时间为:%0.2lfS\n",duration2);
}
if(duration3<duration1&&duration3<duration2)
{
printf( "选手C胜出\n");
printf("抢答所用时间为:%0.2lfS\n",duration3);
}
}
主要功能实现函数
void funtion()
{
char player1,player2,player3; //参赛选手
char m;
char win;
int i;
double duration1 = 0.0,duration2 = 0.0,duration3 = 0.0,duration_endl = 0.0; // 抢答所用时间
clock_t start,finish1,finish2,finish3,endl;
start = clock(); //发出抢答信号
if(duration_endl<5.0)
{
for(i=0;i<3&&duration_endl<5.0;i++)
{
scanf("%c",&m);
endl = clock();
duration_endl += (double)(endl-start)/(clock_t)(1000);
// getchar();
switch(m)
{
case 'A': player1 = getchar();finish1 = clock();
duration1 = (double)(finish1-start)/(clock_t)(1000);break;
case 'B': player2 = getchar();finish2 = clock();
duration2 = (double)(finish2-start)/(clock_t)(1000);break;
case 'C': player3 = getchar();finish3 = clock();
duration3 = (double)(finish3-start)/(clock_t)(1000);break;
default: printf("输入选手错误\n");break;
}
}
if(duration1>5.0||duration1==0.0)
{
duration1 = 999.0;
printf("选手A超出抢答时间,抢答无效\n");
}
else
printf("选手A所用抢答时间为:%0.2lfS\n",duration1);
if(duration2>5.0||duration2==0.0)
{
duration2 = 999.0;
printf("选手B超出抢答时间,抢答无效\n");
}
else
printf("选手B所用抢答时间为:%0.2lfS\n",duration2);
if(duration3>5.0||duration3==0.0)
{
duration3 = 999.0;
printf("选手C超出抢答时间,抢答无效\n");
}
else
printf("选手C所用抢答时间为:%0.2lfS\n",duration3);
if((duration1>5.0||duration1==0.0)&&(duration2>5.0||duration2==0.0)&&(duration3>5.0||duration3==0.0))
printf("超出抢答时间,全部抢答失败。\n");
else
change_funtion(duration1,duration2,duration3);
}
else
printf("超出抢答时间,全部抢答失败。\n");
输入说明: 发出抢答信号S后,按回车键+选手名称逐个输入参赛选手