吊死鬼游戏Hangman游戏的C语言实现代码

本文介绍了一个使用C语言实现的Hangman游戏,包括三种不同难度等级,每级随机选择内置单词或用户自定义单词。游戏过程中,用户可以输入字母猜测单词,根据错误次数展示吊死鬼图案。文章还提供了源代码,详细解释了游戏的实现思路和关键函数,如清屏、定位光标、输入检查等。
摘要由CSDN通过智能技术生成
  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;

下面是一个简单的 Hangman 游戏的 Python 代码实现,使用了 ASCII 图形来绘制 Hangman 的图像: ```python import random # Hangman 图像 HANGMAN = ( """ _______ |/ | | | | | | | | ------- """, """ _______ |/ | | O | | | | | | ------- """, """ _______ |/ | | O | | | | | | | ------- """, """ _______ |/ | | O | /| | | | | | ------- """, """ _______ |/ | | O | /|\\ | | | | | ------- """, """ _______ |/ | | O | /|\\ | / | | | | ------- """, """ _______ |/ | | O | /|\\ | / \\ | | | | ------- """ ) # 可选的单词列表 WORDS = ("PYTHON", "JAVASCRIPT", "JAVA", "PHP", "RUBY", "HTML", "CSS", "MYSQL") # 选择一个随机单词 word = random.choice(WORDS) # 用下划线替代单词中的字母 display = "_" * len(word) # 跟踪猜测的字母 guessed = [] # 猜测的次数 wrong_guesses = 0 # 游戏循环 while wrong_guesses < len(HANGMAN) - 1: # 显示当前的 Hangman 图像和猜测的字母 print(HANGMAN[wrong_guesses]) print("猜测的字母:", guessed) print("当前单词状态:", display) # 等待用户输入一个字母 guess = input("请猜一个字母:").upper() # 如果用户已经猜过这个字母,跳过 if guess in guessed: print("你已经猜过这个字母了。请重新猜一个字母。") continue # 把猜测的字母添加到列表中 guessed.append(guess) # 如果用户猜对了,更新单词状态 if guess in word: print("你猜对了!") # 更新单词状态 new_display = "" for i in range(len(word)): if word[i] == guess: new_display += guess else: new_display += display[i] display = new_display # 如果单词已经被猜完,胜利 if "_" not in display: print("恭喜你,你猜对了!单词是:" + word) break # 如果用户猜错了,增加猜错次数 else: print("你猜错了。") wrong_guesses += 1 # 如果猜错次数达到最大值,游戏结束 if wrong_guesses == len(HANGMAN) - 1: print(HANGMAN[wrong_guesses]) print("很遗憾,你输了。单词是:" + word) ``` 这个代码使用 `HANGMAN` 元组来存储 Hangman 图像。`WORDS` 列表包含可供选择的单词。在每次游戏开始时,从列表中随机选择一个单词,并将其转换为下划线。然后,程序进入一个循环,直到玩家猜对单词或猜错次数达到最大值。在每个循环中,程序显示当前的 Hangman 图像和猜测的字母,并等待玩家输入一个字母。如果玩家猜对了,程序更新单词状态,并检查单词是否被猜完。如果玩家猜错了,程序增加猜错次数。如果猜错次数达到最大值,程序显示 Hangman 的完整图像,并宣布玩家输了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值