本人代码新手orz,第一次发帖来记录,如有错误请指正!
要求:写一个猜单词游戏的程序。在程序中,计算机首先从一组可能的单词中随机挑选单词。然后输出一行破折号,每个破折号对应于单词中的一个字母,让玩家猜其中的字母。如果玩家猜到的字母就是单词中的字母,单词中出现这个字母的正确位置上就会显示这个字母,其他以前几轮猜中的字母也会显示在划线上。如果猜的字母不在单词中,则发出“嘟”的报警声。玩家继续猜字母直到玩家成功猜中了单词中的所有字母或玩家猜错了8次,这两种情况下游戏结束。
提示:
1) 定义一个字符串数组
char *words[8]={"love", "china", "how", "are", "you", "name", "zhang", "gang"};
生成一个随机数,从中选取一个单词,作为要猜的单词。
2)发出“嘟”的声音 putchar('\007');
3)假设猜的单词里面没有重复的字母
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void getstring(char sguess[50]);
void getstring(char sguess[50])//得到要猜的字符数组
{
//以下是单词库
char str[][50]={"love", "china", "how", "are", "you", "name"};
//随机指定一个单词放到sguess内
srand((unsigned)time(NULL));
strcpy(sguess,str[rand()%6]);
}
int main()
{
char sguess[50];
getstring(sguess);
int len=strlen(sguess);
printf("(答案是“%s”)\n",sguess);
char wordguessnow[50];//初始化空单词
for(int i_2=0;i_2<len;i_2++)
wordguessnow[i_2]='-';
int count=0;//记录已猜错次数
int flag1=1;//记录是否全是破折号
while(count!=8&&flag1!=0)
{
flag1=0;
for(int i_4=0;i_4<len;i_4++)
{
if(wordguessnow[i_4]=='-')
flag1=1;//有破折号
}
if(flag1==0)
exit(0);//wordguessnow内若已经无破折号则结束程序
char character;
printf("你输入了:");
scanf("%c",&character);
fflush(stdin);//刷新缓冲区,上次输入留下了'\n'
//记录sguess内是否含输入的character
int right=0;
for(int i_1=0;i_1<=len;i_1++)
{
if(character==sguess[i_1])
{
right=1;
}
}
if(right==1)//含有character
{
for(int i_3=0;i_3<len;i_3++)
{
if(character==sguess[i_3])
{
wordguessnow[i_3]=character;
printf("word:%s\n",wordguessnow);
}
}
}
else//不含character
{
count+=1;
printf("word:%s\n",wordguessnow);
putchar('\007');
}
}
if(count==8)
printf("你已经猜了八次,游戏失败");
return 0;
}