Kevin Lin / Mbed 2 deprecated Lab4Farkle

Dependencies:   mbed 4DGL-uLCD-SE PinDetect

Committer:
klin315
Date:
Tue Oct 26 06:04:46 2021 +0000
Revision:
1:3cd6e5938144
Parent:
0:8ee41d0deef7
d

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klin315 1:3cd6e5938144 1 /**
klin315 1:3cd6e5938144 2 Author: Kevin Lin
klin315 1:3cd6e5938144 3 Title: Lab 4
klin315 1:3cd6e5938144 4 Date: October 22 2021
klin315 1:3cd6e5938144 5 Description: Header file of a Farkle Game object
klin315 1:3cd6e5938144 6
klin315 1:3cd6e5938144 7 **/
klin315 1:3cd6e5938144 8
klin315 0:8ee41d0deef7 9 #include "die.h"
klin315 0:8ee41d0deef7 10 #include "farklegame.h"
klin315 0:8ee41d0deef7 11
klin315 0:8ee41d0deef7 12 #include <string>
klin315 0:8ee41d0deef7 13
klin315 0:8ee41d0deef7 14
klin315 0:8ee41d0deef7 15 using namespace std;
klin315 0:8ee41d0deef7 16
klin315 0:8ee41d0deef7 17 //Constructors
klin315 0:8ee41d0deef7 18 FarkleGame::FarkleGame(){
klin315 0:8ee41d0deef7 19 Die diceArray[6];
klin315 0:8ee41d0deef7 20 int diceValueArray[6];
klin315 1:3cd6e5938144 21
klin315 0:8ee41d0deef7 22 int farkleCount = 0;
klin315 0:8ee41d0deef7 23 }
klin315 0:8ee41d0deef7 24
klin315 0:8ee41d0deef7 25 //Method
klin315 0:8ee41d0deef7 26 void FarkleGame::displayIntro(uLCD_4DGL& scr, int nd){
klin315 0:8ee41d0deef7 27 scr.cls();
klin315 0:8ee41d0deef7 28 scr.printf("Shake\n");
klin315 0:8ee41d0deef7 29 scr.printf("Board\n");
klin315 0:8ee41d0deef7 30 scr.printf("------\n");
klin315 0:8ee41d0deef7 31 scr.printf("To\n");
klin315 0:8ee41d0deef7 32 scr.printf("Roll\n");
klin315 0:8ee41d0deef7 33 scr.printf("%d Dice", nd);
klin315 0:8ee41d0deef7 34 }
klin315 0:8ee41d0deef7 35
klin315 0:8ee41d0deef7 36 void FarkleGame::restart(){
klin315 0:8ee41d0deef7 37 turnScore = 0;
klin315 0:8ee41d0deef7 38 rollScore = 0;
klin315 0:8ee41d0deef7 39 farkleCount = 0;
klin315 0:8ee41d0deef7 40 }
klin315 0:8ee41d0deef7 41
klin315 0:8ee41d0deef7 42 void FarkleGame::rollDice(Speaker &speaker){
klin315 0:8ee41d0deef7 43 for(int i = 0; i < 6; i++){
klin315 0:8ee41d0deef7 44 diceArray[i].rollDie();
klin315 0:8ee41d0deef7 45 speaker.PlayNote(400.0,0.25,0.1);
klin315 0:8ee41d0deef7 46 }
klin315 0:8ee41d0deef7 47
klin315 0:8ee41d0deef7 48 }
klin315 0:8ee41d0deef7 49
klin315 0:8ee41d0deef7 50 void FarkleGame::displayDice(uLCD_4DGL& scr, int nd){
klin315 0:8ee41d0deef7 51 scr.cls();
klin315 0:8ee41d0deef7 52 scr.display_control(PORTRAIT);
klin315 0:8ee41d0deef7 53
klin315 0:8ee41d0deef7 54 for(int i = 0; i < nd; i++){
klin315 0:8ee41d0deef7 55 diceArray[i].displayDie(i+1, scr);
klin315 0:8ee41d0deef7 56 }
klin315 0:8ee41d0deef7 57
klin315 0:8ee41d0deef7 58 }
klin315 0:8ee41d0deef7 59
klin315 0:8ee41d0deef7 60 void FarkleGame::loadVals(int nd){
klin315 0:8ee41d0deef7 61 for(int i = 0; i < 6; i++){
klin315 0:8ee41d0deef7 62 diceValueArray[i] = 0;
klin315 0:8ee41d0deef7 63 }
klin315 0:8ee41d0deef7 64 for(int i = 0; i < nd; i++){
klin315 0:8ee41d0deef7 65 if(diceArray[i].getValue() == 1){
klin315 0:8ee41d0deef7 66 diceValueArray[0]++;
klin315 0:8ee41d0deef7 67 }else if(diceArray[i].getValue() == 2){
klin315 0:8ee41d0deef7 68 diceValueArray[1]++;
klin315 0:8ee41d0deef7 69 }else if(diceArray[i].getValue() == 3){
klin315 0:8ee41d0deef7 70 diceValueArray[2]++;
klin315 0:8ee41d0deef7 71 }else if(diceArray[i].getValue() == 4){
klin315 0:8ee41d0deef7 72 diceValueArray[3]++;
klin315 0:8ee41d0deef7 73 }else if(diceArray[i].getValue() == 5){
klin315 0:8ee41d0deef7 74 diceValueArray[4]++;
klin315 0:8ee41d0deef7 75 }else if(diceArray[i].getValue() == 6){
klin315 0:8ee41d0deef7 76 diceValueArray[5]++;
klin315 0:8ee41d0deef7 77 }
klin315 0:8ee41d0deef7 78 }
klin315 0:8ee41d0deef7 79 }
klin315 0:8ee41d0deef7 80
klin315 0:8ee41d0deef7 81 int FarkleGame::calculateRoll(){
klin315 0:8ee41d0deef7 82 for(int i = 0; i < 6; i++){
klin315 0:8ee41d0deef7 83 if(diceValueArray[i] == 6){
klin315 0:8ee41d0deef7 84 return 3000;
klin315 0:8ee41d0deef7 85 }
klin315 0:8ee41d0deef7 86 }
klin315 0:8ee41d0deef7 87
klin315 0:8ee41d0deef7 88 int tripleCount = 0;
klin315 0:8ee41d0deef7 89 for(int i = 0; i < 6; i++){
klin315 0:8ee41d0deef7 90 if(diceValueArray[i] == 3) {
klin315 0:8ee41d0deef7 91 tripleCount++;
klin315 0:8ee41d0deef7 92 }
klin315 0:8ee41d0deef7 93 }
klin315 0:8ee41d0deef7 94 if(tripleCount == 2){
klin315 0:8ee41d0deef7 95 return 2500;
klin315 0:8ee41d0deef7 96 }
klin315 0:8ee41d0deef7 97
klin315 0:8ee41d0deef7 98 //check for 5
klin315 0:8ee41d0deef7 99 for(int i = 0; i < 6; i++){
klin315 0:8ee41d0deef7 100 if(diceValueArray[i] == 5){
klin315 0:8ee41d0deef7 101 return 2000;
klin315 0:8ee41d0deef7 102 }
klin315 0:8ee41d0deef7 103 }
klin315 0:8ee41d0deef7 104
klin315 0:8ee41d0deef7 105 //check for 123456
klin315 0:8ee41d0deef7 106 int diversityCount = 0;
klin315 0:8ee41d0deef7 107 for(int i = 0; i < 6; i++){
klin315 0:8ee41d0deef7 108 if(diceValueArray[i] == 1) {
klin315 0:8ee41d0deef7 109 diversityCount++;
klin315 0:8ee41d0deef7 110 }
klin315 0:8ee41d0deef7 111 }
klin315 0:8ee41d0deef7 112 if(diversityCount == 6){
klin315 0:8ee41d0deef7 113 return 1500;
klin315 0:8ee41d0deef7 114 }
klin315 0:8ee41d0deef7 115
klin315 0:8ee41d0deef7 116 //check for 3doubs
klin315 0:8ee41d0deef7 117 int doubleCount = 0;
klin315 0:8ee41d0deef7 118 for(int i = 0; i < 6; i++){
klin315 0:8ee41d0deef7 119 if(diceValueArray[i] == 2) {
klin315 0:8ee41d0deef7 120 doubleCount++;
klin315 0:8ee41d0deef7 121 }
klin315 0:8ee41d0deef7 122 }
klin315 0:8ee41d0deef7 123 if(doubleCount == 3){
klin315 0:8ee41d0deef7 124 return 1500;
klin315 0:8ee41d0deef7 125 }
klin315 0:8ee41d0deef7 126
klin315 0:8ee41d0deef7 127 //check for 4
klin315 0:8ee41d0deef7 128 for(int i = 0; i < 6; i++){
klin315 0:8ee41d0deef7 129 if(diceValueArray[i] == 4){
klin315 0:8ee41d0deef7 130 return 1000;
klin315 0:8ee41d0deef7 131 }
klin315 0:8ee41d0deef7 132 }
klin315 0:8ee41d0deef7 133
klin315 0:8ee41d0deef7 134 //check trips
klin315 0:8ee41d0deef7 135 if(tripleCount == 1){
klin315 0:8ee41d0deef7 136 if(diceValueArray[0] == 3){
klin315 0:8ee41d0deef7 137 return 1000;
klin315 0:8ee41d0deef7 138 }else if(diceValueArray[5] == 3){
klin315 0:8ee41d0deef7 139 return 600;
klin315 0:8ee41d0deef7 140 }
klin315 0:8ee41d0deef7 141 else if(diceValueArray[4] == 3){
klin315 0:8ee41d0deef7 142 return 500;
klin315 0:8ee41d0deef7 143 }else if(diceValueArray[3] == 3){
klin315 0:8ee41d0deef7 144 return 400;
klin315 0:8ee41d0deef7 145 }else if(diceValueArray[2] == 3){
klin315 0:8ee41d0deef7 146 return 300;
klin315 0:8ee41d0deef7 147 }else if(diceValueArray[1] == 3){
klin315 0:8ee41d0deef7 148 return 200;
klin315 0:8ee41d0deef7 149 }
klin315 0:8ee41d0deef7 150 }
klin315 0:8ee41d0deef7 151
klin315 0:8ee41d0deef7 152 //check 1
klin315 0:8ee41d0deef7 153 if(diceValueArray[0] != 0){
klin315 0:8ee41d0deef7 154 return 100;
klin315 0:8ee41d0deef7 155 }
klin315 0:8ee41d0deef7 156
klin315 0:8ee41d0deef7 157 //check 5
klin315 0:8ee41d0deef7 158 if(diceValueArray[4] != 0){
klin315 0:8ee41d0deef7 159 return 50;
klin315 0:8ee41d0deef7 160 }
klin315 0:8ee41d0deef7 161
klin315 0:8ee41d0deef7 162 farkleCount = farkleCount + 1;
klin315 0:8ee41d0deef7 163
klin315 0:8ee41d0deef7 164 return 0;
klin315 0:8ee41d0deef7 165 }
klin315 0:8ee41d0deef7 166
klin315 0:8ee41d0deef7 167 void FarkleGame::changeScore(){
klin315 0:8ee41d0deef7 168 rollScore = calculateRoll();
klin315 0:8ee41d0deef7 169 turnScore += rollScore;
klin315 0:8ee41d0deef7 170 if(farkleCount > 0){
klin315 0:8ee41d0deef7 171 turnScore = 0;
klin315 0:8ee41d0deef7 172 }
klin315 0:8ee41d0deef7 173 }
klin315 0:8ee41d0deef7 174
klin315 0:8ee41d0deef7 175 void FarkleGame::displayFarkle(uLCD_4DGL& screen){
klin315 0:8ee41d0deef7 176 screen.text_width(2);
klin315 0:8ee41d0deef7 177 screen.text_height(2);
klin315 0:8ee41d0deef7 178 screen.locate(0,6);
klin315 0:8ee41d0deef7 179 screen.printf("FARKLE!");
klin315 0:8ee41d0deef7 180 }
klin315 0:8ee41d0deef7 181
klin315 0:8ee41d0deef7 182 void FarkleGame::displayScore(uLCD_4DGL& screen){
klin315 0:8ee41d0deef7 183 screen.text_width(1);
klin315 0:8ee41d0deef7 184 screen.text_height(1);
klin315 0:8ee41d0deef7 185 screen.locate(0,11);
klin315 0:8ee41d0deef7 186 screen.printf("\nThis Turn: %d\n", turnScore);
klin315 0:8ee41d0deef7 187 screen.printf("\nThis Roll: %d\n", rollScore);
klin315 0:8ee41d0deef7 188 }
klin315 0:8ee41d0deef7 189
klin315 0:8ee41d0deef7 190 void FarkleGame::displayTurnScore(uLCD_4DGL& screen){
klin315 0:8ee41d0deef7 191 screen.cls();
klin315 0:8ee41d0deef7 192 screen.text_width(2);
klin315 0:8ee41d0deef7 193 screen.text_height(2);
klin315 0:8ee41d0deef7 194 screen.locate(0,15);
klin315 0:8ee41d0deef7 195 screen.printf("Turn\n");
klin315 0:8ee41d0deef7 196 screen.printf("Score\n");
klin315 0:8ee41d0deef7 197 screen.printf("-----\n");
klin315 0:8ee41d0deef7 198 screen.printf("%d\n", turnScore);
klin315 0:8ee41d0deef7 199 }
klin315 0:8ee41d0deef7 200
klin315 0:8ee41d0deef7 201 bool FarkleGame::enoughGravity(MMA8452& acc){
klin315 0:8ee41d0deef7 202 double x = 0;
klin315 0:8ee41d0deef7 203 double y = 0;
klin315 0:8ee41d0deef7 204 double z = 0;
klin315 0:8ee41d0deef7 205
klin315 0:8ee41d0deef7 206 acc.readXYZGravity(&x,&y,&z);
klin315 0:8ee41d0deef7 207
klin315 0:8ee41d0deef7 208 return (x + y > 1.1);
klin315 0:8ee41d0deef7 209 }
klin315 0:8ee41d0deef7 210
klin315 0:8ee41d0deef7 211 //S&G
klin315 0:8ee41d0deef7 212 void FarkleGame::setDiceValue(int pos, int v){
klin315 0:8ee41d0deef7 213 diceArray[pos-1].setValue(v);
klin315 0:8ee41d0deef7 214 }
klin315 0:8ee41d0deef7 215
klin315 0:8ee41d0deef7 216 int FarkleGame::getDiceValue(int pos){
klin315 0:8ee41d0deef7 217 return diceArray[pos-1].getValue();
klin315 0:8ee41d0deef7 218 }
klin315 0:8ee41d0deef7 219
klin315 0:8ee41d0deef7 220