Just one question now!
katielynnsdad (34)Jan 6, 2009 at 4:36am UTC
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;
}
Faldrax (322)Jan 6, 2009 at 4:36am UTC
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 -
katielynnsdad (34)Jan 6, 2009 at 4:36am UTC
Thank you very much! You helped tremendously. I can see where the fuctions make it alot easier coding. Thanks Again!
This topic is archived - New replies not allowed.