بازی شانس
یک شنبه 7 آذر 1389 12:10 AM
يكي از بازيهاي مورد علاقه در بسياري از نقاط جهان، بازي بنام “craps” است كه با طاس انجام ميشود. حال به قوانين اين بازي توجه كنيد:
بازيكن دو طاس مياندازد و هر طاس داراي شش وجه است. اين وجهها متشكل از 6 يا 5، 4، 3، 2، 1 نقطه هستند. پس از رها كردن طاسها، مجموع نقاط موجود بر روي هر طاس محاسبه ميشود. اگر مجموع برابر 7 يا 11 در اولين پرتاب طاسها باشد، بازيكن پرتاب كننده، برنده خواهد شد. اگر مجموع 2، 3 يا 12 در اولين پرتاب طاسها باشد، بازيكن پرتاب كننده بازنده خواهد بود. اگر مجموع نقاط 10 يا 9، 8، 6، 5، 4 در اولين پرتاب طاس باشد، اين مجموع تبديل به امتياز بازيكن خواهد شد. براي برنده شدن، بازيكن بايد به پرتاب طاسها ادامه دهد تا به امتياز تعيين شده دست يابد. اگر بازيكن مقدار 7 را بعد از امتيازگيري بدست آورد، بازنده ميشود.
شبيهسازي اين بازي در برنامه زیر ارائه شده است. دقت كنيد كه بازيكن بايد دو طاس را در اولين پرتاب و تمام پرتابهاي بعدي بكار گيرد.
1 // Fig. 6.11: fig06_11.cpp
2 // Craps simulation.
3 #include <iostream>
4 using std::cout;
5 using std::endl;
6
7 #include <cstdlib> // contains prototypes for functions srand and rand
8 using std::rand;
9 using std::srand;
10
11 #include <ctime> // contains prototype for function time
12 using std::time;
13
14 int rollDice(); // rolls dice, calculates amd displays sum
15
16 int main()
17 {
18 // enumeration with constants that represent the game status
19 enum Status { CONTINUE, WON, LOST };
20
21 int myPoint; // point if no win or loss on first roll
22 Status gameStatus; // can contain CONTINUE, WON or LOST
23
24 // randomize random number generator using current time
25 srand( time( 0 ) );
26
27 int sumOfDice = rollDice(); // first roll of the dice
28
29 // determine game status and point (if needed) based on first roll
30 switch ( sumOfDice )
31 {
32 case 7: // win with 7 on first roll
33 case 11: // win with 11 on first roll
34 gameStatus = WON;
35 break;
36 case 2: // lose with 2 on first roll
37 case 3: // lose with 3 on first roll
38 case 12: // lose with 12 on first roll
39 gameStatus = LOST;
40 break;
41 default: // did not win or lose, so remember point
42 gameStatus = CONTINUE; // game is not over
43 myPoint = sumOfDice; // remember the point
44 cout << "Point is " << myPoint << endl;
45 break; // optional at end of switch
46 } // end switch
47
48 // while game is not complete
49 while ( gameStatus == CONTINUE ) // not WON or LOST
50 {
51 sumOfDice = rollDice(); // roll dice again
52
53 // determine game status
54 if ( sumOfDice == myPoint ) // win by making point
55 gameStatus = WON;
56 else
57 if ( sumOfDice == 7 ) // lose by rolling 7 before point
58 gameStatus = LOST;
59 } // end while
60
61 // display won or lost message
62 if ( gameStatus == WON )
63 cout << "Player wins" << endl;
64 else
65 cout << "Player loses" << endl;
66
67 return 0; // indicates successful termination
68 } // end main
69
70 // roll dice, calculate sum and display results
71 int rollDice()
72 {
73 // pick random die values
74 int die1 = 1 + rand() % 6; // first die roll
75 int die2 = 1 + rand() % 6; // second die roll
76
77 int sum = die1 + die2; // compute sum of die values.
78
79 // display results of this roll
80 cout << "Player rolled " << die1 << " + " << die2
81 << " = " << sum << endl;
82 return sum; // return sum of dice
} // end function rollDice