我想写一个程序来玩Rock Paper Scissors Spock Lizard
到目前为止一切正常,但如果它得到平局,我真的不知道如何重新开始游戏。我试着这样做:如果第一和第二个玩家都表现出相同的东西,它会一遍又一遍地重复它而不重新洗牌。如何重启游戏?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
enum variablen {scissor=1, paper, rock, lizard, spock} ;
int i;
const char * vergleich(int random) {
switch(random) {
case scissor: return "Siccor";
case paper: return "Paper";
case rock: return "Rock";
case lizard: return "Lizard";
case spock: return "Spock";
default: break;
}
return "";
}
int new_game() {
srand(time(NULL));
int s1 = rand() % 5+1;
int s2 = rand() % 5+1;
printf("player1 shows %s", vergleich(s1));
printf("\n\tif Player 2 plays %s or %s Player1 wins\n", vergleich(s1+1), vergleich(s1+3));
printf("player2 shows: %s\n", vergleich(s2));
if(s2 == s1 + 1 || s2 == s1 +3 || s1 == s2) {
if(s1==s2) {
printf("draw \n");
i = 0;
}else{printf("player1 wins"); i = 4;}
}else{printf("player2 wins"); i = 4;}
return 0;
}
int main() {
printf("Welcome\n");
while(i == 0) {new_game();}
return 0;
}
答案 0 :(得分:0)
srand(time(NULL));
使用当前系统时间初始化随机数生成器。请注意,“时间”是以秒为单位的系统时间。如果你连续快速地调用time(NULL)
,它将始终返回相同的值,因为我们仍然在同一秒内。请注意,今天的计算机速度很快。但是,当你用相同的值初始化随机数发生器时,它也会产生相同的随机值序列(一次又一次),这是因为C的随机数发生器根本不产生随机数,它只产生伪随机数和数字序列完全由用于初始化生成器的值定义。
解决方案:根本不要重新初始化随机数生成器。初始化一次,以便每次程序运行时序列都是不同的,但是在没有重新初始化的情况下继续使用它。或者用更简单的词语:
将srand(time(NULL));
移至main
功能的开头。