main.cpp
#include <iostream>
#include "tips.h"
#include "guess.h"
#include <string>
int main(int argc, char const *argv[])
{
std::string guess_in;
std::cout << "Please enter your num:";
while (1)
{
guess guess(1, 100);
while (1)
{
try
{
std::cout << "your num : ";
std::cin >> guess_in;
if (guess_in.empty())
{
std::cout << "your num is empty" << std::endl;
continue;
}
if (guess_in == "exit")
{
std::cout << "Game is end" << std::endl;
exit(0);
}
int guess_num = std::stoi(guess_in, 0, 0);
int result = guess_num_in(guess, guess_num);
if (result == UNLANFUL)
{
std::cout << myerror(result) << std::endl;
break;
}
if (result == SUCCES)
{
std::cout << myerror(result) << std::endl;
break;
}
std::cout << myerror(result) << std::endl;
}
catch (const std::exception &e)
{
std::cout << "Please enter correct num" << std::endl;
}
}
}
return 0;
}
guess.h
#if !defined(__GUESS__)
#define __GUESS__
typedef int guess_t;
class guess
{
private:
int res_num;
public:
guess();
guess(int left,int right);
~guess();
public:
friend guess_t guess_num_in(guess &guess, int &);
};
#endif // __GUESS__
guess.cpp
#include <iostream>
#include <string>
#include "guess.h"
#include "tips.h"
#include <random>
guess::guess()
{
}
guess::guess(int left, int right)
{
// std::default_random_engine dre;
std::random_device rd;
std::mt19937 gen(rd()); // 使用 Mersenne Twister 引擎
std::uniform_int_distribution<int> di(left, right);
this->res_num = di(gen);
}
guess_t guess_num_in(guess &guess, int &num)
{
if (num > guess.res_num)
return EXCEED;
if (num < guess.res_num)
return LOWEER;
if (num == guess.res_num)
return SUCCES;
return 0;
}
guess::~guess(){}
tips.h
#if !defined(__MY_ERROR_)
#define __MY_ERROR_
#include <string>
#define UNLANFUL -1 /*Illegal parameter : 非法参数*/
#define EXCEED 1 /*exceed get_num*/
#define LOWEER 2 /*lower get_num*/
#define SUCCES 3 /*geuss is succes*/
typedef int error_t;
static std::string error;
std::string myerror(error_t &error_num);
#endif // __MY_ERROR_
tips.cpp
#include <iostream>
#include <string>
#include "tips.h"
std::string myerror(error_t &error_num)
{
switch (error_num)
{
case UNLANFUL:
error = "Illegal parameter";
return error;
case EXCEED:
error = "exceed guess_num";
return error;
case LOWEER:
error = "lower guess_num";
return error;
case SUCCES:
error = "geuss is succes";
return error;
default:
break;
}
return NULL;
}