يكي از بازيهاي مورد علاقه در
بسياري از نقاط جهان، بازي بنام “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