模拟猜单词游戏
Posted WINNER_QIUQIU
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟猜单词游戏相关的知识,希望对你有一定的参考价值。
最近自学了C语言,完成了模拟猜单词程序,下面我将能够运行出的程序展现出来供和我一样的初学者参考。
一.内容和要求
模拟猜单词游戏包括:单词管理、玩家记录、猜词过程、系统设置等必须完成的基本功能以及成绩计算、猜词时间限制、词库管理等选做的拓展功能。
二.基本要求
-
单词管理:程序中用来做谜题的单词必须存放在磁盘文件中。
-
猜词过程:
i.先请用户输入猜的单词数量,可以有一个默认值
ii.随机抽取单词,对每个单词,系统根据谜底单词长度在屏幕上显示相应个数‘ - ’,假设谜 \\quad 底单词为“hello",则在屏幕上输出’ -----’
iii.玩家输入一个字母进行猜测,如果这个字母不在单词中,系统提示玩家不对;如果猜对 \\quad 字母,比如玩家输入了一个‘ l ',则在屏幕上输入“—ll-”
iv.重复3,直到玩家在规定的次数内猜出了单词或者超过次数游戏失败
v.显示玩家每个单词猜对与猜错次数等统计信息。如果玩家猜出单词,计算成绩,如进入前 \\quad 五名提示玩家并记录存储到记录文件中
vi.询问玩家是否开始新一轮猜词,如果玩家选“否”,则系统退到外面的菜单 -
系统设置:猜词次数可以设为默认值。玩的时候,可以对其进行修改
三.代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
//函数原型声明
void OpenFile(char string[21][11]);
void PlayGame(char wordlist[21][11]);
void StartGame(char wordlist[21][11]);
void Menu();
//声明用户结构体
struct Player
char name[20];
int right;//猜对单词个数
int wrong;//猜错个数
int time;//猜数时间
;
typedef struct Player Player;
Player p[5] = "unknown",0,0,0,"unknown",0,0,0,"unknown",0,0,0,"unknown",0,0,0,"unknown",0,0,0 ;
Player temp;
int right, wrong;
//读取单词库函数
void OpenFile(char string[21][11])//定义单词库中最多拥有21个单词,长度为11
FILE *fp=NULL;
fp = fopen("\\path_name\\data.txt","r");
if (fp==NULL)
printf("单词库为空。\\n");
exit(0);
else
int len,count;
count=0;
char test_a[11];
while(fgets(test_a, 11, fp)!=NULL)
len=strlen(test_a);
test_a[len-1]='\\0';
for(int j_two=0;j_two<len;j_two++)
string[count][j_two] = test_a[j_two];
count++;
int nums;//猜想单词数
void Set()
printf("请输入猜想单词的个数:");
scanf("%d", &nums);
//设置每个单词可以猜多少次
int guesstime;
void SetGame()
printf("设置可猜单词的次数:");
scanf("%d", &guesstime);
//用户猜词过程
right = 0;
wrong = 0;
void PlayGame(char wordlist[21][11])
guesstime = 10;
char guess;//存入用户打入的字母
char guessword[11];//存入用户打入的词
int l;//定义单词长度
int q = 0, x = 0, y = 0;
char WrongGuess[11];//存入用户猜错的字母
int t = 0;//记录错误单词数组的下标
int flag = 0;
int c = 1;//查看是否猜对所有字母
srand(time(NULL));//设置一个随机种子
q = rand() % 21;//随机取出单词
l = strlen(wordlist[q]);//求取出单词的长度
for (int f = 0; f < l; f++)//定义一个空单词,词长与所选单词一致
guessword[f] = '-';
guessword[l] = '\\0';//在字符串结尾添加'\\0'
for(int f=0;f<l;f++)
printf("%c", guessword[f]);//输出“-”
int k,m=1;
for (k = 1; k <= guesstime&&c!=0;k++)//判断是否猜完
flag = 0;
printf("你还有%d次机会!Now k=%d \\n", guesstime - k + 1,k);
getchar();
guess = getchar();
//判断输入的字母是否在单词中
for (int j = 0; j < l; j++)
if (guessword[j] == '-')//判断是否猜过这个字母
if (wordlist[q][j] == guess || (wordlist[q][j] - guess) == 32)//如果单词中有这个字母
guessword[j] = wordlist[q][j];//在空单词中打入这个字母
x++;
flag = 1;
if (flag == 0)//如果单词中没有这个字母
WrongGuess[t] = guess;
t++;
printf("%s", guessword);
if (x > y)
y = x;//如果x>y说明上一个字母猜对了,可以继续猜,不算下一次。
else
m++;
c = strcmp(guessword, wordlist[q]);//比较两字符串是否相等
if (c == 0)
printf("你成功猜出了单词!\\n 正确单词为%s", wordlist[q]);
right++;
else
printf("很遗憾,没猜出...\\n 正确单词为%s", wordlist[q]);
wrong++;
printf("在猜这个单词中,你猜对了%d个字母,猜错了%d个字母。\\n", x, m - 1);
WrongGuess[t] = '\\0';
if(strlen(WrongGuess)>0)
printf("错误字母分别是%s\\n", WrongGuess);
void Input()
printf("请输入您的姓名:");
scanf("%s",temp.name);
void Result()
temp.right = right;
temp.wrong = wrong;
void Compare()
int i=0, j;
for (i = 0; i < 6&&strcmp(p[i].name,"unknown")!=0; i++)
if(temp.right>p[i].right)
for (j = 5; j > i; j--)
p[j]=p[j-1];//后移
p[i]=temp;//插入
return;
else if(temp.right==p[i].right)
if(temp.time<p[i].time)
for (j = 5; j > i; j--)
p[j]=p[j-1];
p[j]=temp;
return;
else if(temp.time>p[i].time)
for(j=5;j>i+1;j--)
p[j]=p[j-1];
p[j]=temp;
return;
p[i]=temp;
return;
//将结果写入txt中
void Record()
int i;
FILE *fp;
fp = fopen("record.txt", "r+");
if (!fp)
printf("游戏记录无法打开!");
exit(1);
fprintf(fp, "名次 姓名 成绩(猜对or猜错) 时间(s)\\n");
for (i = 0; i < 5; i++)
fprintf(fp, "%d %s Right:%d Wrong:%d Time:%d\\n", i + 1, p[i].name, p[i].right, p[i].wrong, p[i].time);
fclose(fp);
//展示结果
void Show()
int i;
FILE *fp;
fp = fopen("record.txt", "r+");
if (!fp)
printf("游戏记录无法打开!");
exit(1);
fprintf(stdout, "名次 姓名 成绩(猜对or猜错) 时间(s)\\n");
for (i = 0; i < 5; i++)
fprintf(stdout, "%d %s Right:%d Wrong:%d %d\\n", i + 1, p[i].name, p[i].right, p[i].wrong, p[i].time);
fclose(fp);
//开始游戏
void StartGame(char wordlist[21][11])
int t1, t2, t;
t1 = time(NULL);
int i;
right = 0;
wrong = 0;
for (i = 0; i < nums; i++)
char str[21][11] = 0 ;
printf("--------------------------------------\\n请输入你要猜的字母,每次一个!\\n");
OpenFile(str);
PlayGame(str);
t2 = time(NULL);
t = t2 - t1;
temp.time = t;
temp.right = right;
temp.wrong = wrong;
Compare();
Record();
printf("\\n");
int main()
int p = 1;
while (p)//使得猜完单词或看完排行榜返回主菜单
Menu();
Record();
return 0;
void Menu()
int choice;
char wordlist[21][11];
system("title 猜字母游戏");
system("color f2");
printf("\\n");
printf("-------------------猜单词游戏---------------\\n");
printf("********************************************\\n");
printf("************ 1 开始游戏 **************\\n");
printf("************ 2 设置游戏 **************\\n");
printf("************ 3 成绩排行 **************\\n");
printf("************ 4 退出游戏 **************\\n");
printf("请输入你的选择:");
scanf("%d", &choice);
while (choice<1 || choice>4)
printf("Please choice 1--4 again\\n");
scanf("%d", &choice);
while(1)
if(choice==1)
Set();
Input();
StartGame(wordlist);
break;
if(choice==2)
SetGame();//调用设置函数
break;
if(choice==3)
Show();
break;
if(choice==4)
exit(0);
以上为实现模拟猜单词游戏的详细代码,感兴趣的可以自己动手操作起来!
以上是关于模拟猜单词游戏的主要内容,如果未能解决你的问题,请参考以下文章