除了while循环外,代码中的所有内容都可以正常工作,我不知道如何修复它(代码有点乱):
float paper1 = 1, rock1 = 3, scissors1 = 2, paper2 = -1, rock2 = -3,
scissors2 = -2, life1 = 3, life2 = 3, number1, number2, result;
printf("first player, choose a number\n");
scanf("%f", &number1);
if (number1 == 3) {
printf("you choose rock\n");
} else if (number1 == 2) {
printf("you choose scissors\n");
} else if (number1 == 1) {
printf("you choose paper\n");
} else {
printf("you choose the wrong number\n");
}
printf("second player, choose a number\n");
scanf("%f", &number2);
if (number2 == -3) {
printf("you choose rock\n");
} else if (number2 == -2) {
printf("you choose scissors\n");
} else if (number2 == -1) {
printf("you choose paper\n");
} else {
printf("you choose the wrong number\n");
}
if (number1 == number2) {
life2 = -1;
life1 = -1;
} else if (number1 > 3) {
life2 = -1;
life1 = -1;
} else if (number2 < -3) {
life2 = -1;
life1 = -1;
} else if (number1 < 0) {
life2 = -1;
life1 = -1;
} else if (number2 > 0) {
life2 = -1;
life1 = -1;
} else if (number1 / number2 == -1) {
life2 = -1;
life1 = -1;
} else {
life1 = 3;
life2 = 3;
}
result = scissors2 - paper1 + 10;
result = rock2 - scissors1 + 10;
result = paper2 - rock1 + 12;
result = scissors1 - paper2 + 10;
result = rock1 - scissors2 + 10;
result = paper1 - rock2 + 15;
while (life1 > 0, life2 > 0) {
if (result == 7) {
life1 = life1 - 1;
printf("second player won a round\n");
} else if (result == 6) {
life1 = life1 - 1;
printf("second player won a round\n");
} else if (result == 8) {
life1 = life1 - 1;
printf("second player won a round\n");
} else if (result == 13) {
life2 = life2 - 1;
printf("first player won a round\n");
} else if (result == 15) {
life2 = life2 - 1;
printf("first player won a round\n");
} else if (result == 18) {
life2 = life2 - 1;
printf("first player won a round\n");
}
}
if (life1 == 0) {
printf("player 1 lost\n");
} else if (life2 == 0) {
printf("player 2 lost\n");
} else {
printf("error\n");
}
if (life1 == -1 && life2 == -1) {
printf("program not working\n");
}
我试着为while循环设置一个条件,它从life1或life2中减去1,然后重复相同的过程,直到它达到0,如果life1达到0,第一个玩家1输了,同样的道理也适用于第二个玩家life2
2条答案
按热度按时间m1m5dgzv1#
我建议您将处理一轮游戏的代码放到它自己的函数中。我们将该函数称为
do_game_round
。根据这一轮的结果,该函数应该返回一个enum
,其值为ROUND_RESULT_PLAYER1_WINS
,ROUND_RESULT_PLAYER2_WINS
或ROUND_RESULT_TIE
.调用此函数的代码可能如下所示:
此演示程序具有以下输出:
8iwquhpp2#
关于while循环的问题,你有一个循环,循环的结果是单轮的,所以它不会迭代多轮,而且测试:
语法上有效,但语义上无意义。
life2 > 0
被求值但被丢弃。您需要&&
(布尔AND)运算符,而不是逗号运算符。不过,首先我建议你修复"* 凌乱 *"代码。凌乱的代码更难调试,其他人更难理解你的意图,而且统计上会包含更多的bug。代码和 * 算法 * 都很混乱--而且非常难理解。老实说,我没有费心去理解它--它比这个非常简单的游戏所需要的要复杂得多。
例如,如果您分别用整数值0、1和2表示石头、布和剪刀,那么单个游戏的结果可以由下式确定:
这是因为:
一个简单的"模3"循环算术关系,其中平局的结果为零,如果玩家1获胜则为1,如果玩家2获胜则为2。
我进一步建议您将玩家选择封装到一个函数中,并对两个玩家使用相同的代码。例如:
那么您的玩家选择可能如下所示:
现在给定玩家选择和"赢家"的确定,你可以把整个放在一个循环中,在那里你递减 * loosing * 玩家的生命计数,直到一个玩家剩下零生命。例如:
游戏示例:
把所有这些放在一起:
改变"赢"的规则,例如"* 最好的5 ,"_第一到10 ",或增加生命的胜利以及减少松散,例如,使用这个通用框架很容易实现,所以如果我误解了预期的" 规则 *",你应该能够适应它,以适应。