一、游戏介绍

  猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩。一方出数字,一方猜。出数字的人要想好一个没有重复数字的4个数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。如正确答案为 5234,而猜的人猜 5346,则是 1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为 2B,合起来就是 1A2B。接着猜的人再根据出题者的几A几B继续猜,直到猜中(即 4A0B)为止。

二、算法

  程序首先生成四个互不相同的位于0-9之间的随机数,根据输入的数据,将两者进行对比,给出A和B的值。
  程序使用std::array<uchar,4>来存储这四个数字,并且定义一个结构体Result来存储A和B的值。将这些数据及相应的操作整合到GDigit类中

三、程序代码

1、GDigit.h

该文件包含结构体ResultGDigit类及其它必要的数据结构的定义。

/* the definition of GDigit class* writen by Liangjin Song on 20200122
*/
#ifndef GDIGIT_H
#define GDIGIT_H
#include <array>using uchar=unsigned char;
using Digit=std::array<uchar,4>;struct Result{uchar A;uchar B;
};class GDigit
{private:Digit digit;
public:GDigit()=default;~GDigit()=default;
public:// initial the digitsvoid initial();// check if the four numbers are different from each otherbool different(Digit& guess) const;// check the resultResult check(Digit& guess) const;// get the digitconst Digit& get() const {return digit;}bool finish(Digit& guess) const {return digit[0]==guess[0] && digit[1]==guess[1] && digit[2]==guess[2] && digit[3]==guess[3];}
};
#endif // GDIGIT_H

2、GDigit.cpp

该文件包含GDigit类的具体实现。

/* the definition of GDigit class* writen by Liangjin Song on 20200122
*/
#include "GDigit.h"
#include <random>
#include <ctime>void GDigit::initial()
{// initialize four numbers, and // make the four numbers different from each other.using engine=std::default_random_engine;using uniform=std::uniform_int_distribution<int>;// the first numberengine rnd((unsigned)time(NULL));uniform dis(0,9);engine rndp((unsigned)time(NULL));uniform disp(10,20);int i, loop=disp(rndp);for(i=0;i<loop;++i){dis(rnd);}digit[0]=dis(rnd);// the second numberdo{digit[1]=dis(rnd);}while(digit[1]==digit[0]);// the third numberdo{digit[2]=dis(rnd);}while(digit[2]==digit[0] || digit[2]==digit[1]);// the forth numberdo{digit[3]=dis(rnd);}while(digit[3]==digit[0] || digit[3]==digit[1] || digit[3]==digit[2]);
}bool GDigit::different(Digit& guess) const
{// check if the four numbers are different from each otherbool same;same=guess[0]==guess[1] || guess[0]==guess[2] || guess[0]==guess[3];same=same || guess[1]==guess[2] || guess[1]==guess[3];same=same || guess[2]==guess[3];return !same;
}Result GDigit::check(Digit& guess) const
{// check the resultResult res;res.A=0;res.B=0;uchar i,j;for(i=0; i<4; ++i){for(j=0; j<4; ++j){if(guess[j]==digit[i]){if(i==j){++res.A;}else{++res.B;}}}}return res;
}

3、main.cpp

C++控制台程序的main函数。

/* main function* writen by Liangjin Song on 20200122
*/
#include "GDigit.h"
#include <iostream>
using namespace std;
int main()
{GDigit gdigit;gdigit.initial();Digit guess;Result res;do{do{cout<<"Please input four unique digits:"<<endl;cin>>guess[0]>>guess[1]>>guess[2]>>guess[3];for(auto &i : guess){i-=0x30;}}while(!gdigit.different(guess));res=gdigit.check(guess);cout<<static_cast<int>(res.A)<<"A"<<static_cast<int>(res.B)<<"B"<<endl;}while(!gdigit.finish(guess));cout<<endl;return 0;
}

四、运行结果

控制台下的运行效果如下。

五、图形界面

使用MFC制作图形界面,代码链接为:猜数字游戏MFC源代码,其运行效果如下图。

六、注意

程序使用了C++11特性,编译器需支持C++11。

猜数字游戏C++代码相关推荐

  1. C语言写出猜数字游戏的代码

    猜数字游戏,即电脑生成随机数,根据用户输入猜大猜小最终实现猜对数字 思想:电脑生成随机数跟用户输入的那个数进行比较,若大了或者小了继续猜,这里可以写个死循环知道猜对才可以跳出来 代码如下所示: #in ...

  2. C++编写一个猜数字游戏的代码

    文章目录 一.核心代码 二.整个代码实现 一.核心代码 (1)随着系统时间,随机生成一个数字(头文件应引用#include ). int s = rand() % 100 + 1;cout <& ...

  3. python3.3使用tkinter实现猜数字游戏代码

    发布时间:2014-06-18   编辑:www.jbxue.com 原文地址:http://www.jbxue.com/article/python/22152.html python3.3使用tk ...

  4. CASIO 5800P计算器游戏--猜数字游戏

    CASIO 5800P 计算器游戏--猜数字游戏原代码 我编的计算器小游戏--猜数字游戏 LbI I↙ "xxGUESS NUMBERxx xPROGRAMMER:JCHx -------- ...

  5. c#语言猜数字游戏,C#实现猜数字游戏

    本文实例为大家分享了C#实现猜数字游戏具体代码,供大家参考,具体内容如下 给定一个0-100的随机数字猜其大小 题目样式: 电脑产生一个0到100之间的随机数字,并且要求用户来猜,如果用户猜的数字比这 ...

  6. C语言入门小游戏——猜数字游戏(详解)

    大家好,我是十一,今天给大家带来"猜数字游戏"的代码和讲解. 目录 前言 基本流程 1.打印菜单 1.1主函数逻辑 2.生成随机数 随机数生成结果 2.1srand函数 2.2时间 ...

  7. Python春节特训营07:和电脑玩猜数字游戏

    第7天 和电脑玩猜数字游戏 猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩.今天我们就来用 Pyt ...

  8. python猜年龄代码_python入门教程NO.7用python来写一个猜数字游戏

    python入门教程 本文涉及的python基础语法为while循环 #python#3中while语句常常被用于循环执行某个程序,任何非0和非空null的值,都会被条件判断为True while 条 ...

  9. Go-实现猜数字游戏代码

    实现猜数字游戏代码 1 package main 2 3 import ( 4 "fmt" 5 "math/rand" 6 "time" 7 ...

最新文章

  1. /proc/diskstats各字段解析
  2. Java 403 forbidden错误解决
  3. java map 实例_java中map集合嵌套形式简单示例
  4. Cisco交换机密码忘记重置
  5. [BZOJ2282]消防
  6. win虚拟光驱怎么做linux,手把手教你用虚拟光驱安装windows10系统的详细步骤
  7. 计算机d盘无法格式化,为什么不能格式化D盘?D盘无法格式化的解决方法
  8. python爬虫抖音视频代码_python爬虫 抖音短视频解析下载
  9. 把文字图片转换成文本文字
  10. 工业控制信息安全资源汇总(国内篇)
  11. 计算机如何添加gust用户,win7系统如何创建安全的Guest账户
  12. Guided Anchoring 论文笔记
  13. 软考 | 2019年上半年 软件设计师 下午试卷
  14. oracle11g登录企业管理器,Oracle11g RAC常用操作 (维护及管理)
  15. c#winform使用EntityFramework导入数据库
  16. 不同速度的蚂蚁跑圈相遇问题
  17. Java基础 - AO BO DO PO VO DAO DTO POJO
  18. 一分钟看懂外卖O2O:小心!别掉入这三个坑里
  19. 芯动A11算力2000M以太坊矿机机皇
  20. SQL语言——联结表

热门文章

  1. Javaweb学习(一)
  2. 《男女诗篇》 - 肖复兴
  3. 基于阿里云物联网的体重秤
  4. UNCTF2019新星赛长安十二时辰write up
  5. DNS扫盲系列之八:关于域名解析的授权
  6. 华为荣耀平板5怎么样_荣耀平板5配置如何?荣耀平板5优缺点评测
  7. 使用乾坤微前端nginx和服务器部署
  8. 上海快速拿计算机本科文凭,怎么快速拿文凭,急!(建议收藏)
  9. 狂神说docker(最全笔记)--转载
  10. 项目经理如何做项目工作汇报?