Just one question now!

Can I turn all of this into one function?

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
149
150
151
152
153
154
155
156
#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <windows.h>
#include <cstdlib>

using namespace std;

      vector<int> roll;
      int myRoll[5];
      const int NUMDICE = 5;
      const int NUMSIDES = 6;
 
int getScore(int score)
{    
         sort(roll.begin(), roll.end());
         for(int i =0; i < 5; i++)
         {
                 cout << roll[i];
                 score = score + roll[i];                                 
         }
         
         return score;
}     
int displayRoll()
{
    int myNewRoll[5];
    for(int i =0; i < 5; i++)
    {
            myNewRoll[i] = roll[i];
            cout << myNewRoll[i];
    }
    return myNewRoll[5];
}

int main()
{
        
    
    char keepIn;
    char keep;
    
    srand((unsigned)time(NULL));
    for(int i = 0; i < NUMDICE; i++)
         {
                 myRoll[i] = (rand() %NUMSIDES) +1;
                 cout << myRoll[i];                                  
         }
         cout << endl << endl;
         cout << "keep dice 1 ?" << endl;
         cin >> keepIn;
         keep = toupper(keepIn);
                  
         if(keep =='Y')
         {                 
                 roll.push_back(myRoll[0]);                
         }
         else if(keep == 'N')
         {
              myRoll[0] = 0;                            
         }
         cout << endl << endl;
         cout << "keep dice 2 ?" << endl;
         cin >> keepIn;
         keep = toupper(keepIn);
                  
         if(keep =='Y')
         {
              roll.push_back(myRoll[1]);                             
         }
         else if(keep == 'N')
         {
              myRoll[1] = 0;
         }
         cout << endl << endl;         
         cout << "keep dice 3 ?" << endl;
         cin >> keepIn;
         keep = toupper(keepIn);
                  
         if(keep =='Y')
         {                 
              roll.push_back(myRoll[2]);                                 
                            
         }
         else if(keep == 'N')
         {
              myRoll[2] = 0;              
         }
         cout << endl << endl;
         cout << "keep dice 4 ?" << endl;
         cin >> keepIn;
         keep = toupper(keepIn);
                  
         if(keep == 'Y')
         {
                 roll.push_back(myRoll[3]);                                    
                                                  
         }
         else if(keep == 'N')
         {
              myRoll[3] = 0;              
         }
         cout << endl << endl;       
         cout << "keep dice 5 ?" << endl;
         cin >> keepIn;
         keep = toupper(keepIn);
                          
         if(keep == 'Y')
         {         
                roll.push_back(myRoll[4]);                                   
                
         }
         else if(keep == 'N')
         {
              myRoll[4] = 0;              
         }
         cout << endl << endl;
         
         
         
         sort(roll.begin(), roll.end());
                                         
         cout << endl << endl;
         
         for(int i = 0; i < 5; i++)
         {
                 cout << myRoll[i];
         }
         
         cout << endl << endl;
         
         int myRoll2[5];
         int newDice;
         newDice = 5 - roll.size();
         for(int i = 0; i < newDice; i++)
         {
                myRoll2[i] = (rand() %NUMSIDES) +1;
                cout << myRoll2[i];
                roll.push_back(myRoll2[i]);                                               
         }
         
         
         cout << endl << endl;
         
         int score;
         cout << endl << endl;      
         cout << endl << getScore(score) - newDice << endl;
         
         cout << endl << endl;
                                         
                             
         
         system("pause");
         return 0;
}
Hi, looking back at your previous posts it look like you are trying to get a quick prog to roll 5 dice, then have 3 rounds of accept or re-roll each die to try an maximise the score.

I am relativly new to C++, but have been programming (mainly Delphi) for many years now, and one 'rule' I try and stick to is to keep things as simple as possible - it seems to work for C++ too!
(Another 'rule' is that rules are guidelines not absolutes:-)

I would make a few mods to the code you have in order to put it into a function (or, to be more exact, a bunch of functions).

Where you have the same (or very similar) code repeated it is often the sign that it would be a good chunk to split out as a function - in you code, for example, for the 5 dice you have virtualy the same code to keep or discard the roll - if you pull this out the code become much shorter, and as a result easier to follow.

I would also stick to just the single int array - there is no need for the vector or second array, so why add complexity?
You can also use the NUMDICE constant for declaring the array, loop boundaries, etc, which both helps show what is intended and make changing the code easier.

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
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

const int NUMDICE = 5;
const int NUMSIDES = 6;
int myRoll[NUMDICE];
 
int getScore(void)
{    
    int score=0;
    for(int i =0; i < NUMDICE; i++)
    {
          score = score + myRoll[i];                                 
    }
    return score;
} 

void displayRoll(void)
{
    for(int i =0; i < NUMDICE; i++)
    {
          cout << myRoll[i];
    }
    cout << endl;
    return;
}

bool keep(int i)
{
    char keepin;
    cout << "\nKeep dice " << i+1 << " ?" << endl;
    cin >> keepin;
    return (toupper(keepin)=='Y');
}

void rollTheDice()
{
    srand((unsigned)time(NULL));
    for(int i = 0; i < NUMDICE; i++)
    {
        myRoll[i] = (rand() %NUMSIDES) +1;
    }
    for (int j=0; j<3; j++)
    {
        displayRoll();
        cout << "Score: " << getScore() << endl;
        for(int i = 0; i < NUMDICE; i++)
        {
            if (!keep(i)) 
            {
                myRoll[i] = (rand() %NUMSIDES) +1;
            }
        }
    }
    displayRoll();
    cout << "Score: " << getScore() << endl;
}

int main()
{
    rollTheDice();
    system("pause");
    return 0;
}


Hope that helps -

Thank you very much! You helped tremendously. I can see where the fuctions make it alot easier coding.
Thanks Again!
Topic archived. No new replies allowed.