你想我猜小游戏(You want me to guess games)-其他
你想我猜小游戏(You want me to guess games)
#include <iostream>
#include <algorithm>
#include <string>
#include<sstream>
#include<ctime>
#include<vector>
using namespace std;
class gam2
{
public:
gam2(string str) :result1(str) {};
~gam2();
static string resultgam2;//用于存储电脑的数字
string getresult();
string compareresult();
private:
string result1;
};
string gam2::resultgam2 = "0123";
string gam2::getresult()
{
return result1;
}
string gam2::compareresult()
{
int j = 0;
int k = 0;//原本是放在第一个for循环里面的
string str1 = result1;
string str2 = gam2::resultgam2;
for (int i = 0; i < 4; i++)
{
for (int g = 0; g < 4; g++)
{
if (str1[i] == str2[g])
{
if (i == g)
j++;
else
k++;
}
}
}
string str3 = "0A0B";
str3[0] = str3[0] + j;//原本j放for循环里面,不可见
str3[2] = str3[2] + k;
return str3;
}
gam2::~gam2()
{
}
int mainmenu();
void game1();
void game2();
void paihangbang();
string getresultgam2();
int isgam2available(string* j);
int isgam1available(string* j, int* A, int* B);
void gam1errorout();//用于错误退出
void gam1victory();
void gam1get(int& C, int& A, int& B, string& i);//用于读入并更新
void switch0(int& C, int& A, int& B, string& i, string& j, string& k);
void switch02(int& C, int& A, int& B, string& i, string& j, string& k);//解决0,2,2的问题,注:每个数字代表的是4,4,2一组的数字中知道有多少个。
void switch023(int& C, int& A, int& B, string& i, string& j, string& k);
void switch03(int& C, int& A, int& B, string& i, string& j, string& k);//解决0,3,1的问题
void switch032(int& C, int& A, int& B, string& i, string& j, string& k);
void switch033(int& C, int& A, int& B, string& i, string& j, string& k);
void switch1(int& C, int& A, int& B, string& i, string& j, string& k);
void switch11(int& C, int& A, int& B, string& i, string& j, string& k);//解决1,1,2的问题
void switch112(int& C, int& A, int& B, string& i, string& j, string& k);
void switch112_1(int& C, int& A, int& B, string& i, string& j, string& k);//解决知道后三个判断第一个的问题
void switch113(int& C, int& A, int& B, string& i, string& j, string& k);
void switch12(int& C, int& A, int& B, string& i, string& j, string& k);//解决1,2,1的问题
void switch123_1(int& C, int& A, int& B, string& i, string& j, string& k);//已知k23是,从j456选择一个,里面调用了switch112_1
void switch123_2(int& C, int& A, int& B, string& i, string& j, string& k);//已知k3是,j7不是,从j456选择两个,里面调用了switch112_1
void switch13(int& C, int& A, int& B, string& i, string& j, string& k);//解决1,3,0的问题
void switch2(int& C, int& A, int& B, string& i, string& j, string& k);
void switch22(int& C, int& A, int& B, string& i, string& j, string& k);//解决2,2,0的问题
void switch22_1(int& C, int& A, int& B, string& i, string& j, string& k);
void switch3(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA0(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA00(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA001(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA01(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA1(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA10(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA12(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA2(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA21(int& C, int& A, int& B, string& i, string& j, string& k);
int main()
{
while (mainmenu());
}
//主菜单
int mainmenu()
{
system("cls");
cout << "1,你想我猜" << endl;
cout << "2,我想你猜" << endl;
cout << "3,排行榜" << endl;
cout << "4,退出" << endl;
int i;
cin >> i;
switch (i)
{
case 1:
game1();
break;
case 2:
game2();
break;
case 3:
paihangbang();
break;
case 4:
return 0;
default:
cout << "输入错误!请重新输入" << endl;
system("pause");
break;
}
return 1;
}
//游戏1本体
void game1()
{
system("cls");
cout << "请想一个不重复的四位数,如 0123 并对电脑提出的数字进行反馈,如输入 2A1B 表示有两个数字位置正确,一个数字位置不对但是在四位数中" << endl;
system("pause");
cout << "0123" << endl;
string i;//用于接收
string j = "0123456789";
string k = "0123";
int A = 0, B = 0;//用于保存对应的数字
cin >> i;
/*
while ((A == 4 && B == 0)==0)//结束条件
{
while (isgam1available(&i, &A, &B));//当返回值是0的时候,将会跳出,进行下一步,当返回值是1时,会继续执行这个子函数。
}
*/
while (isgam1available(&i, &A, &B));//当返回值是0的时候,将会跳出,进行下一步,当返回值是1时,会继续执行这个子函数。
int C = A + B;
switch (C)
{
case 0:
switch0(C, A, B, i, j, k);
break;
case 1:
switch1(C, A, B, i, j, k);
break;
case 2:
switch2(C, A, B, i, j, k);
break;
case 3:
switch3(C, A, B, i, j, k);
break;
case 4:
break;
}
//上面的整个过程完结之后,若是C!=4,则是“撒谎”的情况,若是C=4,则进行下一步,对k中的数进行组合,并依照A的值进行操作
if (C == 4)
{
switch (A)
{
case 0:
cout << k[1] << k[0] << k[2] << k[3] << endl;//2134
gam1get(C, A, B, i);
switchA0(C, A, B, i, j, k);
break;
case 1:
cout << k[1] << k[0] << k[2] << k[3] << endl;
gam1get(C, A, B, i);
switchA1(C, A, B, i, j, k);
break;
case 2:
cout << k[1] << k[0] << k[2] << k[3] << endl;
gam1get(C, A, B, i);
switchA2(C, A, B, i, j, k);
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
}
return;
}
void gam1errorout()
{
cout << "年轻人不讲武德,来骗,我一个老实巴交的电脑,真是太坏了" << endl;
system("pause");
return;
}
void gam1victory()
{
cout << "那必须是我啦!" << endl;
system("pause");
return;
}
void gam1get(int& C, int& A, int& B, string& i)
{
cin >> i;
while (isgam1available(&i, &A, &B));
C = A + B;
return;
}
int isgam1available(string* j, int* A, int* B)
{
if ((*j)[1] == 'A' && (*j)[3] == 'B')
{
*A = (*j)[0] - '0';//数据转换
*B = (*j)[2] - '0';
if ((*A + *B) > 4)
{
cout << "输入不合法,请输入如输入 2A1B 表示有两个数字位置正确,一个数字位置不对但是在四位数中" << endl;
cin >> *j;
return 1;
}
else
return 0;
}
else
{
cout << "输入不合法,请输入如输入 2A1B 表示有两个数字位置正确,一个数字位置不对但是在四位数中" << endl;
cin >> *j;
return 1;
}
}
void switch0(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[7];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
switch02(C, A, B, i, j, k);
break;
case 3:
switch03(C, A, B, i, j, k);
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch02(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
switch (C)
{
k[0] = j[6];
k[1] = j[7];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 3:
switch023(C, A, B, i, j, k);
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch023(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
k[0] = j[5];
k[1] = j[7];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
case 3:
k[0] = j[4];
k[1] = j[7];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
k[0] = j[5];
k[1] = j[6];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
break;
}
return;
}
void switch03(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
switch032(C, A, B, i, j, k);
break;
case 3:
switch033(C, A, B, i, j, k);
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch032(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[7];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j67是
k[0] = j[4];
k[1] = j[6];
k[2] = j[7];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[5];
k[1] = j[6];
k[2] = j[7];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 3:
k[0] = j[4];
k[1] = j[6];
k[2] = j[7];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[5];
k[1] = j[6];
k[2] = j[7];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch033(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
k[0] = j[4];
k[1] = j[5];
k[2] = j[7];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[4];
k[1] = j[6];
k[2] = j[7];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[5];
k[1] = j[6];
k[2] = j[7];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch1(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[7];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 1:
switch11(C, A, B, i, j, k);
break;
case 2:
switch12(C, A, B, i, j, k);
break;
case 3:
switch13(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch11(int& C, int& A, int& B, string& i, string& j, string& k)
{
//这里的策略是先对4567中的那个找出来,然后对0123进行遍历
k[0] = j[4];
k[1] = j[5];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
switch112(C, A, B, i, j, k);
break;
case 3:
switch113(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch112(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[6];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
k[1] = j[7];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
switch112_1(C, A, B, i, j, k);//这个函数将会只对k的第一位进行修改
break;
default:
gam1errorout();
break;
}
break;
case 3:
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch112_1(int& C, int& A, int& B, string& i, string& j, string& k)//只对k[0]进行修改,最多四次即可判断
{
k[0] = j[0];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[1];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[2];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[3];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch113(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[6];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
k[1] = j[5];
switch112_1(C, A, B, i, j, k);
break;
case 3:
k[1] = j[4];
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch12(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 1://这种情况7,9肯定有,从j456位选一个
k[2] = j[7];
k[3] = j[9];
switch123_1(C, A, B, i, j, k);
break;
case 2:
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 1://7,8肯定有从j456选一个
k[2] = j[7];
k[3] = j[8];
switch123_1(C, A, B, i, j, k);
break;
case 3://9肯定有,j7不是从j456选二
k[3] = j[9];
switch123_2(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
case 3://有8,j7不是456选二
k[3] = j[8];
switch123_2(C, A, B, i, j, k);
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch123_1(int& C, int& A, int& B, string& i, string& j, string& k)//已知k23是,从j456选择一个
{
k[0] = j[4];
k[1] = j[5];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://说明j6是
k[1] = j[6];
switch112_1(C, A, B, i, j, k);
break;
case 3:
k[1] = j[6];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://说明j5是
k[1] = j[5];
switch112_1(C, A, B, i, j, k);
break;
case 3://说明j4是
k[1] = j[4];
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
default:
gam1errorout();
break;
}
return;
}
void switch123_2(int& C, int& A, int& B, string& i, string& j, string& k)//已知k3是,j7不是,从j456选择两个
{
k[0] = j[7];
k[1] = j[4];
k[2] = j[5];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j6是
k[2] = j[6];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j5是
k[1] = j[5];
switch112_1(C, A, B, i, j, k);
break;
case 3://j4是
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
case 3://j45是
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch13(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[8];
k[1] = j[4];
k[2] = j[5];
k[3] = j[6];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j7是
k[3] = j[7];//此时k=8457
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j6是
k[2] = j[6];//此时k=8467
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j567是
k[1] = j[5];//k=8567
switch112_1(C, A, B, i, j, k);
break;
case 3://j467是
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
case 3://j457是
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
case 3://j456都是
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch2(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[7];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 0://与0,2,2同理
j = "4567012389";
switch02(C, A, B, i, j, k);
break;
case 1://与1,2,1同理
j = "4567012389";
switch12(C, A, B, i, j, k);
break;
case 2:
switch22(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch22(int& C, int& A, int& B, string& i, string& j, string& k)//具体思路是先找两个再找两个,两次的程序差别不大,减少工作量
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 0://j67是
switch22_1(C, A, B, i, j, k);
break;
case 1:
k[1] = j[6];//k=4689
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 0://j57是
switch22_1(C, A, B, i, j, k);
break;
case 1:
k[1] = j[7];//k=4789
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 0://j56是
switch22_1(C, A, B, i, j, k);
break;
case 2://j47是
switch22_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
case 2://j46是
switch22_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
case 2://j45是
switch22_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch22_1(int& C, int& A, int& B, string& i, string& j, string& k)
{
j = "4567012389";
k[2] = j[4];
k[3] = j[5];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j67是
k[2] = j[6];
k[3] = j[7];
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 3:
k[3] = j[6];//k=4689
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j57是
k[2] = j[5];
k[3] = j[7];
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 3:
k[3] = j[7];//k=4789
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j56是
k[2] = j[5];
k[3] = j[6];
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4://j47是
break;
default:
gam1errorout();
break;
}
break;
case 4://j46是
break;
default:
gam1errorout();
break;
}
break;
case 4://j45是
break;
default:
gam1errorout();
break;
}
return;
}
void switch3(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[7];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 0://同0,3,1
j = "4567012389";
switch03(C, A, B, i, j, k);
break;
case 1://同1,3,0
j = "4567012389";
switch13(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switchA0(int& C, int& A, int& B, string& i, string& j, string& k)
{
if (C != 4 || A == 3)
{
gam1errorout();
return;
}
else
{
switch (A)
{
case 0:
cout << k[2] << k[1] << k[0] << k[3] << endl;//3214
gam1get(C, A, B, i);
switchA00(C, A, B, i, j, k);
break;
case 1:
cout << k[2] << k[1] << k[0] << k[3] << endl;//3214
gam1get(C, A, B, i);
switchA01(C, A, B, i, j, k);
break;
case 2:
cout << k[1] << k[0] << k[3] << k[2] << endl;//2143
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
default:
gam1errorout();
break;
}
}
return;
}
void switchA00(int& C, int& A, int& B, string& i, string& j, string& k)
{
if (C != 4 || A == 3)
{
gam1errorout();
return;
}
else
{
switch (A)
{
case 0:
cout << k[3] << k[2] << k[1] << k[0] << endl;//4321
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 1:
cout << k[2] << k[3] << k[1] << k[0] << endl;//3421
gam1get(C, A, B, i);
switchA001(C, A, B, i, j, k);
break;
case 2:
cout << k[2] << k[3] << k[0] << k[1] << endl;//3412
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
default:
gam1errorout();
break;
}
}
return;
}
void switchA001(int& C, int& A, int& B, string& i, string& j, string& k)
{
if (C != 4 || A == 3)
{
gam1errorout();
return;
}
else
{
switch (A)
{
case 0:
cout << k[3] << k[2] << k[0] << k[1] << endl;//4312
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
}
return;
}
void switchA01(int& C, int& A, int& B, string& i, string& j, string& k)
{
if (C != 4 || A == 3)
{
gam1errorout();
return;
}
else
{
switch (A)
{
case 0:
cout << k[1] << k[2] << k[3] << k[0] << endl;//2341
gam1get(C, A, B, i);
switch (A)
{
case 0:
cout << k[3] << k[0] << k[1] << k[2] << endl;//4123
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 1:
cout << k[1] << k[3] << k[0] << k[2] << endl;//2413
gam1get(C, A, B, i);
switch (A)
{
case 0:
cout << k[2] << k[0] << k[3] << k[1] << endl;//3142
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
default:
gam1errorout();
break;
}
}
return;
}
void switchA1(int& C, int& A, int& B, string& i, string& j, string& k)
{
if (C != 4 || A == 3)
{
gam1errorout();
return;
}
else
{
switch (A)
{
case 0:
cout << k[2] << k[1] << k[0] << k[3] << endl;//3214
gam1get(C, A, B, i);
switchA10(C, A, B, i, j, k);
break;
case 2:
cout << k[2] << k[1] << k[0] << k[3] << endl;//3214
gam1get(C, A, B, i);
switchA12(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
}
return;
}
void switchA10(int& C, int& A, int& B, string& i, string& j, string& k)
{
if (C != 4 || A == 3)
{
gam1errorout();
return;
}
else
{
switch (A)
{
case 0:
cout << k[0] << k[2] << k[3] << k[1] << endl;//1342
gam1get(C, A, B, i);
switch (A)
{
case 1:
cout << k[0] << k[3] << k[1] << k[2] << endl;//1423
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 2:
cout << k[2] << k[1] << k[3] << k[0] << endl;//3241
gam1get(C, A, B, i);
switch (A)
{
case 1:
cout << k[3] << k[1] << k[0] << k[2] << endl;//4213
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
default:
gam1errorout();
break;
}
}
return;
}
void switchA12(int& C, int& A, int& B, string& i, string& j, string& k)
{
switch (A)
{
case 0:
cout << k[1] << k[3] << k[2] << k[0] << endl;//2431
gam1get(C, A, B, i);
switch (A)
{
case 1:
cout << k[3] << k[0] << k[2] << k[1] << endl;//4132
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 1:
cout << k[2] << k[0] << k[1] << k[3] << endl;//3124
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 2:
cout << k[1] << k[2] << k[0] << k[3] << endl;//2314
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
default:
gam1errorout();
break;
}
return;
}
void switchA2(int& C, int& A, int& B, string& i, string& j, string& k)
{
switch (A)
{
case 0:
cout << k[0] << k[1] << k[3] << k[2] << endl;//1243
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 1:
cout << k[2] << k[1] << k[0] << k[3] << endl;//3214
gam1get(C, A, B, i);
switchA21(C, A, B, i, j, k);
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
return;
}
void switchA21(int& C, int& A, int& B, string& i, string& j, string& k)
{
switch (A)
{
case 0:
cout << k[0] << k[3] << k[2] << k[1] << endl;//1432
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 1:
cout << k[0] << k[2] << k[1] << k[3] << endl;//1324
gam1get(C, A, B, i);
switch (A)
{
case 0:
cout << k[3] << k[1] << k[2] << k[0] << endl;//4231
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
return;
}
//游戏2本体
void game2()
{
system("cls");
cout << "游戏开始,电脑已经想出了一个数字,请输入一个不重复的四位数,如 0123 ,若输出 2A1B 表示有两个数字位置正确,一个数字位置不对但是在四位数中" << endl;
int i = 0;
string j;
gam2::resultgam2 = getresultgam2();
for (i = 0; i < 15; i++)//用于控制回合数
{
cin >> j;
while (isgam2available(&j));//当返回值是0的时候,将会跳出,进行下一步,当返回值是1时,会继续执行这个子函数。
gam2 game = j;//不是很理解这个传值的机制或者说,初始化
if ((gam2::resultgam2).compare(game.getresult()) == 0)//比较两个string类型字符串是否相等
{
cout << "恭喜你答对了!" << endl;
break;
}
else
{
cout << game.compareresult() << endl;//输出反馈
}
}
if (i >= 15)
cout << "很遗憾,未在15回合内猜出正确答案" << endl;
system("pause");
return;
}
//初始化一个gam2的静态变量
string getresultgam2()
{
char temp[] = "0123456789";
random_shuffle(temp, temp + 10);
temp[4] = 0;
return temp;
}
//判断游戏2输入字符是否合法
int isgam2available(string* j)
{
int count[10] = { 0 };//count[n]表示数字n对应的数组位置的数,如果这个数字出现了不止一次,那么这个位置的数就会自增不止一次,它的数字就会大于1
for (int i = 0; i < 4; i++)
{
if ((*j)[i] >= '0' && (*j)[i] <= '9')//原本是j[i]
{
int n = (*j)[i] - '0';//提取数字
count[n]++;
}
else
{
cout << "存在非法字符,请重新输入:" << endl;
cin >> *j;
return 1;
}
}
for (int i = 0; i < 10; i++)//这里的i必须要声明数据类型
{
if (count[i] > 1)
{
cout << "存在重复数字,请输入含不重复数字的四位数,如0123:" << endl;
cin >> *j;
return 1;
}
}
return 0;
}
void paihangbang()
{
system("cls");
cout << "其实这只是一个摆设,想不到吧" << endl;
system("pause");
return;
}
————————
#include <iostream>
#include <algorithm>
#include <string>
#include<sstream>
#include<ctime>
#include<vector>
using namespace std;
class gam2
{
public:
gam2(string str) :result1(str) {};
~gam2();
static string resultgam2;//用于存储电脑的数字
string getresult();
string compareresult();
private:
string result1;
};
string gam2::resultgam2 = "0123";
string gam2::getresult()
{
return result1;
}
string gam2::compareresult()
{
int j = 0;
int k = 0;//原本是放在第一个for循环里面的
string str1 = result1;
string str2 = gam2::resultgam2;
for (int i = 0; i < 4; i++)
{
for (int g = 0; g < 4; g++)
{
if (str1[i] == str2[g])
{
if (i == g)
j++;
else
k++;
}
}
}
string str3 = "0A0B";
str3[0] = str3[0] + j;//原本j放for循环里面,不可见
str3[2] = str3[2] + k;
return str3;
}
gam2::~gam2()
{
}
int mainmenu();
void game1();
void game2();
void paihangbang();
string getresultgam2();
int isgam2available(string* j);
int isgam1available(string* j, int* A, int* B);
void gam1errorout();//用于错误退出
void gam1victory();
void gam1get(int& C, int& A, int& B, string& i);//用于读入并更新
void switch0(int& C, int& A, int& B, string& i, string& j, string& k);
void switch02(int& C, int& A, int& B, string& i, string& j, string& k);//解决0,2,2的问题,注:每个数字代表的是4,4,2一组的数字中知道有多少个。
void switch023(int& C, int& A, int& B, string& i, string& j, string& k);
void switch03(int& C, int& A, int& B, string& i, string& j, string& k);//解决0,3,1的问题
void switch032(int& C, int& A, int& B, string& i, string& j, string& k);
void switch033(int& C, int& A, int& B, string& i, string& j, string& k);
void switch1(int& C, int& A, int& B, string& i, string& j, string& k);
void switch11(int& C, int& A, int& B, string& i, string& j, string& k);//解决1,1,2的问题
void switch112(int& C, int& A, int& B, string& i, string& j, string& k);
void switch112_1(int& C, int& A, int& B, string& i, string& j, string& k);//解决知道后三个判断第一个的问题
void switch113(int& C, int& A, int& B, string& i, string& j, string& k);
void switch12(int& C, int& A, int& B, string& i, string& j, string& k);//解决1,2,1的问题
void switch123_1(int& C, int& A, int& B, string& i, string& j, string& k);//已知k23是,从j456选择一个,里面调用了switch112_1
void switch123_2(int& C, int& A, int& B, string& i, string& j, string& k);//已知k3是,j7不是,从j456选择两个,里面调用了switch112_1
void switch13(int& C, int& A, int& B, string& i, string& j, string& k);//解决1,3,0的问题
void switch2(int& C, int& A, int& B, string& i, string& j, string& k);
void switch22(int& C, int& A, int& B, string& i, string& j, string& k);//解决2,2,0的问题
void switch22_1(int& C, int& A, int& B, string& i, string& j, string& k);
void switch3(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA0(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA00(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA001(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA01(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA1(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA10(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA12(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA2(int& C, int& A, int& B, string& i, string& j, string& k);
void switchA21(int& C, int& A, int& B, string& i, string& j, string& k);
int main()
{
while (mainmenu());
}
//主菜单
int mainmenu()
{
system("cls");
cout << "1,你想我猜" << endl;
cout << "2,我想你猜" << endl;
cout << "3,排行榜" << endl;
cout << "4,退出" << endl;
int i;
cin >> i;
switch (i)
{
case 1:
game1();
break;
case 2:
game2();
break;
case 3:
paihangbang();
break;
case 4:
return 0;
default:
cout << "输入错误!请重新输入" << endl;
system("pause");
break;
}
return 1;
}
//游戏1本体
void game1()
{
system("cls");
cout << "请想一个不重复的四位数,如 0123 并对电脑提出的数字进行反馈,如输入 2A1B 表示有两个数字位置正确,一个数字位置不对但是在四位数中" << endl;
system("pause");
cout << "0123" << endl;
string i;//用于接收
string j = "0123456789";
string k = "0123";
int A = 0, B = 0;//用于保存对应的数字
cin >> i;
/*
while ((A == 4 && B == 0)==0)//结束条件
{
while (isgam1available(&i, &A, &B));//当返回值是0的时候,将会跳出,进行下一步,当返回值是1时,会继续执行这个子函数。
}
*/
while (isgam1available(&i, &A, &B));//当返回值是0的时候,将会跳出,进行下一步,当返回值是1时,会继续执行这个子函数。
int C = A + B;
switch (C)
{
case 0:
switch0(C, A, B, i, j, k);
break;
case 1:
switch1(C, A, B, i, j, k);
break;
case 2:
switch2(C, A, B, i, j, k);
break;
case 3:
switch3(C, A, B, i, j, k);
break;
case 4:
break;
}
//上面的整个过程完结之后,若是C!=4,则是“撒谎”的情况,若是C=4,则进行下一步,对k中的数进行组合,并依照A的值进行操作
if (C == 4)
{
switch (A)
{
case 0:
cout << k[1] << k[0] << k[2] << k[3] << endl;//2134
gam1get(C, A, B, i);
switchA0(C, A, B, i, j, k);
break;
case 1:
cout << k[1] << k[0] << k[2] << k[3] << endl;
gam1get(C, A, B, i);
switchA1(C, A, B, i, j, k);
break;
case 2:
cout << k[1] << k[0] << k[2] << k[3] << endl;
gam1get(C, A, B, i);
switchA2(C, A, B, i, j, k);
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
}
return;
}
void gam1errorout()
{
cout << "年轻人不讲武德,来骗,我一个老实巴交的电脑,真是太坏了" << endl;
system("pause");
return;
}
void gam1victory()
{
cout << "那必须是我啦!" << endl;
system("pause");
return;
}
void gam1get(int& C, int& A, int& B, string& i)
{
cin >> i;
while (isgam1available(&i, &A, &B));
C = A + B;
return;
}
int isgam1available(string* j, int* A, int* B)
{
if ((*j)[1] == 'A' && (*j)[3] == 'B')
{
*A = (*j)[0] - '0';//数据转换
*B = (*j)[2] - '0';
if ((*A + *B) > 4)
{
cout << "输入不合法,请输入如输入 2A1B 表示有两个数字位置正确,一个数字位置不对但是在四位数中" << endl;
cin >> *j;
return 1;
}
else
return 0;
}
else
{
cout << "输入不合法,请输入如输入 2A1B 表示有两个数字位置正确,一个数字位置不对但是在四位数中" << endl;
cin >> *j;
return 1;
}
}
void switch0(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[7];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
switch02(C, A, B, i, j, k);
break;
case 3:
switch03(C, A, B, i, j, k);
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch02(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
switch (C)
{
k[0] = j[6];
k[1] = j[7];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 3:
switch023(C, A, B, i, j, k);
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch023(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
k[0] = j[5];
k[1] = j[7];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
case 3:
k[0] = j[4];
k[1] = j[7];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
k[0] = j[5];
k[1] = j[6];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
break;
}
return;
}
void switch03(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
switch032(C, A, B, i, j, k);
break;
case 3:
switch033(C, A, B, i, j, k);
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch032(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[7];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j67是
k[0] = j[4];
k[1] = j[6];
k[2] = j[7];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[5];
k[1] = j[6];
k[2] = j[7];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 3:
k[0] = j[4];
k[1] = j[6];
k[2] = j[7];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[5];
k[1] = j[6];
k[2] = j[7];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch033(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
k[0] = j[4];
k[1] = j[5];
k[2] = j[7];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[4];
k[1] = j[6];
k[2] = j[7];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[5];
k[1] = j[6];
k[2] = j[7];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch1(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[7];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 1:
switch11(C, A, B, i, j, k);
break;
case 2:
switch12(C, A, B, i, j, k);
break;
case 3:
switch13(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch11(int& C, int& A, int& B, string& i, string& j, string& k)
{
//这里的策略是先对4567中的那个找出来,然后对0123进行遍历
k[0] = j[4];
k[1] = j[5];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
switch112(C, A, B, i, j, k);
break;
case 3:
switch113(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch112(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[6];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
k[1] = j[7];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
switch112_1(C, A, B, i, j, k);//这个函数将会只对k的第一位进行修改
break;
default:
gam1errorout();
break;
}
break;
case 3:
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch112_1(int& C, int& A, int& B, string& i, string& j, string& k)//只对k[0]进行修改,最多四次即可判断
{
k[0] = j[0];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[1];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[2];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 3:
k[0] = j[3];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch113(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[6];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2:
k[1] = j[5];
switch112_1(C, A, B, i, j, k);
break;
case 3:
k[1] = j[4];
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch12(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[8];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 1://这种情况7,9肯定有,从j456位选一个
k[2] = j[7];
k[3] = j[9];
switch123_1(C, A, B, i, j, k);
break;
case 2:
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 1://7,8肯定有从j456选一个
k[2] = j[7];
k[3] = j[8];
switch123_1(C, A, B, i, j, k);
break;
case 3://9肯定有,j7不是从j456选二
k[3] = j[9];
switch123_2(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
case 3://有8,j7不是456选二
k[3] = j[8];
switch123_2(C, A, B, i, j, k);
break;
case 4:
break;
default:
gam1errorout();
break;
}
return;
}
void switch123_1(int& C, int& A, int& B, string& i, string& j, string& k)//已知k23是,从j456选择一个
{
k[0] = j[4];
k[1] = j[5];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://说明j6是
k[1] = j[6];
switch112_1(C, A, B, i, j, k);
break;
case 3:
k[1] = j[6];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://说明j5是
k[1] = j[5];
switch112_1(C, A, B, i, j, k);
break;
case 3://说明j4是
k[1] = j[4];
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
default:
gam1errorout();
break;
}
return;
}
void switch123_2(int& C, int& A, int& B, string& i, string& j, string& k)//已知k3是,j7不是,从j456选择两个
{
k[0] = j[7];
k[1] = j[4];
k[2] = j[5];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j6是
k[2] = j[6];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j5是
k[1] = j[5];
switch112_1(C, A, B, i, j, k);
break;
case 3://j4是
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
case 3://j45是
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch13(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[8];
k[1] = j[4];
k[2] = j[5];
k[3] = j[6];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j7是
k[3] = j[7];//此时k=8457
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j6是
k[2] = j[6];//此时k=8467
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j567是
k[1] = j[5];//k=8567
switch112_1(C, A, B, i, j, k);
break;
case 3://j467是
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
case 3://j457是
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
case 3://j456都是
switch112_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch2(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[7];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 0://与0,2,2同理
j = "4567012389";
switch02(C, A, B, i, j, k);
break;
case 1://与1,2,1同理
j = "4567012389";
switch12(C, A, B, i, j, k);
break;
case 2:
switch22(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch22(int& C, int& A, int& B, string& i, string& j, string& k)//具体思路是先找两个再找两个,两次的程序差别不大,减少工作量
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[8];
k[3] = j[9];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 0://j67是
switch22_1(C, A, B, i, j, k);
break;
case 1:
k[1] = j[6];//k=4689
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 0://j57是
switch22_1(C, A, B, i, j, k);
break;
case 1:
k[1] = j[7];//k=4789
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 0://j56是
switch22_1(C, A, B, i, j, k);
break;
case 2://j47是
switch22_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
case 2://j46是
switch22_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
break;
case 2://j45是
switch22_1(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switch22_1(int& C, int& A, int& B, string& i, string& j, string& k)
{
j = "4567012389";
k[2] = j[4];
k[3] = j[5];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j67是
k[2] = j[6];
k[3] = j[7];
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 3:
k[3] = j[6];//k=4689
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j57是
k[2] = j[5];
k[3] = j[7];
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 3:
k[3] = j[7];//k=4789
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 2://j56是
k[2] = j[5];
k[3] = j[6];
switch (C)
{
case 4:
break;
default:
gam1errorout();
break;
}
break;
case 4://j47是
break;
default:
gam1errorout();
break;
}
break;
case 4://j46是
break;
default:
gam1errorout();
break;
}
break;
case 4://j45是
break;
default:
gam1errorout();
break;
}
return;
}
void switch3(int& C, int& A, int& B, string& i, string& j, string& k)
{
k[0] = j[4];
k[1] = j[5];
k[2] = j[6];
k[3] = j[7];
cout << k << endl;
gam1get(C, A, B, i);
switch (C)
{
case 0://同0,3,1
j = "4567012389";
switch03(C, A, B, i, j, k);
break;
case 1://同1,3,0
j = "4567012389";
switch13(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
return;
}
void switchA0(int& C, int& A, int& B, string& i, string& j, string& k)
{
if (C != 4 || A == 3)
{
gam1errorout();
return;
}
else
{
switch (A)
{
case 0:
cout << k[2] << k[1] << k[0] << k[3] << endl;//3214
gam1get(C, A, B, i);
switchA00(C, A, B, i, j, k);
break;
case 1:
cout << k[2] << k[1] << k[0] << k[3] << endl;//3214
gam1get(C, A, B, i);
switchA01(C, A, B, i, j, k);
break;
case 2:
cout << k[1] << k[0] << k[3] << k[2] << endl;//2143
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
default:
gam1errorout();
break;
}
}
return;
}
void switchA00(int& C, int& A, int& B, string& i, string& j, string& k)
{
if (C != 4 || A == 3)
{
gam1errorout();
return;
}
else
{
switch (A)
{
case 0:
cout << k[3] << k[2] << k[1] << k[0] << endl;//4321
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 1:
cout << k[2] << k[3] << k[1] << k[0] << endl;//3421
gam1get(C, A, B, i);
switchA001(C, A, B, i, j, k);
break;
case 2:
cout << k[2] << k[3] << k[0] << k[1] << endl;//3412
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
default:
gam1errorout();
break;
}
}
return;
}
void switchA001(int& C, int& A, int& B, string& i, string& j, string& k)
{
if (C != 4 || A == 3)
{
gam1errorout();
return;
}
else
{
switch (A)
{
case 0:
cout << k[3] << k[2] << k[0] << k[1] << endl;//4312
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
}
return;
}
void switchA01(int& C, int& A, int& B, string& i, string& j, string& k)
{
if (C != 4 || A == 3)
{
gam1errorout();
return;
}
else
{
switch (A)
{
case 0:
cout << k[1] << k[2] << k[3] << k[0] << endl;//2341
gam1get(C, A, B, i);
switch (A)
{
case 0:
cout << k[3] << k[0] << k[1] << k[2] << endl;//4123
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 1:
cout << k[1] << k[3] << k[0] << k[2] << endl;//2413
gam1get(C, A, B, i);
switch (A)
{
case 0:
cout << k[2] << k[0] << k[3] << k[1] << endl;//3142
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
default:
gam1errorout();
break;
}
}
return;
}
void switchA1(int& C, int& A, int& B, string& i, string& j, string& k)
{
if (C != 4 || A == 3)
{
gam1errorout();
return;
}
else
{
switch (A)
{
case 0:
cout << k[2] << k[1] << k[0] << k[3] << endl;//3214
gam1get(C, A, B, i);
switchA10(C, A, B, i, j, k);
break;
case 2:
cout << k[2] << k[1] << k[0] << k[3] << endl;//3214
gam1get(C, A, B, i);
switchA12(C, A, B, i, j, k);
break;
default:
gam1errorout();
break;
}
}
return;
}
void switchA10(int& C, int& A, int& B, string& i, string& j, string& k)
{
if (C != 4 || A == 3)
{
gam1errorout();
return;
}
else
{
switch (A)
{
case 0:
cout << k[0] << k[2] << k[3] << k[1] << endl;//1342
gam1get(C, A, B, i);
switch (A)
{
case 1:
cout << k[0] << k[3] << k[1] << k[2] << endl;//1423
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 2:
cout << k[2] << k[1] << k[3] << k[0] << endl;//3241
gam1get(C, A, B, i);
switch (A)
{
case 1:
cout << k[3] << k[1] << k[0] << k[2] << endl;//4213
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
default:
gam1errorout();
break;
}
}
return;
}
void switchA12(int& C, int& A, int& B, string& i, string& j, string& k)
{
switch (A)
{
case 0:
cout << k[1] << k[3] << k[2] << k[0] << endl;//2431
gam1get(C, A, B, i);
switch (A)
{
case 1:
cout << k[3] << k[0] << k[2] << k[1] << endl;//4132
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 1:
cout << k[2] << k[0] << k[1] << k[3] << endl;//3124
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 2:
cout << k[1] << k[2] << k[0] << k[3] << endl;//2314
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
default:
gam1errorout();
break;
}
return;
}
void switchA2(int& C, int& A, int& B, string& i, string& j, string& k)
{
switch (A)
{
case 0:
cout << k[0] << k[1] << k[3] << k[2] << endl;//1243
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 1:
cout << k[2] << k[1] << k[0] << k[3] << endl;//3214
gam1get(C, A, B, i);
switchA21(C, A, B, i, j, k);
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
return;
}
void switchA21(int& C, int& A, int& B, string& i, string& j, string& k)
{
switch (A)
{
case 0:
cout << k[0] << k[3] << k[2] << k[1] << endl;//1432
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 1:
cout << k[0] << k[2] << k[1] << k[3] << endl;//1324
gam1get(C, A, B, i);
switch (A)
{
case 0:
cout << k[3] << k[1] << k[2] << k[0] << endl;//4231
gam1get(C, A, B, i);
switch (A)
{
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
break;
case 4:
gam1victory();
break;
default:
gam1errorout();
break;
}
return;
}
//游戏2本体
void game2()
{
system("cls");
cout << "游戏开始,电脑已经想出了一个数字,请输入一个不重复的四位数,如 0123 ,若输出 2A1B 表示有两个数字位置正确,一个数字位置不对但是在四位数中" << endl;
int i = 0;
string j;
gam2::resultgam2 = getresultgam2();
for (i = 0; i < 15; i++)//用于控制回合数
{
cin >> j;
while (isgam2available(&j));//当返回值是0的时候,将会跳出,进行下一步,当返回值是1时,会继续执行这个子函数。
gam2 game = j;//不是很理解这个传值的机制或者说,初始化
if ((gam2::resultgam2).compare(game.getresult()) == 0)//比较两个string类型字符串是否相等
{
cout << "恭喜你答对了!" << endl;
break;
}
else
{
cout << game.compareresult() << endl;//输出反馈
}
}
if (i >= 15)
cout << "很遗憾,未在15回合内猜出正确答案" << endl;
system("pause");
return;
}
//初始化一个gam2的静态变量
string getresultgam2()
{
char temp[] = "0123456789";
random_shuffle(temp, temp + 10);
temp[4] = 0;
return temp;
}
//判断游戏2输入字符是否合法
int isgam2available(string* j)
{
int count[10] = { 0 };//count[n]表示数字n对应的数组位置的数,如果这个数字出现了不止一次,那么这个位置的数就会自增不止一次,它的数字就会大于1
for (int i = 0; i < 4; i++)
{
if ((*j)[i] >= '0' && (*j)[i] <= '9')//原本是j[i]
{
int n = (*j)[i] - '0';//提取数字
count[n]++;
}
else
{
cout << "存在非法字符,请重新输入:" << endl;
cin >> *j;
return 1;
}
}
for (int i = 0; i < 10; i++)//这里的i必须要声明数据类型
{
if (count[i] > 1)
{
cout << "存在重复数字,请输入含不重复数字的四位数,如0123:" << endl;
cin >> *j;
return 1;
}
}
return 0;
}
void paihangbang()
{
system("cls");
cout << "其实这只是一个摆设,想不到吧" << endl;
system("pause");
return;
}