刽子手游戏(Hang man Judge, UVa 489)(C语言)

/*
刽子手游戏(Hang man Judge, UVa 489)

一款猜单词游戏:计算机想一个单词让你猜,你每次可以猜一个字母。
如果单词没有那个字母,记错一次,只能错6次。
注意:猜一个已经猜过的字母也算错

本题中,你的任务是担任"裁判"程序,输入单词和玩家的猜测,判断玩家赢了(You win.)、输了(You lose.) 、还是放弃了(You chickened out.)。
每组数据包含3行,第一行是游戏编号(-1为输入结束标记),第二行是计算机想的单词,第三行是玩家的猜测。
后两行保证只含小写字母。

样例输入:
1
cheese
chese
2
cheese
abcdefg
3
cheese
abcdefghij
-1

样例输出:
Round 1
You win.
Round 2
You chickened out.
Round 3
You lose.

*/

#include<stdio.h>
#include<string.h>
#define maxn 100
char s1[maxn], s2[maxn];
int left, chance;        //  还需要猜 left 个位置 ,还有 chance 次机会 
int win, lose;           // win=1表示赢了  lose=1表示输了 

void guess(char m)
{
    
    
	int result;
	for(int i = 0; i < strlen(s1); i++ ) {
    
    
		if(m == s1[i]) {
    
    
			left--;
			s1[i] = ' ';
			result = 0;
		}
	}
	if(result) --chance;
	if(!chance) lose = 1;
	if(!left) win = 1;
}

int main()
{
    
    
	int rnd;   // 回合数
	while(scanf("%d%s%s", &rnd, s1, s2) == 3 && rnd != -1) {
    
    
		printf("Round %d\n", rnd);
		win = lose = 0;		// 每一组都要初始化 
		left = strlen(s1);
		chance = 7;      // 可以错6次,共有七次机会   第七次错了便是输了
		
		for(int i = 0; i <= strlen(s2); i++) {
    
    
			guess(s2[i]);       //猜一个字母 
			if( win || lose )    //检查状态 
				break;
		} 
		
		if(win) printf("You win.\n");
		else if(lose) printf("You lose.\n");
		else printf("You chickened out.\n"); 
		
		printf("\n");
	} 
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/KennGum/article/details/106579344