summaryrefslogtreecommitdiffstats
path: root/Bachelor/Prog1/Prakt4/prg1p4_1/main.cpp
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