您好我正在完成作业并且遇到了这个程序的问题。
“23”的游戏是一个双人游戏,从一堆23个牙签开始。玩家轮流退出,一次取出1,2或3个牙签。撤回最后一根牙签的玩家输掉比赛。写一个播放“23”的人与计算机程序。人类应该始终先行动。当它是计算机时,它应该按照以下规则进行播放:
取出4-X牙签,其中X是人类在前一回合中退出的牙签数。
如果剩下2到4根牙签,那么电脑应该取出足够的牙签,留下1根牙签。
如果剩下一根牙签,则计算机必须拿走它并且它会丢失。
当人类玩家输入要撤回的牙签数量时,程序应执行输入验证。确保输入的数字介于1和3之间,并且玩家不会尝试取出比堆中存在的更多牙签。
这是我的代码。任何帮助将不胜感激。
#include <iostream>
using namespace std;
void compAlgorithm(int totalTp, int compTp, int userTp, int countr) {
do {
if (totalTp > 4) {
compTp = 4 - userTp;
totalTp += totalTp - compTp;
countr--;
}
if (totalTp >= 2 && totalTp <= 4) {
switch (totalTp) {
case 2:
totalTp += totalTp - 1;
countr--;
break;
case 3:
totalTp += totalTp - 2;
countr--;
break;
case 4:
totalTp += totalTp - 3;
countr--;
break;
}
}
} while (countr == 1);
}
int main() {
int userTp = 0;
int compTp = 0;
int totalTp = 23;
int countr = 0;
do {
if (countr == 0) {
cout << "please enter a vale of toothpics between 1 and 3" << endl;
cin >> userTp;
totalTp += totalTp - userTp;
countr++;
}
else if (countr == 1) {
compAlgorithm;
}
} while (totalTp >= 2);
if (totalTp == 1 && countr == 1) {
cout << "you win" << endl;
}
else if (totalTp > 0 && totalTp < 2 && countr == 0) {
cout << "please enter a vale of toothpics between 1 and 2" << endl;
cin >> userTp;
totalTp = totalTp - userTp;
switch (totalTp) {
case 1:
cout << "you win" << endl;
break;
case 2:
cout << "you loose" << endl;
break;
}
}
system("pause");
return 0;
}
提前感谢。
答案 0 :(得分:3)
这是错误的:
else if (countr == 1) {
compAlgorithm;
}
如果这是您的意图,您必须将参数传递给此函数调用。目前,这一行compAlgorithm;
什么都不做,可能导致无限循环。
答案 1 :(得分:0)
我认为这可能是因为如果您没有指定任何内容,C ++会通过函数将参数作为值传递。在函数compAlgorithm
中,您必须在totalTp
和countr
中使用引用,因为您希望它们在范围之外进行更改。我留下这个link来了解更多相关信息。