刽子手游戏(Hangman judge,Uva489)
游戏规则,计算机想一个单词让你猜,你每次可以猜一个字母,如果单词里有那个字母,所有该字母都会显示出来,如果没有那个字母
则计算机会在一副“刽子手”画上填一笔,这幅画一共需要7笔就能完成,因此你最多只能错6次。注意猜一个已经猜过的字母也算错。
则计算机会在一副“刽子手”画上填一笔,这幅画一共需要7笔就能完成,因此你最多只能错6次。注意猜一个已经猜过的字母也算错。
在本题中,你的任务是编写一个“裁判”程序,输入单词和玩家的猜测,判断玩家赢了,(You win.)、输了(You lose.)、还是放弃了(You give up.)
每组包含3行,第一行是游戏编号(-1为输入结束标记),第2行是计算机想的单词,第3行是玩家的猜测。后两行保证只含小写字母
错误版本(未符合当出现查询重复字样显示查找错误)
#include<stdio.h>
#include<string.h>
#define maxn 100
char s[maxn],s2[maxn]; //全局变量可减少参数传递的麻烦,但应当少用
int left,chance;
int win,lose;
void guss(char ch){
int bad=1;
for(int i=0;i<strlen(s);i++)
{
if(s[i]==ch) //可能存在出现相同字母解决方法是 判断如果匹配后就覆盖掉
{
left--;
s[i]=' ';
bad=0;
}
if(bad) chance--; //当匹配失败, chance -1
if(!chance) lose=1; //当 chance为0 判定失败
if(!left) win=1; // 当s 字符串匹配完毕,判定成功
}
}
int main (){
int rand;
while(scanf("%d%s%s",&rand,s,s2)==3&&rand!=-1) //一边输入一边处理数据 ,rand=-1 结束程序
{
printf("round %d\n",rand);
win=lose=0; //每次循环都要重置
left=strlen(s);
chance=7; //每次循环都要重置
for(int i=0;i<strlen(s2);i++) //s2 字符串逐一判断
{
guss(s2[i]);
if(lose||win) break;
}
if(win)printf("you win");
else if(lose)printf("you are lose");
else printf("you chickened");
}
return 0;
}
修改版本
#include<stdio.h>
#include<string.h>
#define maxn 100
char s[maxn],s2[maxn]; //全局变量可减少参数传递的麻烦,但应当少用
int left,chance;
int win,lose;
int flag=1;
void guss(char ch){
int bad=1;
for(int i=0;i<strlen(s);i++)
{
if(s[i]==ch) //可能存在出现相同字母解决方法是 判断如果匹配后就覆盖掉
{
left--;
s[i]=' ';
bad=0;
}
if(bad) chance--; //当匹配失败, chance -1
if(!chance) lose=1; //当 chance为0 判定失败
if(!left) win=1; // 当s 字符串匹配完毕,判定成功
}
}
int main (){
int rand;
while(scanf("%d%s%s",&rand,s,s2)==3&&rand!=-1) //一边输入一边处理数据 ,rand=-1 结束程序
{
printf("round %d\n",rand);
win=lose=0; //每次循环都要重置
left=strlen(s);
chance=7; //每次循环都要重置
int len2=strlen(s2);
int cnt=0;
while(cnt<len2) //判断是否存在重复字样
{
for(int i=cnt+1;i<len2;i++)
{
if(s2[cnt]==s2[i])
{
lose=1;
flag=0;
}
}
cnt++;
}
if(flag==1)
for(int i=0;i<strlen(s2);i++) //s2 字符串逐一判断
{
guss(s2[i]);
if(lose||win) break;
}
if(win)printf("you win");
else if(lose)printf("you are lose");
else printf("you chickened");
}
return 0;
}