题目:猜单词游戏, 游戏规则:计算机想一个单词让玩家猜,玩家每次可以猜一个字母。
如果单词里有那个字母,单词中的所有该字母都算猜对;如果没有那个字母,则猜错一次,最多只能错6次。
注意,猜一个已经猜过的字母也算错。输入给出正确单词和玩家的猜测,判断玩家赢、 输还是放弃。
每组数据包含3行,第1行是游戏编号(-1为输入结束标记),第2行是计算机想的单词,第3行是玩家的猜测。 后两行保证只含小写字母
分析
程序设计遵循两种常见顺序:自顶向下和自底向上 。
自顶向下:先写程序,再写细节,先写伪代码,在写实际程序
关键
- 自顶向下逐步求精
- 每次guess处理猜对的字母
将所有该字母改成空格
- 写程序流程
框架-桩
- 变量定义
代码如下
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define max 110
int len , chance ;
char s[max] ,s2 [max];
int win , lose;
int main()
{
int rnd,i ;
while(scanf("%d %s %s",&rnd,s ,s2)==3&&rnd!=-1)
{
printf("Round %d\n",rnd);
win = lose = 0;
len = strlen(s);
chance = 7;
for(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 ,i ;
for(i = 0;i<strlen(s);i++)
{
if(s[i]==ch)
len--;
s[i] = ' ';//将猜对的字符改成空格
bad = 0;
}
if(bad)
--chance;
if(!chance)
lose = 1;
if(!len)
win = 1;
}