|
@@ -20,21 +20,26 @@ bool Game::addPlayer(std::string name){
|
|
|
return false;
|
|
|
}
|
|
|
};
|
|
|
-void Game::score(){
|
|
|
+void Game::score()
|
|
|
+{
|
|
|
// **CALCULATE EACH PLAYERS' SCORE**
|
|
|
std::vector<int> pointsGuide = {0,1,3,6,10,15,21,28,36,45,55,66,78};
|
|
|
// check players' card for marked boxes
|
|
|
- for(int i = 0;i <players.size();i++){
|
|
|
+ for(int i = 0;i <players.size();i++)
|
|
|
+ {
|
|
|
// clear each players' previous score
|
|
|
players[i].score = 0;
|
|
|
// calculate penalty amount
|
|
|
players[i].score -= players[i].penaltyCount*PENALTY_VALUE;
|
|
|
// check each color(row) on playerCard
|
|
|
- for(int j = 0;j <white1;j++){
|
|
|
+ for(int j = 0;j <white1;j++)
|
|
|
+ {
|
|
|
int count = 0;
|
|
|
// check each box in row
|
|
|
- for(int k =0;k <CHECKBOXES;k++){
|
|
|
- if(true == players[i].rowColors[j][k]){
|
|
|
+ for(int k =0;k <CHECKBOXES;k++)
|
|
|
+ {
|
|
|
+ if(true == players[i].rowColors[j][k])
|
|
|
+ {
|
|
|
count++;
|
|
|
}
|
|
|
}
|
|
@@ -43,42 +48,80 @@ void Game::score(){
|
|
|
}
|
|
|
// **CHECK IF GAME IS DONE**
|
|
|
// check each player's card for penalties
|
|
|
- for(int i = 0;i<players.size();i++){
|
|
|
+ for(int i = 0;i<players.size();i++)
|
|
|
+ {
|
|
|
// check for maximum penalty to see if game is over
|
|
|
if(players[i].penaltyCount == MAX_PENALTY){state = FINISHED;}
|
|
|
}
|
|
|
// check for lockout to see if game is over
|
|
|
int lockCount = 0;
|
|
|
- for(int i = 0;i<lockOut.size();i++){
|
|
|
+ for(int i = 0;i<lockOut.size();i++)
|
|
|
+ {
|
|
|
if(true == lockOut[i]){lockCount++;}
|
|
|
}
|
|
|
- if(MAX_LOCKOUT <= lockCount){
|
|
|
+ if(MAX_LOCKOUT <= lockCount)
|
|
|
+ {
|
|
|
state = FINISHED;
|
|
|
}
|
|
|
}
|
|
|
-void Game::turn(PlayerCard activePlayer) {
|
|
|
+void Game::turn(PlayerCard activePlayer)
|
|
|
+{
|
|
|
// start all players' turns
|
|
|
- for(int i = 0; i <players.size();i++){
|
|
|
+ for(int i = 0; i <players.size();i++)
|
|
|
+ {
|
|
|
players[i].isTurnDone = false;
|
|
|
}
|
|
|
// roll the dice
|
|
|
dice.roll();
|
|
|
// check to see if all players are done with turn
|
|
|
- while(true){
|
|
|
+ while(true)
|
|
|
+ {
|
|
|
bool temp = true;
|
|
|
- for(int i = 0; i <players.size();i++){
|
|
|
+ for(int i = 0; i <players.size();i++)
|
|
|
+ {
|
|
|
temp = temp && players[i].isTurnDone;
|
|
|
}
|
|
|
if(temp){break;}
|
|
|
Sleep(1);
|
|
|
}
|
|
|
+ // add selection to players' cards
|
|
|
+ for(int i = 0; i <players.size();i++)
|
|
|
+ {
|
|
|
+ int t;
|
|
|
+ // everyone can select a color and a check box
|
|
|
+ if(-1<(t = players[i].selection[everyone][row]))
|
|
|
+ {
|
|
|
+ int color = players[i].selection[everyone][row];
|
|
|
+ int checkbox = players[i].selection[everyone][column];
|
|
|
+ players[i].rowColors[color][checkbox] = true;
|
|
|
+ }
|
|
|
+ // active player can select a color and check box
|
|
|
+ if(-1<(t = players[i].selection[active][row]))
|
|
|
+ {
|
|
|
+ int color = players[i].selection[active][row];
|
|
|
+ int checkbox = players[i].selection[active][column];
|
|
|
+ players[i].rowColors[color][checkbox] = true;
|
|
|
+ }
|
|
|
+ // player selects to add penalty, increase the penalty count
|
|
|
+ if(0<(t = players[i].selection[penalty][0]))
|
|
|
+ {
|
|
|
+ players[i].penaltyCount++;
|
|
|
+ }
|
|
|
+ }
|
|
|
// score the cards
|
|
|
score();
|
|
|
}
|
|
|
+
|
|
|
+// generate text: per player(48boxes, penalty count), locked off rows, dice roll, game end(when it occurs) send it
|
|
|
std::string Game::send()
|
|
|
{
|
|
|
std::string output;
|
|
|
- // gernerate text: per player(48boxes, penalty count), locked off rows, dice roll, game end(when it occurs) send it
|
|
|
+ if(dice.dice.size()==0){fprintf(stdout, "kyle is cool\n");}
|
|
|
+ // add dice values to output
|
|
|
+ for(int i = 0; i < dice.dice.size(); i++)
|
|
|
+ {
|
|
|
+ output.push_back(dice.dice[i] + '0');
|
|
|
+ }
|
|
|
// look at each player card
|
|
|
for(int i = 0; i < players.size(); i++)
|
|
|
{
|
|
@@ -92,11 +135,38 @@ std::string Game::send()
|
|
|
output.push_back(players[i].rowColors[j][k] ? 'T' : 'F');
|
|
|
}
|
|
|
}
|
|
|
+ // add penalty count to output
|
|
|
+ output.push_back(players[i].penaltyCount + '0');
|
|
|
}
|
|
|
+ // add locked off row to output
|
|
|
+ for(int i = 0; i < lockOut.size();i++)
|
|
|
+ {
|
|
|
+ output.push_back(lockOut[i] ? 'T' : 'F');
|
|
|
+ }
|
|
|
+ // add game end to output
|
|
|
+ output.push_back(state == FINISHED ? 'T' : 'F');
|
|
|
+ // print everything needed to send current game state to players
|
|
|
fprintf(stdout, "the output is: %s\n", output.c_str());
|
|
|
return output;
|
|
|
}
|
|
|
-void Game::receive(std::string userInput){
|
|
|
- // newest item checked off on row&column (maybe 2) or penalty
|
|
|
- // once data is received, add it to the playerCard
|
|
|
+
|
|
|
+// kyle's intention is to check off red 12 and blue 5
|
|
|
+// " 1143"
|
|
|
+// emma's intention is to take a penalty
|
|
|
+// "1"
|
|
|
+void Game::receive(std::string userInput)
|
|
|
+{
|
|
|
+ players[0].newSelection();
|
|
|
+ // penalties are marked to card if user string = 1
|
|
|
+ players[0].selection[penalty][0] = 1;
|
|
|
+ // did the user send a number?
|
|
|
+ // if a user did not send a number no changes take place
|
|
|
+ // take the userinput (string) and parse it into parts
|
|
|
+ // what is the length of the userInput? length of 2, 4? (boxes 0-9 are represented as 00,01,02...)
|
|
|
+ players[0].selection[everyone][row] = green;
|
|
|
+ players[0].selection[everyone][column] = 5;
|
|
|
+ players[0].selection[active][row] = yellow;
|
|
|
+ players[0].selection[active][column] = 11;
|
|
|
+ // convert userInput into number
|
|
|
+ // user number to change the boolean on corresponding spot on playerCard
|
|
|
}
|