1. 程式人生 > >【ACM】UVa 489 劊子手遊戲(自頂向下)

【ACM】UVa 489 劊子手遊戲(自頂向下)

 【題目】

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;
}