这是一个用c控制台写的简易hangman小游戏

ide vs2019

// 2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include "pch.h"
#include 
#include

#define random(x) (rand()%x)//定义随机数范围

#define word_const_max 20//最大单词数量
#define zm_max 9        //最大字母数量

char word[word_const_max][zm_max] =  //词库
{
    "hangman",
    "book",
    "english",
    "math",
    "fox",
    "goat",
    "bear",
    "girl",
    "apple",
    "body",
    "colour",
    "book",
    "pink",
    "purple",
    "orange",
    "brown",
    "black",
    "son",
    "woman",
    "haibara"

};

int word_const = 0;       //第n个单词
int word_len;             //单词长度
char buff[zm_max];        //单词缓存
char input[zm_max];          //输入正确的
char miss[7];             //输入错误的buff 最多7次
int zq_cishu = 0;         //真确字母的数量
int erro_cishu = 0;       //输入错误次数
char play = 0;            //游戏模式

int word_to_buff(int a)   //单词写进buff
{
    //strlen
    int b=0,c;
    while (word[a][b]!=""[0])//''
    {
        buff[b] = word[a][b];
        b += 1;                 //写入同时顺便记录单词长度   
    }
    //strcpy(input, "");
    for (c = 0; c < b; c++)     //根据长度初始化输入buff
    {
        input[c] = " "[0];      //初始化给空格
    }
    return b;                   //返回单词长度
}

void draw_man(int a)             //画人
{
    switch (a)
    {
    case 0:
        printf(" +---+n     |n     |n     |n    ===n");
        break;
    case 1:
        printf(" +---+n 0   |n     |n     |n    ===n");
        break;
    case 2:
        printf(" +---+n 0   |n |   |n     |n    ===n");
        break;
    case 3:
        printf(" +---+n 0   |n/|   |n     |n    ===n");
        break;
    case 4:
        printf(" +---+n 0   |n/|\  |n     |n    ===n");
        break;
    case 5:
        printf(" +---+n 0   |n/|\  |n/    |n    ===n");
        break;
    case 6:
        printf(" +---+n 0   |n/|\  |n/ \  |n    ===n");
        break;
    default:
        break;
    }
}



void dis_word()                        //显示已输入正确的字母
{
    int a;
    printf("Word: ");
    for (a = 0; a < word_len; a++)
    {
        if (input[a] != " "[0])
        {
            printf("%c ", input[a]);
        }
        else
        {
            printf("_ ");
        }
    }
    printf("n");
}

char cma(char b)                     //数据处理
{
    int a,c=0,d=0;
    for (a = 0; a < word_len; a++)   //检查这个字母是否输入过
    {
        if (b == input[a])
        {
            d = 1;
        }
    }
    if (d == 0)
    {
        for (a = 0; a < word_len; a++)//对比buff有没有这个字母
        {
            if (b == buff[a])         //如果有
            {
                input[a] = b;         //字母赋给input缓存的对应位置
                zq_cishu += 1;        //正确输入+1
                c = 1;                //正确输入标记
            }
        }
    }

    if ((c == 0))                      //没一个字母对的上
    {
        erro_cishu += 1;               //错误计数+1
    }
    if (zq_cishu >= word_len)          //真确数等于单词长度就是胜利
    {
        return 1;
    }
    if (erro_cishu >= 6)
    {
        return 2;                      //错误次数大于最大次数失败
    }
    return 0;
}
int main()
{
    char getword;
    char jg;
    printf("%snn",word[0]);              //显示游戏名字

    while (1)
    {                                            //游戏初始化
        srand((int)time(0));                    //设置随机数种子
        word_const = random(word_const_max);    //使用第n个单词
        erro_cishu = 0;                             //清空错误计数
        zq_cishu = 0;                            //清空正确次数
        word_len = word_to_buff(word_const);    //读取单词长度并载入buff
        //printf("%dn",word_len);    
        draw_man(erro_cishu);                    //画个人
        dis_word();                                //显示正确字符
        play = 1;                                //游戏开始
        while (play)
        {
            //fflush
            do
            {
                getword = getchar();
            }while(getword==10);                //输入字符并把结束符去掉
            //scanf_s("%c",getword);
            jg = cma(getword);                  //获取数据处理结果
            draw_man(erro_cishu);               //显示
            dis_word();
            if (jg==1)
            {    
                printf("answer:%sn",buff);
                printf("win!n one more? Y/N");
                do
                {                    
                    getword = getchar();
                } while (getword == 10);
                if (getword == "N"[0] || getword == "n"[0])
                {
                    return 0;
                }
                play = 0;

            }
            if (jg == 2)
            {    
                printf("answer:%sn", buff);
                printf("lost!n one more? Y/Nn");
                do
                {                
                    getword = getchar();
                } while (getword == 10);
                if (getword == "N"[0] || getword == "n"[0])
                {
                    return 0;
                }
                play = 0;
            }
            //return 0;
        }


    }
    //std::cout << "Hello World!n"; 
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门提示: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

//strcpy
//strcat
//strcmp
//strlen
//strlwr
//strupr
最后修改:2020 年 06 月 28 日
声明:无闻风博客|版权所有,违者必究|如未注明,均为原创| 转载:转载请注明原文链接