UVa 489 刽子手游戏

时间:2022-01-10 20:02:06

游戏规则,计算机想一个单词让你猜,你每次可以猜一个字母,如果单词里有那个字母,所有该字母都会显示出来,如果没有那个字母
则计算机会在一副“刽子手”画上填一笔,这幅画一共需要7笔就能完成,因此你最多只能错6次。注意猜一个已经猜过的字母也算错。
在本题中,你的任务是编写一个“裁判”程序,输入单词和玩家的猜测,判断玩家赢了,(You win.)、输了(You lose.)、还是放弃了(You chickened out.)
每组包含3行,第一行是游戏编号(-1为输入结束标记),第2行是计算机想的单词,第3行是玩家的猜测。后两行保证只含小写字母。

#include<stdio.h>
#include<string.h>
char s[100],s2[100];
int left,chance;
void guess(char s);
main()
{
    int rnd;
    unsigned int i;
    while(scanf("%d%s%s",&rnd,s,s2)==3&&rnd!=-1)
    {
        chance=7;
        left=strlen(s);
        for(i=0;i<strlen(s2);i++)
        {
            guess(s2[i]);
        }
        printf("Round %d\n",rnd);
        if(!left)                printf("You win.\n");
        else if(chance<=0)         printf("You lose.\n");
        else                     printf("You chickened out.\n");
    }
}

void guess(char c)
{
    int bad=1;
    unsigned int i;
    for(i=0;i<strlen(s);i++)
    {
        if(s[i]==c) {left--;s[i]=' ';bad=0;}
    }
        if(bad) chance--;
}

①首先要注意设置好全局变量。

②strlen()所返回的是无符号值,所以如果int i, i<strlen()会出错,所以在声明时加上unsigned。