blob: f9e3e90894bf450ace53f095242657c5775f5f22 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
// Programmieren 1, Praktikum 4, Aufgabe 1
// Sven Eisenhauer
// 08.12.2004
//
// file: main.cpp
//
// purpose: Play craps and analyse results
//
//
//
//
#include <iostream>
using std::cout;
using std::endl;
#include <iomanip>
using std::setprecision;
using std::setw;
// contains function prototypes for functions srand and rand
#include <cstdlib>
#include <ctime> // contains prototype for function time
int rollDice( void ); // function prototype
int main()
{
// enumeration constants represent game status
enum Status { CONTINUE, WON, LOST };
int sum;
int myPoint;
const int maxGames=1000000;
const int maxRounds=22;
int round=1,
sumWon=0,
sumLost=0,
wRounds=0;
int nrLost[maxRounds]={0},
nrWon[maxRounds]={0};
Status gameStatus; // can contain CONTINUE, WON or LOST
// randomize random number generator using current time
srand( time( 0 ) );
for (int i=1;i<=maxGames;i++)
{
round=1;
sum = rollDice(); // first roll of the dice
// determine game status and point based on sum of dice
switch ( sum ) {
// win on first roll
case 7:
case 11:
gameStatus = WON;
break;
// lose on first roll
case 2:
case 3:
case 12:
gameStatus = LOST;
break;
// remember point
default:
gameStatus = CONTINUE;
myPoint = sum;
// cout << "Point is " << myPoint << endl;
break; // optional
} // end switch
// while game not complete ...
while ( gameStatus == CONTINUE ) {
sum = rollDice(); // roll dice again
round++;
// determine game status
if ( sum == myPoint ) // win by making point
gameStatus = WON;
else
if ( sum == 7 ) // lose by rolling 7
gameStatus = LOST;
} // end while
// display won or lost message
if ( gameStatus == WON )
//cout << "Player wins" << endl;
if (round<maxRounds)
nrWon[round]++;
else
nrWon[maxRounds-1]++;
else
//cout << "Player loses" << endl;
if (round<maxRounds)
nrLost[round]++;
else
nrLost[maxRounds-1]++;
}
cout << setw(7)<<"Round"<< setw(7)<< "won" << setw(7)<<"lost"<<endl;
for (i=1;i<maxRounds;i++)
{
cout << setw(7) << i << setw(7) << nrWon[i] << setw(7) << nrLost[i] << endl;
sumWon+=nrWon[i];
sumLost+=nrLost[i];
wRounds+=((nrWon[i]*i)+(nrLost[i]*i));
}
cout << endl <<"Total won: " << sumWon << " Total lost: " << sumLost << " Chance to win: "
<< setprecision(4) << (static_cast <double> (sumWon)/maxGames)*100 << "%" << endl;
cout << "Average Game length: "<< setprecision(2) << static_cast <double> (wRounds)/maxGames << " Rounds" << endl;
return 0; // indicates successful termination
} // end main
// roll dice, calculate sum and display results
int rollDice( void )
{
int die1;
int die2;
int workSum;
die1 = 1 + rand() % 6; // pick random die1 value
die2 = 1 + rand() % 6; // pick random die2 value
workSum = die1 + die2; // sum die1 and die2
// display results of this roll
// cout << "Player rolled " << die1 << " + " << die2
// << " = " << workSum << endl;
return workSum; // return sum of dice
} // end function rollDice
|