模拟猜单词游戏

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

以上为实现模拟猜单词游戏的详细代码,感兴趣的可以自己动手操作起来!

以上是关于模拟猜单词游戏的主要内容,如果未能解决你的问题,请参考以下文章

《C++》 猜单词小游戏

猜单词小游戏

我想用java做一个猜词游戏。我想在数组中添加更多单词

C++探索之旅第一部分第十一课:小游戏,猜单词

C++探索之旅第一部分第十一课:小游戏,猜单词

返回单词数和每个单词长度 Python 的字典