学了一段时间,心血来潮写了一个1A2B小游戏,很多人应该玩过,是一个挺有意思的益智小游戏,之前用易语言写过,现在又用C++重写了一下。

  编译运行无错,整体程序设计思路为:进入循环,初始化游戏,读入一个数,判断是否合法,判断是否符合规则,判断是否正确,再给出答案提示。各部分都用函数封转方便管理和维护。不过有一点确实还需要改进,就是在输入输出语句的使用上,显得有些许混乱,用一个单独的函数来二次封装也许会更好,这样也能方便控制程序在任何时候都能退出游戏和做出最外层的响应。

  1A2B游戏规则介绍:

  你和对手分别选定一个四位数,各位数字不要重复。
  游戏开始后,由双方分别猜对方所选定的四位数,猜测的结果将会列在自己的猜测历史列表,并以A和B来表示结果。
  A代表猜测的数字中,数字相同且位置也正确的个数。
  B代表猜测的数字中,数字相同但位置不一样的个数。
  举例来说,如果对方的数字为1234,且你猜的数字为5283,其中2被猜到且位置正确,3也被猜到但位置不对,所以结果会出现1A1B。
  比赛由先完整猜出对方数字的人获得胜利(也就是先得到4A的玩家)。
  代码如下:
 // name:1A2B.cpp
// author:Frank
// descraption: 1A2B Game, in the beginning, the program will generate a random four-digits number
// in which the digits is not equal to each other, you need to guess it, and as you
// enter your answer, there would be a tips likes: xAyB. x means the count of right
// numbers those are in the right sites, y means the count of right numbers those
// are not in the right sites. 4A0B means you have got the right number.
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <stdbool.h> void InitializeGame(void);
void GetInput(char * input);
bool CheckAnswer(char * input);
bool GiveTips(char * input);
void GetRandom(char * random);
using namespace std; char answer[] = "";
char input[] = "";
int times = ; int main(int argc, char** argv) {
char c;
while (true){
cout << "Enter 'S' to start the game, 'Q' to quit." << endl;
c = toupper(getchar());
while(getchar() != '\n');
if (c == 'Q')
break;
else if(c == 'S'){
cout << "Game Start! Enter your answer:" << endl;
times = ;
InitializeGame();//初始化游戏
// cout << "The answer is: " << answer << endl;
GetInput(input); //输入猜测值
//检查猜测是否正确 不正确则给出提示
while(GiveTips(input) == false){
times++;
GetInput(input);
}
times++;
cout << "Congratulations! You have got it after " << times << " times." << endl;
}else
cout << "Only 'S' and 'Q' are received." << endl;
} return ;
} /******************************************************************************
*函数名称:void InitializeGame(void)
*函数功能:初始化游戏,生成随机数
*入口参数:无
*返 回 值:无
*******************************************************************************/
void InitializeGame(void){
static bool init_rand = false;
if (init_rand == false){
srand ((unsigned) time(NULL)); //如果未初始化则初始化随机数种子
init_rand = true;
}
GetRandom(answer);//生成随机数
// cout << answer << endl;
} /******************************************************************************
*函数名称:void GetInput(char * input)
*函数功能:读取一个字符串
*入口参数:返回读取的字符串
*返 回 值:无
*******************************************************************************/
void GetInput(char * input){
gets(input);
while(true){
if(strlen(input) != ){
cout << "Please input a 4-digits number!" << endl;
gets(input);
continue;
}
if(CheckAnswer(input) == false){
cout << "There couldn't be two same character in your answer!" << endl;
gets(input);//不合法则重新输入
continue;
}
break;
}
} /******************************************************************************
*函数名称:bool checkanswer(char * input)
*函数功能:判断答案是否合法,即是否存在重复数字
*入口参数:input为待判断的答案
*返 回 值:正确则返回真,否则返回假
*******************************************************************************/
bool CheckAnswer(char * input){
char temp[];
strcpy (temp, input);
for(int i = ; i < ; i++){
for(int j = i + ; j < ; j++)
if(temp[i] == input[j])
return false;
}
return true;
} /******************************************************************************
*函数名称:void GiveTips(char * input)
*函数功能:根据输入的答案来给出提示
*入口参数:待判断的答案
*返 回 值:无
*******************************************************************************/
bool GiveTips(char * input){
// cout << "I'm checking." << endl;
int a = , b = ;
for(int i = ; i < ; i++){
for(int j = ; j < ; j++){
// cout << "i:" << i << "j:" << j << endl;
if (input[i] == answer[j]){
if(i == j)
a++;
else
b++;
continue;
}
}
}
cout << "Tips:" << a << "A" << b << "B\n" << endl;
if (a == )
return true;
cout << "Enter another answer:";
return false;
} /******************************************************************************
*函数名称:void GetRandom(char * random)
*函数功能:产生一个各位数不相等的四位随机数
*入口参数:random为返回的随机数
*返 回 值:无
*备 注:先生成一个0-9的整数数组,再随机从中取四个数,每取一个将该位置为-1
*******************************************************************************/
void GetRandom(char * random){
int i, j[], k;
for (i = ; i < ; i++){
j[i] = i;
}
for(i = ; i < ; i++){
//生成第i个随机数
k = (int)rand() % ;//k为下标
while (j[k] == -){
k = (k + ) % ;
}
random[i] = '' + j[k];
j[k] = -;
}
}

  代码格式相对工整,每个函数都比较简短,便于阅读和理解。当然,如果有更好的建议,还望不啬赐教。

C\C++ 1A2B小游戏源码的更多相关文章

  1. HTML5小游戏源码收藏

    html5魅族创意的贪食蛇游戏源码下载 html5网页版打砖块小游戏源码下载 html5 3D立体魔方小游戏源码下载 html5网页版飞机躲避游戏源码下载 html5三国人物连连看游戏源码下载 js ...

  2. Creator仿超级玛丽小游戏源码分享

    Creator仿超级玛丽小游戏源码分享 之前用Cocos Creator 做的一款仿超级玛丽的游戏,使用的版本为14.2 ,可以直接打包为APK,现在毕设已经完成,游戏分享出来,大家一起学习进步.特别 ...

  3. flappy pig小游戏源码分析(1)——主程序初探

    闲逛github发现一个javascript原生实现的小游戏,源码写的很清晰,适合想提高水平的同学观摩学习.读通源码后,我决定写一系列的博客来分析源码,从整体架构到具体实现细节来帮助一些想提高水平的朋 ...

  4. h5小球走迷宫小游戏源码

    无意中找到的一个挺有意思的小游戏,关键是用h5写的,下面就分享给大家源码 还是先来看小游戏的截图 可以用键盘的三个键去控制它,然后通关 下面是源代码 <!doctype html> < ...

  5. flappy pig小游戏源码分析(4)——核心pig模块(未完待续)

    热身之后,我们要动点真格的了,游戏叫flappy pig,我们的pig终于要出场了. 老规矩,看看目录结构,读者对着目录结构好好回想我们已经讲解的几个模块: 其中game.js是游戏主程序,optio ...

  6. flappy pig小游戏源码分析(3)——解剖util

    这一节我们继续高歌猛进,如果对源码中有无论无何都理解不通的问题,欢迎和我交流,让我也学习一下,我的qq是372402487. 还是按照惯例看看我们的目录结构. 我们在前两节中已经分析了game.js, ...

  7. flappy pig小游戏源码分析(2)——解剖option

    今天继续分析flappy bird的源码.重温一下源码的目录结构. 在本系列第一篇中我们分析了game.js文件,也就是整个程序的架构.这一篇我们来看看option.js文件,这个文件的内容很简单,主 ...

  8. 2d命令行小游戏源码

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. xss小游戏源码分析

    配置 下载地址:https://files.cnblogs.com/files/Lmg66/xssgame-master.zip 使用:下载解压,放到www目录下(phpstudy),http服务下都 ...

随机推荐

  1. Java 知识结构图

    不可不懂的.NET基础知识 - 谷海燕 - 博客频道 - CSDN.NEThttp://blog.csdn.net/zhuanzhe117/article/details/8954924 出处:深入理 ...

  2. luac++

    Cocos2d-x下Lua调用自定义C++类和函数的最佳实践 洪亮 305 2014年08月09日 发布   1 推荐 21 收藏,14.9k 浏览 关于cocos2d-x下Lua调用C++的文档看了 ...

  3. css写出0.5px边框(一)

    在移动端会出现线条太粗的现象,简单来说,是因为手机端的像素单位和ui的图比例是2:1,所以ui图的1px边框对我们来说就是0.5px,但是浏览器渲染的最小单位就是1px,下面给几种方法用css写出0. ...

  4. python之platform模块

    python之platform模块 ^_^第三个模块从天而降喽!! 函数列表 platform.system() 获取操作系统类型,windows.linux等 platform.platform() ...

  5. UTF-8编码规则(转)

    from:http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html UTF-8是Unicode的一种实现方式,也就是它的字节 ...

  6. 简单的php socket 实例

    server: <?php set_time_limit(0); $ip = '127.0.0.1'; $port = 8888; // 1. 创建 if( ($sock = socket_cr ...

  7. httpclient 使用方式介绍

    第一:Get方式请求 package com.hct; import java.io.BufferedReader; import java.io.IOException; import java.i ...

  8. 【Java EE 学习 57】【酒店会员管理系统之分页模板书写】

    分页一直是一个比较麻烦的问题,特别是在我做的这个系统中更是有大量的分页,为了应对该问题,特地写了一个模板以方便代码重用,该模板包括后台分页的模板.前端显示的模板两部分. 一.分页分析 分页需要三种类型 ...

  9. 优化Linux内核参数

    转自:http://www.centoscn.com/CentOS/config/2013/0804/992.html vim /etc/sysctl.conf 1.net.ipv4.tcp_max_ ...

  10. 再探JS数组原生方法—没想到你是这样的数组

    最近作死又去做了一遍javascript-puzzlers上的44道变态题,这些题号称"JS语言专业八级"的水准,建议可以去试试,这里我不去解析这44道题了, ...