【ACM】UVa 489 刽子手游戏(自顶向下)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/83550077

 【题目】

Hangman Judge是一个猜英文单字的小游戏(在电子字典中常会看到),游戏规则如下:
1、答案单字写在纸上(每个字元一张纸),并且被盖起来,玩家每次猜一个英文字元(letter)。
2、如果这个英文字元猜中(在答案的英文单字中有出现),被猜中的字元就被翻开。例如:答案是book,如果你猜o,book中的两个o就会被视为已猜中。
3、如果这个英文字元未出现在答案的单字中,就会在hangman的图中多加一划。要完成hangman图共需7划,如下图。注意:同一个猜错的字元只能再图上画一划,例如:答案是book,第一次你猜a(未猜中)会在图上画一划,但第二次以后再猜a并不会再多画。
4、如果在hangman图完成之前,玩家已猜中所有答案中的字元,则玩家赢(win)。
5、如果玩家尚未猜中所有答案中的字元而hangman图完成了,,则玩家输(lose)。
6、如果玩家在还没输赢的情况之下就不玩了,那我们说玩家胆小放弃了(chicken out)

 ______   
   |  |     
   |  O     
   | /|\    
   |  |     
   | / \    
 __|_       
 |   |______
 |_________|

你的任务就是要写一个程序根据答案及玩家输入的猜测来判断玩家是赢、输、或放弃。

【输入】

会有好几组测试数据,每一组有3列。第一列为一个数字n,代表第几回合,第二列为这一回合的答案,第三列为这一回合玩家输入的猜测。如果n = -1代表输入结束。

【输出】

请输出每一回合及游戏结果。游戏结果只有三种可能:
You win.
You lose.
You chickened out.
请参考样例输出。

【样例输入】

1
cheese
chese
2
cheese
abcdefg
3
cheese
abcdefgij
-1

【样例输出】
Round 1
You win.
Round 2
You chickened out.
Round 3
You lose.
#include <iostream>
#include <stdio.h>
#include <string.h>
#define maxn 100
int left,chance;//还需要猜测left个位置,错chance次之后就会输 
int win,lose;// win=1表示已经赢了,lose=1表示输了 
char s[maxn],s2[maxn];//答案是字符串s,玩家猜的字母序列是s2 
int main ()
{
	void guess (char ch);
	int rnd;
	while(scanf("%d",&rnd)==1 && rnd!=-1)
	{
		scanf("%s%s",s,s2);
		printf("Round %d\n",rnd);
		win=lose=0;
		left=strlen(s);
		chance=7;
		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");
	}
	return 0;
}
void guess (char ch)
{
	int bad=1;
	for(int i=0;i<strlen(s);i++)
	{
		if(ch==s[i])
		{
			left--;
			s[i]=' ';
			bad=0; 
		}
	}
	if(bad)	chance--;
	if(!chance)	lose=1;
	if(!left)	win=1;
}

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/83550077