2014-12-04 1 views
0

C++에서 크랩 게임을 구현하려고하는데 규칙이 아래에 나와 있습니다. 그래서 저는 두 개의 숫자를 생성 할 함수를 만들었습니다. 때로는이 함수를 두 번 호출해야하지만, 두 번째 호출이 나에게 처음으로 준 동일한 난수를 부여 할 때 호출됩니다.두 번째 호출에서 다른 임의의 번호 생성

rollDice() 두 번째 호출에서 얻은 숫자를 무작위로 지정하고 싶습니다. 어떻게해야합니까?

출력 예 1 :
플레이어 3 + 4 = 7 압연
플레이어 획득!

출력 예 2 :
플레이어는 2 + 2 = 4
포인트 4
플레이어 2 = 4 플레이어 원 + 2 압연 롤!

출력 예 3 :
플레이어 1 + 5 = 6
포인트 6
플레이어 1 + 5 압연 롤 = 6
는 플레이어가 획득!

게임 규칙 : 규칙 : 자신의 합이 7 또는 11, 그들은 승리 인 경우 플레이어는 두 개의 6면 주사위를 던졌습니다. 합계가 2,3 또는 12 인 경우 입니다. 4,5,6,8,9,10,12이면 "포인트"이되어 플레이어가 다시 굴러 들어야합니다. 플레이어는 "포인트"를 다시 칠 때까지 롤을 계속하고 그는 에 도달하면 그는 으로 이깁니다.

코드 :

#include<iostream> 
#include<ctime> 
#include <cstdlib> 

using namespace std; 

//Generating two rand numbers from 1 to 6 
int rollDice() 
{ 
    srand(time(0)); 
    int face1 = 1 + rand()%6; 
    int face2 = 1 + rand()%6; 
    int sum = face1 + face2; 

    cout << "Player rolled " << face1 << " + " << face2 << " = " << sum << endl; 
    return sum; 
} 

string gameStatus; //Hold status of game; WIN, CONTINUE, LOST 
int sumOfDice = rollDice(); 
int point = 0; //This will hold sum of dice if it's default case defined below in Switch. 

int main() 
{ 
    switch(sumOfDice) 
    { 
     case 7: 
     case 11: 
      gameStatus = "WIN"; 
      break; 

     case 2: 
     case 3: 
     case 12: 
      gameStatus = "LOST"; 
      break; 

     default: 
      gameStatus = "CONTINUE"; 
      point = sumOfDice; 
      cout << "Point is " << point << endl; 
    } 

    while (gameStatus == "CONTINUE") 
    { 
     int rollAgain = rollDice(); 
     if (rollAgain == point) 
      gameStatus = "WIN"; 
     else if (rollAgain == 7) 
      gameStatus = "LOST"; 
    } 
    if (gameStatus == "WIN") 
     cout << "Player won!"; 
    if (gameStatus == "LOST") 
     cout << "Player lost!"; 
} 
+1

매번'srand()'를 한 번 호출하지 말아야합니다. 랜덤 시퀀스를 동일한 시드로 다시 시드하므로 동일한 시퀀스의 첫 번째 시퀀스가 ​​생성됩니다. 메인 시작시 srand를 호출하십시오. 또는 당신이 C++ 11을 사용할 수 있다면''을 사용하십시오. (나는이 주석에 대한 템플릿이 필요합니다. 나는 거의 매주이 조언을 사용합니다 ...) – Borgleader

+0

@Borgleader 당신은 자세하고 자기 답답한 질문을 할 수 있습니다. 다른 모든 것은 중복으로. –

답변

3
srand(time(0)); 

이 현재 시간 난수 생성기의 씨앗을 다시 설정합니다. 이 작업은 프로그램이 시작될 때 한 번만 수행하십시오. 같은 초에 두 번하면 (time이 같은 값을 반환합니다) 매번 같은 순서의 난수가 생깁니다.

관련 문제