1. 游戏特色
    1. 有三种难度等级可供选择,分别挖空1、2、3个单词位置。
    2. 内置有10个单词,猜词时会随机抽取一个单词,并随机决定挖空哪个位置,使游戏更具趣味性。
    3. 用户可以自己添加想猜的单词(10个以内均可)。
    4. 用户猜错后会给出正确答案
  2. 解题思路
    1. 要显示单词,而且要用户在指定位置输入字母,故应用到一个函数,可以将光标定位到单词被挖空的位置等待用户输入。我构建了一个gotoxy()函数,是基于网上找到得一个源代码稍加修改而得到的。调用时只需将坐标传递给gotoxy()即可将光标跳到指定坐标。

      在输入字母、打印吊死鬼图案时,将多次用到定位光标的函数。

    2. 由于游戏可能进行多次,所以清屏函数system("CLS")的使用时非常必要的。可将上一次游戏进行的内容全部清空重新开始新一轮游戏。
    3. 为了增加趣味性,游戏允许用户自己添加单词用于猜词。

    故我构建了一个函数,先把原先存储单词的字符串数组元素全部赋值为'/0',防止用户输入的单词没有原先字符串中以存储的单词长而导致猜词时输出的单词不伦不类(合成词?~_~)。

    然后设置循环,依次给10个字符串数组赋值,并通过string.h下的strlen()函数判断,如果输入单词过短则提示用户重新输入,如果只按回车键,那么将跳出函数,返回主函数开始猜词。

    1. 由于设置了3个难度,故每个难度都构建了一个函数,这三个函数算法基本类同。

    以难度2为例:首先生成一个0~9的随机数,并通过switch()函数,根据生成的随机数判断本次游戏要猜的单词(w0~w9),并用一个指针指向该单词;

    第二步是将存有该单词的字符串数组复制给另一个数组,用于猜词;

    第三步,产生两个随机数并确保它们不相等,随机数最大为单词的长度,这两个随机数将决定单词被挖空的字母位置,即将数组相应位置的元素赋值为下划线;

    下一步则要输出绞刑架图案和已被挖空两个字母的单词,并将光标定位在第一个空位上;

    待用户输入一个字母后,判断该字符是否与正确字符相等(这就是将字符串数组复制的原因) 若相同,则跳到下一出空位继续等待输入,若不相同,则提示错误,并在绞刑架图案上一次输出头、躯干、胳膊等等。

    当用户全部输入正确(输错次数在7次以内)时,恭喜玩家成功猜出单词,并邀请玩家再玩一次。

    当输错7次(用循环计数器实现)后,提示玩家失败,并将正确答案提示玩家,邀请玩家再玩一次。

  3. 源代码(C语言)

    #include<stdio.h>

    #include<stdlib.h>

    #include<math.h>

    #include<string.h>

    #include <windows.h>

    #define MAX 17             //最长单词的长度

    int gotoxy(int,int);

    int level1();

    int level2();

    int level3();

    int addnew();

    char w0[]="christian";

    char w1[]="programming";

    char w2[]="network";

    char w3[]="project";

    char w4[]="environment";

    char w5[]="freedom";

    char w6[]="protection";

    char w7[]="firewall";

    char w8[]="paradise";

    char w9[]="carrot";

    int main()

    {

    char difflv;

    printf("Difficulty Level(1~3, 0 to Quit, 4 to Add New Words): ");

    while((difflv=getchar()) !='0')

    {

    switch(difflv)

    {

    case '1':system("CLS");level1();break;

    case '2':system("CLS");level2();break;

    case '3':system("CLS");level3();break;

    case '4':addnew();fflush(stdin);

    printf("Difficulty Level(1~3, 0 to Quit, 4 to Add New Words): ");

    continue;

    default:

    printf("Wrong Input!/n");

    printf("Difficulty Level(1~3, 0 to Quit, 4 to Add New Words): ");

    fflush(stdin);

    continue;

    }    //switch OVER

    gotoxy(11,0); //转到第11行

    printf("Difficulty Level(1~3, 0 to Quit, 4 to Add New Words): ");

    fflush(stdin);

    }    //while OVER

    return 0;

    }    //main OVER

    //============================================================================================

    int gotoxy(int x,int y)        //定位光标的位置 ,超级实用!

    {

    COORD coord;

    coord.X=y;                //位置调换,调用函数是第一个参数是行,第二个参数是列

    coord.Y=x;

    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );

    return 0;

    }

    //===============================================================================================

    int addnew()

    {

    char j,i;//计数器

    char word[MAX]="a";

    fflush(stdin);

    printf("Please Input New Words(Press ENTER to return):/n");

    for(j=0;j<10 && strlen(word)!=0;j++)

    {

    gets(word);

    if(strlen(word)==0)return 0;

    else if(strlen(word)<4){printf("Too Short!/n");j--;continue;}

    else

    switch(j)

    {

    case 0:

    for(i=0;w0[i]!='/0';i++)w0[i]='/0';

    for(i=0;word[i]!='/0';i++)w0[i]=word[i];w0[i]='/0';break;

    case 1:

    for(i=0;w1[i]!='/0';i++)w1[i]='/0';

    for(i=0;word[i]!='/0';i++)w1[i]=word[i];w0[i]='/0';break;

    case 2:

    for(i=0;w2[i]!='/0';i++)w2[i]='/0';

    for(i=0;word[i]!='/0';i++)w2[i]=word[i];w0[i]='/0';break;

    case 3:

    for(i=0;w3[i]!='/0';i++)w3[i]='/0';

    for(i=0;word[i]!='/0';i++)w3[i]=word[i];w0[i]='/0';break;

    case 4:

    for(i=0;w4[i]!='/0';i++)w4[i]='/0';

    for(i=0;word[i]!='/0';i++)w4[i]=word[i];w0[i]='/0';break;

    case 5:

    for(i=0;w5[i]!='/0';i++)w5[i]='/0';

    for(i=0;word[i]!='/0';i++)w5[i]=word[i];w0[i]='/0';break;

    case 6:

    for(i=0;w6[i]!='/0';i++)w6[i]='/0';

    for(i=0;word[i]!='/0';i++)w6[i]=word[i];w0[i]='/0';break;

    case 7:

    for(i=0;w7[i]!='/0';i++)w7[i]='/0';

    for(i=0;word[i]!='/0';i++)w7[i]=word[i];w0[i]='/0';break;

    case 8:

    for(i=0;w8[i]!='/0';i++)w8[i]='/0';

    for(i=0;word[i]!='/0';i++)w8[i]=word[i];w0[i]='/0';break;

    case 9:

    for(i=0;w9[i]!='/0';i++)w9[i]='/0';

    for(i=0;word[i]!='/0';i++)w9[i]=word[i];w0[i]='/0';break;

    }//switch OVER

    }//for OVER

    return 0;

    }

    //============================================================================================

    int level1()            //难度1

    {

    char n;                //n为赋值计数器兼单词挖空位置

    char *p,word[MAX];

    char c,i;            //c为待输入字符,i为循环计数器

    srand(time(NULL));

    n = rand()%10;

    switch(n)            //随机选取一个单词

    {

    case 0:p = w0;break;

    case 1:p = w1;break;

    case 2:p = w2;break;

    case 3:p = w3;break;

    case 4:p = w4;break;

    case 5:p = w5;break;

    case 6:p = w6;break;

    case 7:p = w7;break;

    case 8:p = w8;break;

    case 9:p = w9;break;

    }        //switch OVER

    for(n=0;p[n]!='/0';n++)                                //注意此处!!!!指针亦可以用数组形式表示!!!!!

    word[n] = p[n];                                //注意此处!!!!指针亦可以用数组形式表示!!!!!

    word[n] = '/0';

    n = rand()%n;             //随机选择一个位置替换为下划线

    word[n] = '_';         //下划线

    printf(" _________/n");

    printf(" | |/n");

    printf(" |/n");

    printf(" |/n");

    printf(" |/n");

    printf(" |/n");

    printf(" |/n");

    printf(" =========/n");

    printf("Input the correct letter you think and press ENTER:/n");

    puts(word);

    for(i=7;i>0;i--)

    {

    fflush(stdin);            //清除缓存,不然即使输入正确也会显示错误,需要输入两回才会输出正确提示

    gotoxy(9,n);

    if((c = getchar()) == p[n])                                    //注意此处!!!!指针亦可以用数组形式表示!!!!!

    {

    gotoxy(9,0);

    puts(p);

    gotoxy(10,0);

    printf("Hooray! You Win! Why Not Play Again?/n");

    break;

    }

    else

    {

    word[n] = '_';        //重新赋值为下划线

    gotoxy(9,0);

    puts(word);

    printf("Wrong Answer!/n%d Chance Left...",i-1);

    switch(i)

    {

    case 7:gotoxy(2,9);printf("O");break;

    case 6:gotoxy(3,9);printf("|");break;

    case 5:gotoxy(3,8);printf("/");break;

    case 4:gotoxy(3,10);printf("//");break;

    case 3:gotoxy(4,9);printf("|");break;

    case 2:gotoxy(5,8);printf("/");break;

    case 1:gotoxy(5,10);printf("//");

    gotoxy(10,0);printf("You Lose...Correct Word: %s Try Again?",p);

    break;

    }    //switch OVER

    }    //if-else OVER

    }    //for OVER

    return 0;

    }

    //============================================================================================

    int level2()

    {

    char n,n1,n2;                //n为赋值计数器兼单词挖空位置

    char *p,word[MAX];

    char c,i;                //c为待输入字符,i为循环计数器

    srand(time(NULL));

    n = rand()%10;

    switch(n)            //随机选取一个单词

    {

    case 0:p = w0;break;        //如果直接定义一个数组,而不是指针,编译器会提出警告,而且程序运行也会出错

    case 1:p = w1;break;        //伟大的经验啊,定义指针,把数组名赋值给它,该指针就可以用作数组啦!爽!

    case 2:p = w2;break;

    case 3:p = w3;break;

    case 4:p = w4;break;

    case 5:p = w5;break;

    case 6:p = w6;break;

    case 7:p = w7;break;

    case 8:p = w8;break;

    case 9:p = w9;break;

    }        //switch OVER

    for(n=0;p[n]!='/0';n++)

    word[n] = p[n];

    word[n] = '/0';

    n1 = rand()%n;             //随机选择一个位置替换为下划线 此处不能用%=: n%=i等价于n=n%i

    word[n1] = '_';         //下划线

    do

    {

    n2 = rand()%n;

    }while(n2 == n1);    //确保n2!=n1

    word[n2] = '_';

    if(n2<n1)

    {

    n=n1;n1=n2;n2=n; //确保先输入第一个字母

    }

    printf(" _________/n");

    printf(" | |/n");

    printf(" |/n");

    printf(" |/n");

    printf(" |/n");

    printf(" |/n");

    printf(" |/n");

    printf(" =========/n");

    printf("Input the correct letter you think and press ENTER:/n");

    puts(word);

    for(i=7;i>0;i--)

    {

    fflush(stdin);            //清除缓存,不然即使输入正确也会显示错误,需要输入两回才会输出正确提示

    gotoxy(9,n1);

    if((c = getchar()) == p[n1])

    {

    word[n1]=p[n1];

    gotoxy(9,0);

    puts(word);

    //gotoxy(10,0);

    printf("Well Done! Try The Other Letter!");

    for(;i>0;i--)

    {

    gotoxy(9,n2);

    fflush(stdin);

    if((c = getchar()) == p[n2])

    {

    gotoxy(9,0);

    puts(p);

    //gotoxy(10,0);

    printf("Hooray! You Win! Why Not Play Again?/n");

    break;

    }//2nd if OVER

    else

    {

    word[n2]='_';

    gotoxy(9,0);

    puts(word);

    printf("Wrong Answer! /n%d Chance Left...",i-1);

    switch(i)

    {

    case 7:gotoxy(2,9);printf("O");break;

    case 6:gotoxy(3,9);printf("|");break;

    case 5:gotoxy(3,8);printf("/");break;

    case 4:gotoxy(3,10);printf("//");break;

    case 3:gotoxy(4,9);printf("|");break;

    case 2:gotoxy(5,8);printf("/");break;

    case 1:gotoxy(5,10);printf("//");

    gotoxy(10,0);printf("You Lose...Correct Word: %s Try Again?",p);

    break;

    }    //switch OVER

    } //2nd else OVER

    }break;//2nd for OVER

    }    //1st if OVER

    else

    {

    word[n1] = '_';        //重新赋值为下划线

    gotoxy(9,0);

    puts(word);

    printf("Wrong Answer! /n%d Chance Left...",i-1);

    switch(i)

    {

    case 7:gotoxy(2,9);printf("O");break;

    case 6:gotoxy(3,9);printf("|");break;

    case 5:gotoxy(3,8);printf("/");break;

    case 4:gotoxy(3,10);printf("//");break;

    case 3:gotoxy(4,9);printf("|");break;

    case 2:gotoxy(5,8);printf("/");break;

    case 1:gotoxy(5,10);printf("//");

    gotoxy(10,0);printf("You Lose...Correct Word: %s Try Again?",p);

    break;

    }    //switch OVER

    }    //1st else OVER

    }    //for OVER

    return 0;

    }

    //============================================================================================

    int level3()

    {

    char n,n1,n2,n3;                //n为赋值计数器兼单词挖空位置

    char *p,word[MAX];

    char c,i;                //c为待输入字符,i为循环计数器

    srand(time(NULL));

    n = rand()%10;

    switch(n)            //随机选取一个单词

    {

    case 0:p = w0;break;        //如果直接定义一个数组,而不是指针,编译器会提出警告,而且程序运行也会出错

    case 1:p = w1;break;        //伟大的经验啊,定义指针,把数组名赋值给它,该指针就可以用作数组啦!爽!

    case 2:p = w2;break;

    case 3:p = w3;break;

    case 4:p = w4;break;

    case 5:p = w5;break;

    case 6:p = w6;break;

    case 7:p = w7;break;

    case 8:p = w8;break;

    case 9:p = w9;break;

    }        //switch OVER

    for(n=0;p[n]!='/0';n++)

    word[n] = p[n];

    word[n] = '/0';

    n1 = rand()%n;             //随机选择一个位置替换为下划线 此处不能用%=: n%=i等价于n=n%i

    word[n1] = '_';         //下划线

    do

    n2 = rand()%n;

    while(n2 == n1);    //确保n2!=n1

    word[n2] = '_';

    do

    n3 = rand()%n;

    while(n3 == n1 || n3 == n2);

    word[n3] = '_';

    if(n1>n2)

    {    n=n1;n1=n2;n2=n;} //确保先输入第一个字母

    if(n1>n3)

    {    n=n1;n1=n3;n3=n;}

    if(n2>n3)

    {    n=n2;n2=n3;n3=n;}

    printf(" _________/n");

    printf(" | |/n");

    printf(" |/n");

    printf(" |/n");

    printf(" |/n");

    printf(" |/n");

    printf(" |/n");

    printf(" =========/n");//打印原始图案

    printf("Input the correct letter you think and press ENTER:/n");

    puts(word);

    for(i=7;i>0;i--)

    {

    fflush(stdin);            //清除缓存,不然即使输入正确也会显示错误,需要输入两回才会输出正确提示

    gotoxy(9,n1);

    if((c = getchar()) == p[n1])

    {

    word[n1]=p[n1];

    gotoxy(9,0);

    puts(word);

    //gotoxy(10,0);

    printf("Well Done! Try The Other Letter!");

    for(;i>0;i--)

    {

    gotoxy(9,n2);

    fflush(stdin);

    if((c=getchar()) == p[n2])

    {

    word[n2]=p[n2];

    gotoxy(9,0);

    puts(word);

    //gotoxy(10,0);

    printf("Well Done! Try The Other Letter!");

    for(;i>0;i--)

    {

    gotoxy(9,n3);

    fflush(stdin);

    if((c=getchar()) == p[n3])

    {

    gotoxy(9,0);

    puts(p);

    //gotoxy(10,0);

    printf("Hooray! You Win! Why Not Play Again?");

    break;

    }//3rd if OVER

    else

    {

    word[n3]='_';

    gotoxy(9,0);

    puts(word);

    printf("Wrong Answer! /n%d Chance Left...",i-1);

    switch(i)

    {

    case 7:gotoxy(2,9);printf("O");break;

    case 6:gotoxy(3,9);printf("|");break;

    case 5:gotoxy(3,8);printf("/");break;

    case 4:gotoxy(3,10);printf("//");break;

    case 3:gotoxy(4,9);printf("|");break;

    case 2:gotoxy(5,8);printf("/");break;

    case 1:gotoxy(5,10);printf("//");

    gotoxy(10,0);printf("You Lose...Correct Word: %s Try Again?",p);

    break;

    }    //switch OVER

    } //3rd else OVER

    }break;//3rd for OVER

    }//2nd if OVER

    else

    {

    word[n2]='_';

    gotoxy(9,0);

    puts(word);

    printf("Wrong Answer! /n%d Chance Left...",i-1);

    switch(i)

    {

    case 7:gotoxy(2,9);printf("O");break;

    case 6:gotoxy(3,9);printf("|");break;

    case 5:gotoxy(3,8);printf("/");break;

    case 4:gotoxy(3,10);printf("//");break;

    case 3:gotoxy(4,9);printf("|");break;

    case 2:gotoxy(5,8);printf("/");break;

    case 1:gotoxy(5,10);printf("//");

    gotoxy(10,0);printf("You Lose...Correct Word: %s Try Again?",p);

    break;

    }    //switch OVER

    } //2nd else OVER

    }break;//2nd for OVER

    }    //1st if OVER

    else

    {

    word[n1] = '_';        //重新赋值为下划线

    gotoxy(9,0);

    puts(word);

    printf("Wrong Answer! /n%d Chance Left...",i-1);

    switch(i)

    {

    case 7:gotoxy(2,9);printf("O");break;

    case 6:gotoxy(3,9);printf("|");break;

    case 5:gotoxy(3,8);printf("/");break;

    case 4:gotoxy(3,10);printf("//");break;

    case 3:gotoxy(4,9);printf("|");break;

    case 2:gotoxy(5,8);printf("/");break;

    case 1:gotoxy(5,10);printf("//");

    gotoxy(10,0);printf("You Lose...Correct Word: %s Try Again?",p);

    break;

    }    //switch OVER

    }    //1st else OVER

    }    //for OVER

    return 0;

    }

  4. 截图:
    1. 等待用户输入,1~3三个难度等级,按0退出游戏,按4添加单词。

    2. 添加新单词。输入单词后回车即添加成功,再按回车返回游戏。
    3. 选择难度等级并进行游戏。

    4. 单词全部猜错,已经完全输出吊死鬼的图案。
    5. 继续进行下一次游戏

    6. 游戏成功!嘿嘿嘿嘿~~~~~~~~~~~~~~~~~~

吊死鬼游戏Hangman游戏的C语言实现代码相关推荐

  1. Python实现猜词游戏 Hangman Game(不带提示和带提示版本)

    本文目录 Python实现猜词游戏(Hangman Game) 一.任务准备 二.Hangman游戏的功能需求 三.辅助函数的构建 1.确定一个单词是否被猜出 2.获取用户当前的猜词进度 3.确定还有 ...

  2. hangman游戏c语言,英语游戏 猜词游戏hangman

    HANGMAN英语课堂游戏的设计 广东深圳市电子技术学校 张江宏 一.Hangman游戏的由来 Hangman在西方是一个家喻户晓的猜词游戏.Hang的英文意思是"绞死",而Man ...

  3. c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  4. 简单的HANGMAN游戏

    分析一下简单的hangman游戏,hangman主要两个窗口就是菜单窗口和游戏窗口.这里要用面板以及布局方式将元件排列好,有个基本雏形,这是第一步.这里第一个页面用到girdbaglayout布局方式 ...

  5. python实现Hangman游戏

    游戏过程解读 计算机从一个文本中随机抽取一个单词,字符串表示,并显示出字符串长度用户一个字符一个字符去猜,手动输入猜测结果,总共有6次猜测次数,每次猜测完之后,计算机告知玩家已经猜测的结果和剩余可以猜 ...

  6. c语言课程设计--打飞碟源代码,飞碟游戏(飞碟游戏规则)

    2021年5月13日发(作者:封孟绅) 计算机技术基础课程设计 C语言 设计报告 题目:打飞碟游戏 学院:机电工程学院 专业:工业工程 班级:050109 姓名:刁玉斌 指导教师:顾煜新 设计时间:2 ...

  7. 单词游戏: hangman

    1. 设计完成一个单词游戏: HANGMAN.请按题目指导逐步完成. 这是一个经典单词游戏Hangman的变形设计.如果你对游戏规则不熟悉,可以点击链接(https://en.wikipedia.or ...

  8. 游戏贪吃蛇(c语言)

    游戏贪吃蛇(c语言) 一.项目背景 二.设计目的 三.项目功能需求 1.初始化游戏 2.控制蛇的运行轨迹 3.控制蛇的长度 4.控制食物生成 5.计算分数 6.结束条件 四.系统的功能结构图 五.总体 ...

  9. 【原创-更新完毕】|日历拼图游戏的解决方案(C语言-进阶应用)-详解连载2

    [原创]|日历拼图游戏的解决方案(C语言-进阶应用)-详解连载1_zhuyi8120的博客-CSDN博客 [原创]|日历拼图游戏的解决方案(C语言-进阶应用)-详解连载3_zhuyi8120的博客-C ...

最新文章

  1. css中font-family的中文字体
  2. arm 跳转指令跳转范围
  3. 在Ubuntu 7.04上安装Xfce 4.4.1
  4. Spring boot集成spring-boot-starter-data-jpa环境搭建
  5. 【Android】init.rc
  6. eof怎么结束输入_西门子S71500数字量输入模块如何编址?
  7. 内存不足:杀死进程或牺牲孩子
  8. LintCode MySQL 1936. 张三的故事 III
  9. lintcode Permutation Index
  10. 关于 awesome-algorithm 仓库中 Python Leetcode 代码删除一事
  11. hive metastore mysql_Hive初步使用、安装MySQL 、Hive配置MetaStore、配置Hive日志《二》...
  12. HTML5响应式手机模板:IOS风格app手机个人中心页面模板HTML+CSS+JavaScript
  13. 在华为工作十年的感悟
  14. 计算机控制系统的数字量输出通道由,计算机控制-习题
  15. PHP(euc) + Smarty(euc) で、UTF-8やSJIS出力する方法(解決策とまとめ)
  16. java affinity_线程亲和性(Thread Affinity)
  17. 【java】714. 买卖股票的最佳时机含手续费-----动态规划!!!
  18. MATLAB 打不开coder,MATLAB CODER初次使用的错误提示,希望大侠可以帮忙解决!...
  19. bluehost独立服务器订购注意事项
  20. C++:实现量化forward rate agreement远期利率协议测试实例

热门文章

  1. android图片资源加载失败,Android图片加载问题分析
  2. Python之计算机要点,进制转换,数据间转换(2020.04.01)
  3. 基于知识图谱(Knowledge Graph)的学习类APP软件设计
  4. 怎么了,不知道做什么了
  5. Windows API编程01-详解第一个程序(超级详细)
  6. pytorch 图像分割的交并比_PyTorch专栏(二十二): 深度卷积对抗生成网络
  7. CAD制图初学入门教程:一键解决CAD图纸杂乱
  8. 接口隔离原则——举例说明Java设计模式中的接口隔离原则
  9. Web学习基础应用-可编辑表格
  10. html中三角函数表示什么,听说了吗,CSS支持三角函数了