如何在抽奖时重启游戏

时间:2015-10-23 12:21:10

标签: c random numbers repeat

我想写一个程序来玩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;
}

1 个答案:

答案 0 :(得分:0)

srand(time(NULL));使用当前系统时间初始化随机数生成器。请注意,“时间”是以秒为单位的系统时间。如果你连续快速地调用time(NULL),它将始终返回相同的值,因为我们仍然在同一秒内。请注意,今天的计算机速度很快。但是,当你用相同的值初始化随机数发生器时,它也会产生相同的随机值序列(一次又一次),这是因为C的随机数发生器根本不产生随机数,它只产生伪随机数和数字序列完全由用于初始化生成器的值定义。

解决方案:根本不要重新初始化随机数生成器。初始化一次,以便每次程序运行时序列都是不同的,但是在没有重新初始化的情况下继续使用它。或者用更简单的词语:

srand(time(NULL));移至main功能的开头。