2014-11-04 52 views
1

这个程序运行良好,但像一个真正的赌场老板。我希望在不增加更多可能的情况下尽可能减少支出。我想这样做的方式是为每个数字添加概率。有8种可能性(2,3,4,5,6,7,8,9),我希望7发生最少。所以我想将概率设定为2-6,在75%(每个15%)8-9在20%(每个10%)和7在5%。有人能帮我吗?如何将概率添加到游戏中?

#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

'(一== b ==ç )'不会做你认为它做的事。你错误地认为C++是Python。 – rightfold 2014-11-04 21:12:45

+2

如果你知道你想要的可能性和它们的范围,为什么不在1-100之间生成一个数字,把这个随机值赋给一个将它映射到一个结果的函数,并根据需要存储/使用该结果? – StarPilot 2014-11-04 21:14:25

+0

你是对的,右撇子。我会改变 – Annam 2014-11-04 21:17:04

回答

1

介绍值的阵列[0.05,0.15,0.25,0.4,0.55,0.7,0.85]值相对应的7,8,9,2,3,4,5,6是如果生成的随机数字> 0.85。

然后得到0随机数r为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

或使用'std :: lower_bound'代替循环。 – Jarod42 2014-11-04 21:20:51

0

我将重新编写函数如下(它可以被修改成更好的东西,但它应该工作开始):

// 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; 
} 

不要忘了添加以下代码种子随机数发生器:

srand (time(NULL)); 

我希望这不是对的方式一个真正的老虎机,有可能是法律问题,如果它是:-)