2014-11-04 4 views
1

이 프로그램은 훌륭하지만 실제로 카지노 주인과 같습니다. 더 많은 가능성을 추가하지 않고 가능한 한 최소의 지불금을 원합니다. 내가 원하는 것은 각 숫자에 확률을 더하는 것입니다. 거기에 8 가지 가능성 (2,3,4,5,6,7,8,9)이 있습니다. 따라서 확률은 20 % (각각 10 %)와 5 %에서 7 %에서 75 % (각각 15 %)로 2-6으로 설정하고 싶습니다. 누군가 나를 도울 수 있습니까? A는 난수를 생성하는 경우게임에 확률을 추가하는 방법은 무엇입니까?

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

using namespace std; 
int Random(int low, int high); 
int Result(int a, int b, int c, int chips, int bet); 
int main() 
{ 
    srand(time(0)); 
    int low1(2), low2(2), low3(2); 
    int high1(9), high2(9), high3(9); 
    int menu=0; 
    int bet =0; 
    bool quit=0; 
    cout << "Player's chips: $1000" << endl; 
    int chips=1000; 
    while (!quit) 
    { 
    cout << "1) Play slot. 2) Exit."; 
    cin >> menu; 
    switch (menu) 
    { 
     case 1: 
     { 
      cout << "Enter your bet: "; 
      cin >> bet; 
      if (bet<=0 || bet>chips) 
      { 
       cout << "You did not enter a valid bet." << endl; 
       menu=1; 
      } 
      else 
      { 
       int a = Random(low1,high1); 
       int b = Random(low2,high2); 
       int c = Random(low3,high3); 
       cout << a << " " << b << " " << c << endl; 
       chips = Result(a,b,c,chips,bet); 
       cout << "Player's chips: $" << Result(a,b,c,chips,bet) << endl; 
      } 
      break; 
     } 
     case 2: 
     { 
      cout << "Exiting..." << endl; 
      quit=1; 
      break; 
     } 
     default: 
     { 
     cout << "Not a valid menu !"<<endl; 
     } 
    } 
    } 
    if (chips <=0) 
    { 
     cout << "You have $0 ! Game Over !" << endl; 
     quit=1; 
    } 
} 

int Random(int low, int high) 
{ 
    int random; 
    random = low + rand() % ((high+1)-low); 
    return random; 
} 

    int Result(int a, int b, int c, int chips, int bet) 
    { 
    if ((a==7 && b==7 && c==7)) 
    { 
     cout << "You won 10 times your bet !($" << (bet*10) << ")" << endl; 
     chips=chips+(bet*10); 
    } 
    if ((a==b==c) && !(a==7 && b==7 && c==7)) 
    { 
     cout << "You won 5 times your bet !($" << (bet*5) << ")" << endl; 
     chips=chips+(bet*5); 
    } 
     if ((a==b || a==c || b==c) && !(a==b==c) && !(a==7 && b==7 && c==7)) 
    { 
     chips=chips+(bet*3); 
     cout << "You won 3 times your bet ! ($" << (bet*3) << ")" << endl; 
     } 
    else 
    { 
     cout << "You lost your bet ! ($-" << bet << ")" << endl; 
     chips=chips-bet; 
    } 
    return chips; 
} 
+2

'(A == B 형 == C를한다면 나는이 방법에 의해 실제 슬롯 머신 아니 희망

srand (time(NULL)); 

는 법적 문제가있을 수)'당신이 생각하는 것을하지 않습니다. Python에 C++을 착각하고 있습니다. – rightfold

+2

원하는 가능성과 범위를 알고 있다면 1-100 사이의 숫자를 생성하고 결과에 매핑하는 함수에 임의의 값을 건네 주며 그 결과를 적절하게 저장/사용하는 것이 어떻습니까? – StarPilot

+0

당신 말이 맞아요. 나는 그것을 바꿀거야 – Annam

답변

1

값의 배열 소개 [0.05, 0.15, 0.25, 0.4, 0.55, 0.7, 0.85]의 값 7, 8, 9, 2, 3, 4, 5. 6에 대응하는 것이다 number> 0.85.

그런 다음 1

if r <=0.05 then it is 7 
else if r <= 0.15 then it is 8 
else if r <= 0.1 then it is 9 
... 
else if r <= 0.85 then it is 5 
else it is 6 

0에서 난수 R을 당신은 당신이 원하는 경우 루프로 아래로 작성하는 방법을 알아낼 수 얻는다.

+0

또는 루프 대신'std :: lower_bound'를 사용하십시오. – Jarod42

0

다음과 같이 I 함수를 다시 작성합니다 (더 나은 무언가로 재 작업 할 수 있지만, 그것을 작동합니다 시작입니다) :

// Generate a random number 2-9, with weighted probabilities 
int Random() 
{ 
    int number; // number 1-9 to generate 
    int prob; // probability 

    // Generate probability value 0-99 
    prob = rand() % 100; 

    // Calculate number with desired probability "additive" 
    if (prob < 15) // 15% probability for 2 
    number = 2; 
    else if (prob < 30) // 15% probability for 3 
    number = 3; 
    else if (prob < 45) // 15% probability for 4 
    number = 4; 
    else if (prob < 60) // 15% probability for 5 
    number = 5; 
    else if (prob < 75) // 15% probability for 6 
    number = 6; 
    else if (prob < 80) // 5% probability for 7 
    number = 7; 
    else if (prob < 90) // 10% probability for 8 
    number = 8; 
    else    // 10% probability for 9 
    number = 9; 
    return number; 
} 

시드 다음 코드를 추가하는 것을 잊지 마세요 난수 생성기 : 그것은 :-)

관련 문제