c++猜数字小游戏

好玩,最好俩人一起玩呃。。

GIF

没咋优化,乱七八糟的。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <queue>

using namespace std;

queue<string> guess, result;

string randAns() {
size_t temp;
string ans = "", nums = "0123456789";

srand((unsigned)time(0));
for (int i = 0; i < 4; ++i) {
temp = rand() % (10 - i);
ans = ans + nums[temp];
nums = nums.erase(temp, 1);
}

return ans;
}

void print(size_t end = 0) {
system("cls");
queue<string> guess_copy = guess, result_copy = result;
printf(" # %7s %s\n", "猜数字", "结果");
int i = 0;
while (!guess_copy.empty()) {
printf("%3d %s %s\n", ++i, guess_copy.front().c_str(), result_copy.front().c_str());
guess_copy.pop();
result_copy.pop();
}
if (end == 0) printf("%3d ", ++i);
}

bool equal(string str1, string str2, size_t end) {
for (int i = 0; i < end; ++i)
if (str1[i] != str2[i])
return false;
return true;
}

string findAns(string ans, string getAns) {
size_t cntA = 0, cntB = 0;
string temp = "";

for (int j = 0; j < 4; ++j) {
if (ans.find(getAns[j]) != string::npos) cntB++;
if (ans[j] == getAns[j]) cntA++, cntB--;
}

for (size_t j = 0; j < cntA; ++j) temp += "A";
for (size_t j = 0; j < cntB; ++j) temp += "O";

return temp;
}

int main() {
//system("chcp 65001");
size_t getCase;
do {
string ans, getAns, getResult, temp;

ans.resize(4);
getAns.resize(4);
getResult.resize(4);

while (!guess.empty()) guess.pop();
while (!result.empty()) result.pop();

system("cls");
cout << R"(猜一个四位数,没有重复的数字(1359,0482...)
结果一个A表示位置和数字都对,
结果一个O表示只有数字对了,位置不对。
例子:
# 猜数字 结果
1 1234 O
2 5678 OOO
3 8765 AOO
4 8675 OOO
5 6785 AAO
6 1785 AA
7 2786 AAAA
你找到了,恭喜!一共用了 7 次。

自动出题,自动给答案请扣1。
自动出题,手动给答案请扣2。
手动出题,手动给答案请扣3。
退出请扣4。)" << "\n";
scanf("%zu", &getCase);

switch (getCase) {
case 1:
ans = randAns();
for (int i = 1;; ++i) {
print();

scanf("%s", &getAns[0]);
guess.push(getAns);

temp = findAns(ans, getAns);
result.push(temp);

if (temp == "AAAA") {
print(1);
printf("你找到了,恭喜!一共用了 %d 次。\n", i);
break;
}
}
break;
case 2:
ans = randAns();
case 3:
if (getCase == 3){
printf("\n请输入答案(无重复数字的四位数):");
scanf("%s", &ans[0]);
}
printf("\n写完答案后面的结果记得加空格(1234 AAOO)。\n");
printf("如果没有结果就写\"None\"。\n");
printf("结果 A在前 O在后。\n");
printf("答案是:%4s 请不要告诉对方哦!\n", ans.c_str());
system("pause");
system("cls");

for (int i = 1;; ++i) {
print();
scanf("%s %s", &getAns[0], &getResult[0]);
guess.push(getAns);
temp = findAns(ans, getAns);
result.push(temp);

if (!equal(getResult, temp, temp.size()) || (temp == "" && (getResult != "None"))) {
printf("结果给错了,\n");
printf("结果应该是%s\n", temp.c_str());
system("pause");
}

if (temp == "AAAA") {
print(1);
printf("你找到了,恭喜!一共用了 %d 次。\n", i);
break;
}
}
break;
case 4:
printf("ヾ( ̄▽ ̄)Bye~Bye~\n");
break;
default:
printf("错误的数字,请重试!\n");
break;
}
system("pause");
} while (getCase != 4);

return 0;
}
评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...