[C语言][小游戏][猜数游戏]

news2024/9/27 5:55:30

C语言的奇妙旅行

  • 目录:
  • 一、猜数判定
  • 二、重复到猜对为止
  • 三、随机设定目标数字
  • 四、限制输入次数
  • 五、保存输入的记录
  • 六、测试小游戏

目录:

带着梦想,带着好奇,带着执着,在C语言的世界里旅行。亲爱的朋友们,一起加油。

一、猜数判定

显示玩家从键盘输入的值和计算机事先准备的“目标数字”进行比较

#include <stdio.h>
int main()
{
    int no;//读取的数字
    int ans = 7;//目标数字
    printf("请输入0~9的数字:\n\n");
    printf("你猜是多少呢?:\n");
    scanf("%d", &no);
    if (no > ans)
        printf("\a再小一点。\n");
    else if (no < ans)
        printf("\a再大一点。\n");
    else
        printf("猜对了。");

    return  0;
}

1)本游戏的“目标数字”是7,用变量ans表示,从键盘输入的值则用变量no表示。
2)程序通过if来判断no和ans两个变量值的大小,根据判断结果显示“再小一点。”“再大一点。”“猜对了。”。
3)输出的字符串包含两个转义字符。一个是我们熟悉的\n,表示换行,另一个\a,表示警报。

二、重复到猜对为止

如果“猜数字游戏”只允许玩家输入一次数值,那就显得无趣。我们把程序改良一下,玩家可以一直重复输入,直到猜对了为止。

#include <stdio.h>
int main()
{
    int no;//读取的数字
    int ans = 7;//目标数字
    printf("请输入0~9的数字:\n\n");
    do
    {
        printf("你猜是多少呢?:\n");
    scanf("%d", &no);
    if (no > ans)
        printf("\a在小一点。\n");
    else if (no < ans)
        printf("\a再大一点。\n");
} while (ans!=no);//重复到猜对为止
printf("猜对了。\n");
    return  0;
}

1)do语句while(表达式);是通过先循环后判断重复进行处理的语句。
2)do和while围起来的语句叫做循环体。只要控制表达式的结果不为零,那么循环体就会一直重复执行下去。
3)我们把控制表达式设为no!=ans,当程序读取到的no和“目标数字”ans一样的值时,控制表达式的求值结果为0,循环就结束了,画面显示“猜对了。”,程序结束。

三、随机设定目标数字

前面的游戏,“目标数字”都是自己设置好的,为了提升这个游戏的趣味性,我们让这个值变化起来。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    //srand((unsigned)time(NULL));
    int no;//读取的数字
    int ans = rand()%1000+1;//目标数字
    printf("请输入1~1000的数字:\n\n");
    do
    {
        printf("你猜是多少呢?:\n");
    scanf("%d", &no);
    if (no > ans)
        printf("\a在小一点。\n");
    else if (no < ans)
        printf("\a再大一点。\n");
} while (ans!=no);//重复到猜对为止
printf("猜对了。\n");
    return  0;
}

1)rand函数(生成随机数):头文件为<stdlib.h>.rand函数生成的值是伪随机数,总会生成一个相同的随机数序列。
rand函数是对一个叫做“种子”的基准值加以运算得到随机数的。每次运行程序都会生成一个随机序列,rand函数默认种子为常量1。要生成不同的随机数,就要改变这个种子。负责执行这项任务的是srand函数。
在这里插入图片描述
在这里插入图片描述
2)srand函数(设置生成随机数的种子):srand函数是用来设置种子的,一但决定了种子,那么生成的随机数序列也就确定了。如果我们想每次运行程序的时候都能生成不同的随机数,那么就必须将种子的值从常数变成随机数
3)我们一般使用的方法是把运行程序的时间当做种子
srand((unsigned)time(NULL))。rand函数的范围是0~32767,所以rand函数要求使用unsigned类型。
time函数用到的头文件是<time.h>。
4)一般情况下,我们需要的是某个特定范围内的随机数
“目标数字”设定为1~1000如:
rand()%1000+1;

四、限制输入次数

只要不断输入数值,终会猜对,为了增加难度,也为了给玩家紧张感,我们把玩家最多输入的次数限制一下。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
     srand((unsigned)time(NULL));
    int no;//读取的数字
    int ans = rand() % 1000 + 1;//目标数字
    int max_s ;//最多输入的次数
    printf("最多输入几次:\n");
    scanf("%d", &max_s);
    int s = max_s;//还可以输入的次数
    printf("请输入1~1000的数字:\n\n");
    do
    {
        printf("还剩%d次机会,你猜是多少呢?\n", s);
        s--;
        scanf("%d", &no);
        if (no > ans)
            printf("\a在小一点。\n");
        else if (no < ans)
            printf("\a再大一点。\n");
    } while (ans != no && s > 0);
    if (ans == no)
    {
        printf("猜对了。\n");
        printf("你用了%d次猜中\n", max_s - s);
    }
    else
        printf("\a很遗憾,你猜错了\n");
    return  0;
}

在这里插入图片描述
1)max_s变量表示玩家最多可输入的次数,自己设置。
2)s表示还能输出的次数,,其初始值是max_s变量的值,每次玩家输入数值时,s就进行自减运算。
3)当s为0,或者在有限的次数内猜对了,就会跳出循环。
4)max_s 减去s就可以知道玩家是在第几次猜中了目标数字。

五、保存输入的记录

如果程序能够保持玩家输入的值,玩家就能在游戏结束时,确认自己猜的数字距离目标数字有多远

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
     srand((unsigned)time(NULL));
    int no;//输入的数字
    int ans = rand() % 1000 + 1;//目标数字
    int max_s ;//最多输入的次数
    int arr[1000];//存放输入的值
    int i = 0,j=0;
    printf("最多输入几次:\n");
    scanf("%d", &max_s);
    int s = max_s;//还可以输入的次数
    printf("请输入1~1000的数字:\n\n");
    do
    {
        printf("还剩%d次机会,你猜是多少呢?\n", s);
        s--;
        scanf("%d", &no);
        arr[i++] = no;
        if (no > ans)
            printf("\a在小一点。\n");
        else if (no < ans)
            printf("\a再大一点。\n");
    } while (ans != no && s > 0);
    if (ans == no)
    {
        printf("猜对了。\n");
        printf("你用了%d次猜中\n", max_s - s);
    }
    else
        printf("\a很遗憾,你猜错了\n");
    puts("\n---输入记录---");
    for(j=0;j<i;j++)
    printf("%2d:%4d %+4d\n", j + 1, arr[j], arr[j] - ans);
    return  0;
}

1)创建一个个数组arr[1000],用来存放输入的值;i+1表示第几次输入;arr[i]表示玩家输入的值;arr[i]-ans表示玩家输入的值与正确答案之差。
2)“%+d”表示数值即使是正值和0也会带符号。

六、测试小游戏

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
     srand((unsigned)time(NULL));
    int no;//输入的数字
    int ans = rand() % 1000 + 1;//目标数字
    int max_s ;//最多输入的次数
    int arr[1000];//存放输入的值
    int i = 0,j=0;
    printf("最多输入几次:\n");
    scanf("%d", &max_s);
    int s = max_s;//还可以输入的次数
    printf("请输入1~1000的数字:\n\n");
    do
    {
        printf("还剩%d次机会,你猜是多少呢?\n", s);
        s--;
        scanf("%d", &no);
        arr[i++] = no;
        if (no > ans)
            printf("\a在小一点。\n");
        else if (no < ans)
            printf("\a再大一点。\n");
    } while (ans != no && s > 0);
    if (ans == no)
    {
        printf("猜对了。\n");
        printf("你用了%d次猜中\n", max_s - s);
    }
    else
        printf("\a很遗憾,你猜错了\n");
    puts("\n---输入记录---");
    for(j=0;j<i;j++)
    printf("%2d:%4d %+4d\n", j + 1, arr[j], arr[j] - ans);
    return  0;
}

测试:
在这里插入图片描述
感觉游戏看着不太美观,我们再扩展一下:
1)加个界面:

void menu()
{
    printf("********************\n");
    printf("*****1.进入游戏*****\n");
    printf("*****0.退出游戏*****\n");
    printf("********************\n");
}

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
    printf("********************\n");
    printf("*****1.进入游戏*****\n");
    printf("*****0.退出游戏*****\n");
    printf("********************\n");
}
void game()
{
    int no;//输入的数字
    int ans = rand() % 1000 + 1;//目标数字
    int max_s;//最多输入的次数
    int arr[1000];//存放输入的值
    int i = 0, j = 0;
    printf("最多输入几次:\n");
    scanf("%d", &max_s);
    int s = max_s;//还可以输入的次数
    printf("请输入1~1000的数字:\n\n");
    do
    {
        printf("还剩%d次机会,你猜是多少呢?\n", s);
        s--;
        scanf("%d", &no);
        arr[i++] = no;
        if (no > ans)
            printf("\a在小一点。\n");
        else if (no < ans)
            printf("\a再大一点。\n");
    } while (ans != no && s > 0);
    if (ans == no)
    {
        printf("猜对了。\n");
        printf("你用了%d次猜中\n", max_s - s);
    }
    else
        printf("\a很遗憾,你猜错了\n");
    puts("\n---输入记录---");
    for (j = 0; j < i; j++)
        printf("%2d:%4d %+4d\n", j + 1, arr[j], arr[j] - ans);
}
int main()
{
     srand((unsigned)time(NULL));
     int n;

     while (1)
     { 
         menu();
     scanf("%d", &n);
     if (n == 1)
         game();
      else if (n == 0)
         break;
     else
         printf("输错了,请重新输入:\n");
     }

    return  0;
}

测试:在这里插入图片描述
2)加个Sleep函数和system函数
Sleep函数用来休眠,单位是毫秒;system函数可以执行系统命令,system(“cls”)清理屏幕,达到闪烁的目的。
代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
void menu()
{
    printf("********************\n");
    printf("*****1.进入游戏*****\n");
    printf("*****0.退出游戏*****\n");
    printf("********************\n");
}
void game()
{
    int no;//输入的数字
    int ans = rand() % 1000 + 1;//目标数字
    int max_s;//最多输入的次数
    int arr[1000];//存放输入的值
    int i = 0, j = 0;
    printf("最多输入几次:\n");
    scanf("%d", &max_s);
    int s = max_s;//还可以输入的次数
    printf("请输入1~1000的数字:\n\n");
    do
    {
        printf("还剩%d次机会,你猜是多少呢?\n", s);
        s--;
        scanf("%d", &no);
        arr[i++] = no;
        if (no > ans)
            printf("\a在小一点。\n");
        else if (no < ans)
            printf("\a再大一点。\n");
        Sleep(1000);//x休眠的意思,单位是毫秒
        system("cls");//清屏
    } while (ans != no && s > 0);
    if (ans == no)
    {
        printf("猜对了。\n");
        printf("你用了%d次猜中\n", max_s - s);
    }
    else
        printf("\a很遗憾,你猜错了\n");
    puts("\n---输入记录---");
    for (j = 0; j < i; j++)
        printf("%2d:%4d %+4d\n", j + 1, arr[j], arr[j] - ans);
}
int main()
{
     srand((unsigned)time(NULL));
     int n;
     while (1)
     { 
         menu();
     scanf("%d", &n);
     if (n == 1)
         game();
      else if (n == 0)
         break;
     else
         printf("输错了,请重新输入:\n");
     }
    return  0;
}

测试:
这样看着就很简介
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

能源结构变更图,传统能源结构对比新兴能源

以传统的能源&#xff08;煤、天然气&#xff09;提供能源&#xff0c;到新兴能源 目前新兴能源以 太阳能&#xff0c;风能为主以及其它行业&#xff0c; 一类企业以新兴能源这种为主&#xff0c;核心是能源接收&#xff0c;以及储存能源&#xff0c;存储通常两种方式&#x…

cmake列表

目录 cmake多行注释 求list长度 demo 获取list的值 demo 插入list demo 追加list demo 查找列表中的字符 demo 删除list list向前删除和向后删除数据 demo 字符串反转 demo 特殊操作 Readinglist(LENGTH <list> <out-var>)list(GET <list> &…

STM32CubeMX开发实战1-LED点灯

目录 点灯选择 MCU引脚设置时钟设置项目配置生成项目项目文件介绍Debugger 设置 点灯 这里将会以一个最简单的一个点灯实验来展示如何使用 STM32CubeMX 快速生成 STM32 工程并上手开发&#xff0c;包括对项目工程建立的详细内容分析解释 接下来使用正点原子探索者开发板 STM32F…

101、基于STM32单片机智能输液器红外点滴液位监控报警系统设计(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

Python程序设计

很多刚接触Python的同学会觉得Python就和shell语言一样&#xff0c;是一门脚本语言&#xff0c;并不需要设计&#xff0c;只需要关注要实现的功能。确实一门计算机语言的诞生就是为了去更好的解决当前的痛点&#xff0c;功能实现肯定是第一位的。但是如何在功能实现的前提下&am…

【人工智能】您必须了解的最佳聊天机器人框架

在本博客中&#xff0c;我们将讨论 7 大聊天机器人开发框架。 聊天机器人现在已成为许多企业不可或缺的一部分。他们利用聊天机器人提供客户支持服务。聊天机器人增强了人工代理以提供客户服务支持。企业每天都会收到大量查询。手动回答这些问题不仅耗时&#xff0c;而且还会增…

数据结构--由遍历序列构造二叉树

数据结构–由遍历序列构造二叉树 不同二叉树的中序遍历序列 中序遍历:中序遍历 左 \color{red}左 左子树、 根 \color{purple}根 根结点、中序遍历 右 \color{green}右 右子树 中序遍历序列:BDCAE 结论 : 一个中序遍历序列可能对应多种二叉树形态 \color{green}结论:一个中序…

4.4 x64dbg 绕过反调试保护机制

在Windows平台下&#xff0c;应用程序为了保护自己不被调试器调试会通过各种方法限制进程调试自身&#xff0c;通常此类反调试技术会限制我们对其进行软件逆向与漏洞分析&#xff0c;下面是一些常见的反调试保护方法&#xff1a; IsDebuggerPresent&#xff1a;检查当前程序是…

OpenCV 入门教程:图像读取和显示

OpenCV 入门教程&#xff1a;图像读取和显示 导语一、图像读取1.1、导入 OpenCV 库1.2、读取图像文件1.3、图像读取的返回值 二、图像显示2.1、创建窗口2.2、图像显示2.3、等待按键2.4、关闭窗口 三、示例应用总结 导语 在计算机视觉和图像处理领域&#xff0c;读取和显示图像…

非局部均值滤波(磨皮)

note 根据掩膜区域与其他区域的相似程度来赋予掩膜区域像素权重 相似程度由均方差来衡量 code /*\brief 矩阵求邻和\param type1&#xff0c;列方向&#xff1b;type2&#xff0c;行方向 */ static void MyCumSum(Mat& src, Mat& res, int type) {if ((src.channel…

关于impacket套件中的atexec.py在使用的时候报error: unrecognized arguments: 的解决方案

定位到库文件C:\Users\LC\AppData\Local\Programs\Python\Python311\Lib\argparse.py 加一个return args就行了 用完记得改回来&#xff0c;不然会影响其他脚本的功能

算法分析和设计选择和判断

算法分析和设计选择和判断 目录 平时测试 1.算法概述 1.1渐进符号的概念 1.2求时间复杂度 1.3比较时间复杂度 1.4时间复杂度定义 1.5算法的有效性 1.6算法的性质 1.7顺序搜索法 1.8渐进算法分析 2.递归和分治策略 2.1归并排序 2.2归并的空间复杂度 2.3插入排序 2.4递归 2.5归并…

Docker容器与HSM整合的好处

Docker透过容器使创建、部署和运行应用程式变得更加容易。容器允许开发人员可以将一个应用程式与它所需要的所有部分封包&#xff0c;然后将应用程式及其组件作为一个单一的套装软体。 Docker面临的挑战 : ● 遭受特权用户滥用的风险 Docker环境或容器内的权限配置不当可能会导…

Redis常见数据结构

文章目录 前言一、Redis通用命令二、String类型三、Key的层级结构四、Hash类型五、List类型六、Set类型七、SortedSet类型 前言 Redis是一个key-value的数据库&#xff0c;key一般是String类型&#xff0c;但是value的类型多种多样 在学习Redis不同数据类型时&#xff0c;我们…

ChatGPT付费创作系统V2.1.0独立版 +WEB端+ H5端 + 小程序端+文心一言

ChatGPT付费创作系统V2.1.0提供最新的对应版本小程序端&#xff0c;上一版本增加了PC端绘画功能&#xff0c;绘画功能采用其他绘画接口-意间AI&#xff0c;本版新增了百度文心一言接口。后台一些小细节的优化及一些小BUG的处理&#xff0c;前端进行了些小细节优化&#xff0c;针…

C#学习之路-类型转换

类型转换从根本上说是类型铸造&#xff0c;或者说是把数据从一种类型转换为另一种类型。 C# 中的类型转换可以分为两种&#xff1a;隐式转换和显式转换。 隐式类型转换 隐式转换是指将一个较小范围的数据类型转换为较大范围的数据类型时&#xff0c;编译器会自动完成类型转换…

chatgpt生成pygame opengl实现旋转用图片填充的3d三角形

import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import *def draw_triangle():vertices ((0, 2, 0), # 顶点1(-2, -2, 0), # 顶点2(2, -2, 0) # 顶点3)tex_coords ((1, 2), # 顶点1的纹理坐标(1, 1), # 顶点2的纹理坐标(2, …

如何使用SU插件一键生成通道图

如何使用SU插件一键生成通道图 通道图有什么作用&#xff1f; 以材质ID为例&#xff0c;最大的作用就是在PS通过选择材质ID图上的颜色&#xff0c;将颜色区域转化为蒙版&#xff0c;进而可以调节颜色区域所对应的效果图区域&#xff0c;原理类似于PS自带的通道&#xff1a;而A…

css 3D Demo

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style> body{ /* 该属性必须在父或大于父的级别上添加,保证其子,孙等盒子可以以3D视角…

langchain调用chatGLM2纪实

一、科学上网要注意&#xff1a; 域名全代和全局代理&#xff08;网卡&#xff09;&#xff0c;都要打开。这样conda install特别快。 二、安装langchain 1、 conda install langchain 2、 conda install openai 注意&#xff1a; 使用pip install和conda install 是不同…