2036 mbed lab4

Dependencies:   4DGL-uLCD-SE PinDetect

Committer:
lhanks02
Date:
Mon Mar 28 18:44:30 2022 +0000
Revision:
0:bbda88bee65a
lab4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lhanks02 0:bbda88bee65a 1 #include "mbed.h"
lhanks02 0:bbda88bee65a 2 #define WHITE 0xFFFFFF
lhanks02 0:bbda88bee65a 3 #include <stdlib.h>
lhanks02 0:bbda88bee65a 4 #include <time.h>
lhanks02 0:bbda88bee65a 5 #include "PinDetect.h"
lhanks02 0:bbda88bee65a 6 #define NUM_DICE 6
lhanks02 0:bbda88bee65a 7 #include "FarkleGame.h"
lhanks02 0:bbda88bee65a 8
lhanks02 0:bbda88bee65a 9 #include "uLCD_4DGL.h"
lhanks02 0:bbda88bee65a 10
lhanks02 0:bbda88bee65a 11 extern uLCD_4DGL uLCD;
lhanks02 0:bbda88bee65a 12 void FarkleGame::changeDieArray()
lhanks02 0:bbda88bee65a 13 {
lhanks02 0:bbda88bee65a 14 int rollable=0;//keep track of how many dice are in a rollable state
lhanks02 0:bbda88bee65a 15
lhanks02 0:bbda88bee65a 16 for(int i=0; i<6; i++) { //determine which die are rollable and increment
lhanks02 0:bbda88bee65a 17 if(arr[i].getCurrDieState()==ROLL) {
lhanks02 0:bbda88bee65a 18 rollable+=1;
lhanks02 0:bbda88bee65a 19 }
lhanks02 0:bbda88bee65a 20 }
lhanks02 0:bbda88bee65a 21 if(rollable==6) { //these next if statements change the number of rollable die based on how many are currently rollable
lhanks02 0:bbda88bee65a 22 for(int i=0; i<6; i++) {
lhanks02 0:bbda88bee65a 23 (arr[i].setCurrDieState(REMOVED));
lhanks02 0:bbda88bee65a 24 }
lhanks02 0:bbda88bee65a 25 } else if(rollable==5)
lhanks02 0:bbda88bee65a 26 for(int i=0; i<6; i++) {
lhanks02 0:bbda88bee65a 27 if(arr[i].getCurrDieState()==REMOVED) {
lhanks02 0:bbda88bee65a 28 arr[i].setCurrDieState(ROLL);
lhanks02 0:bbda88bee65a 29 }
lhanks02 0:bbda88bee65a 30 } else if(rollable==4)
lhanks02 0:bbda88bee65a 31 for(int i=0; i<6; i++) {
lhanks02 0:bbda88bee65a 32 if(arr[i].getCurrDieState()==REMOVED) {
lhanks02 0:bbda88bee65a 33 arr[i].setCurrDieState(ROLL);
lhanks02 0:bbda88bee65a 34 break;
lhanks02 0:bbda88bee65a 35 }
lhanks02 0:bbda88bee65a 36 } else if(rollable==3)
lhanks02 0:bbda88bee65a 37 for(int i=0; i<6; i++) {
lhanks02 0:bbda88bee65a 38 if(arr[i].getCurrDieState()==REMOVED) {
lhanks02 0:bbda88bee65a 39 arr[i].setCurrDieState(ROLL);
lhanks02 0:bbda88bee65a 40 break;
lhanks02 0:bbda88bee65a 41 }
lhanks02 0:bbda88bee65a 42 } else if(rollable==2)
lhanks02 0:bbda88bee65a 43 for(int i=0; i<6; i++) {
lhanks02 0:bbda88bee65a 44 if(arr[i].getCurrDieState()==REMOVED) {
lhanks02 0:bbda88bee65a 45 arr[i].setCurrDieState(ROLL);
lhanks02 0:bbda88bee65a 46 break;
lhanks02 0:bbda88bee65a 47 }
lhanks02 0:bbda88bee65a 48 } else if(rollable==1)
lhanks02 0:bbda88bee65a 49 for(int i=0; i<6; i++) {
lhanks02 0:bbda88bee65a 50 if(arr[i].getCurrDieState()==REMOVED) {
lhanks02 0:bbda88bee65a 51 arr[i].setCurrDieState(ROLL);
lhanks02 0:bbda88bee65a 52 break;
lhanks02 0:bbda88bee65a 53 }
lhanks02 0:bbda88bee65a 54 } else if(rollable==0)
lhanks02 0:bbda88bee65a 55 for(int i=0; i<6; i++) {
lhanks02 0:bbda88bee65a 56 if(arr[i].getCurrDieState()==REMOVED) {
lhanks02 0:bbda88bee65a 57 arr[i].setCurrDieState(ROLL);
lhanks02 0:bbda88bee65a 58 break;
lhanks02 0:bbda88bee65a 59 }
lhanks02 0:bbda88bee65a 60 }
lhanks02 0:bbda88bee65a 61
lhanks02 0:bbda88bee65a 62
lhanks02 0:bbda88bee65a 63
lhanks02 0:bbda88bee65a 64 }
lhanks02 0:bbda88bee65a 65
lhanks02 0:bbda88bee65a 66 void FarkleGame::printScore() //print score function
lhanks02 0:bbda88bee65a 67 {
lhanks02 0:bbda88bee65a 68 uLCD.display_control(LANDSCAPE);
lhanks02 0:bbda88bee65a 69 uLCD.text_width(2);
lhanks02 0:bbda88bee65a 70 uLCD.text_height(2);
lhanks02 0:bbda88bee65a 71 uLCD.locate(0,1);
lhanks02 0:bbda88bee65a 72 uLCD.printf("Your\n");
lhanks02 0:bbda88bee65a 73 uLCD.printf("Turn\n");
lhanks02 0:bbda88bee65a 74 uLCD.printf("Score\n");
lhanks02 0:bbda88bee65a 75 uLCD.printf("------");
lhanks02 0:bbda88bee65a 76 uLCD.printf("\n%d", score);
lhanks02 0:bbda88bee65a 77 }
lhanks02 0:bbda88bee65a 78 Die* FarkleGame::getDieArray()//getter for die array
lhanks02 0:bbda88bee65a 79 {
lhanks02 0:bbda88bee65a 80 return arr;
lhanks02 0:bbda88bee65a 81 }
lhanks02 0:bbda88bee65a 82
lhanks02 0:bbda88bee65a 83 int FarkleGame::calcScore(int *numarray)
lhanks02 0:bbda88bee65a 84 {
lhanks02 0:bbda88bee65a 85 int rollScore=0;//initialize rollScore to zero
lhanks02 0:bbda88bee65a 86 for(int i=1; i<7; i++) {
lhanks02 0:bbda88bee65a 87 if (numarray[i] == 6) {//search for 6 of a kind, code is very similar for 5 and 4 of a kind except for point difference
lhanks02 0:bbda88bee65a 88 rollScore += 3000;
lhanks02 0:bbda88bee65a 89 numarray[i]=0;
lhanks02 0:bbda88bee65a 90 for(int idx=0; i<6; i++) {
lhanks02 0:bbda88bee65a 91 arr[idx].setCurrDieState(REMOVED);//if the dice in the array are part of the score, remove them
lhanks02 0:bbda88bee65a 92 }
lhanks02 0:bbda88bee65a 93 }
lhanks02 0:bbda88bee65a 94 if (numarray[i] == 5) {
lhanks02 0:bbda88bee65a 95 rollScore += 2000;
lhanks02 0:bbda88bee65a 96 numarray[i]=0;
lhanks02 0:bbda88bee65a 97 for(int idx=0; i<6; i++) {
lhanks02 0:bbda88bee65a 98 if(arr[idx].getValue()==i) {
lhanks02 0:bbda88bee65a 99 arr[idx].setCurrDieState(REMOVED);
lhanks02 0:bbda88bee65a 100 }
lhanks02 0:bbda88bee65a 101 }
lhanks02 0:bbda88bee65a 102 }
lhanks02 0:bbda88bee65a 103 if (numarray[i] == 4) {
lhanks02 0:bbda88bee65a 104 rollScore += 1000;
lhanks02 0:bbda88bee65a 105 numarray[i]=0;
lhanks02 0:bbda88bee65a 106 for(int idx=0; idx<6; idx++) {
lhanks02 0:bbda88bee65a 107 if(arr[idx].getValue()==i) {
lhanks02 0:bbda88bee65a 108 arr[idx].setCurrDieState(REMOVED);
lhanks02 0:bbda88bee65a 109 }
lhanks02 0:bbda88bee65a 110 }
lhanks02 0:bbda88bee65a 111 }
lhanks02 0:bbda88bee65a 112 }
lhanks02 0:bbda88bee65a 113 int pairCounter=0;//need to count how many pairs and triples
lhanks02 0:bbda88bee65a 114 int tripCounter=0;
lhanks02 0:bbda88bee65a 115 int flushCounter=0;
lhanks02 0:bbda88bee65a 116 for(int i=1; i<7; i++) {//iterate to find pairs and triples
lhanks02 0:bbda88bee65a 117
lhanks02 0:bbda88bee65a 118 if (numarray[i] == 3) {
lhanks02 0:bbda88bee65a 119 tripCounter+=1;
lhanks02 0:bbda88bee65a 120 }
lhanks02 0:bbda88bee65a 121 if (tripCounter==2) {
lhanks02 0:bbda88bee65a 122 rollScore+=2500;
lhanks02 0:bbda88bee65a 123 tripCounter=0;
lhanks02 0:bbda88bee65a 124 for(int i=0; i<7; i++) {//this function removes dice that score and resets so dice in triples don't score twice
lhanks02 0:bbda88bee65a 125 if(numarray[i]==3) {
lhanks02 0:bbda88bee65a 126 numarray[i]=0;
lhanks02 0:bbda88bee65a 127 for(int idx=0; idx<6; idx++) {
lhanks02 0:bbda88bee65a 128 if(arr[idx].getValue()==i) {
lhanks02 0:bbda88bee65a 129 arr[idx].setCurrDieState(REMOVED);
lhanks02 0:bbda88bee65a 130 }
lhanks02 0:bbda88bee65a 131 }
lhanks02 0:bbda88bee65a 132 }
lhanks02 0:bbda88bee65a 133 }
lhanks02 0:bbda88bee65a 134 }
lhanks02 0:bbda88bee65a 135 if (numarray[i] == 2) {
lhanks02 0:bbda88bee65a 136 pairCounter+=1;
lhanks02 0:bbda88bee65a 137 }
lhanks02 0:bbda88bee65a 138 if (pairCounter==3) {
lhanks02 0:bbda88bee65a 139 rollScore+=1500;
lhanks02 0:bbda88bee65a 140 pairCounter=0;
lhanks02 0:bbda88bee65a 141 for(int i=0; i<7; i++) {//extremely similar to the triple counter
lhanks02 0:bbda88bee65a 142 if(numarray[i]==2) {
lhanks02 0:bbda88bee65a 143 numarray[i]=0;
lhanks02 0:bbda88bee65a 144 for(int idx=0; idx<6; idx++) {
lhanks02 0:bbda88bee65a 145 if(arr[idx].getValue()==i) {
lhanks02 0:bbda88bee65a 146 arr[idx].setCurrDieState(REMOVED);
lhanks02 0:bbda88bee65a 147 }
lhanks02 0:bbda88bee65a 148 }
lhanks02 0:bbda88bee65a 149 }
lhanks02 0:bbda88bee65a 150 }
lhanks02 0:bbda88bee65a 151 }
lhanks02 0:bbda88bee65a 152 if (numarray[i]==1) {
lhanks02 0:bbda88bee65a 153 flushCounter+=1;
lhanks02 0:bbda88bee65a 154 }
lhanks02 0:bbda88bee65a 155 if (flushCounter==6) {//flush counter to determine if all parts of an array keeping track of numbers only have one number each
lhanks02 0:bbda88bee65a 156 rollScore+=1500; //indicating one of each number was rolled (flush)
lhanks02 0:bbda88bee65a 157 for(int idx=0; idx<6; idx++) {
lhanks02 0:bbda88bee65a 158 arr[idx].setCurrDieState(REMOVED);//remove scoring die
lhanks02 0:bbda88bee65a 159 }
lhanks02 0:bbda88bee65a 160 flushCounter=0;
lhanks02 0:bbda88bee65a 161
lhanks02 0:bbda88bee65a 162
lhanks02 0:bbda88bee65a 163 }
lhanks02 0:bbda88bee65a 164 }
lhanks02 0:bbda88bee65a 165 if(tripCounter==1) {
lhanks02 0:bbda88bee65a 166 for(int idx=0; idx<7; idx++) {
lhanks02 0:bbda88bee65a 167 if(numarray[idx]==3) {//if there is only one triple, we add the corresponding number of points
lhanks02 0:bbda88bee65a 168 if(idx==1) {
lhanks02 0:bbda88bee65a 169 rollScore+=1000;
lhanks02 0:bbda88bee65a 170 for(int index=0; index<6; index++) {
lhanks02 0:bbda88bee65a 171 if(arr[index].getValue()==idx) {
lhanks02 0:bbda88bee65a 172 arr[index].setCurrDieState(REMOVED);//remove scoring die
lhanks02 0:bbda88bee65a 173 }
lhanks02 0:bbda88bee65a 174 }
lhanks02 0:bbda88bee65a 175 } else {
lhanks02 0:bbda88bee65a 176 rollScore+=idx*100;
lhanks02 0:bbda88bee65a 177 for(int index=0; index<6; index++) {
lhanks02 0:bbda88bee65a 178 if(arr[index].getValue()==idx) {
lhanks02 0:bbda88bee65a 179 arr[index].setCurrDieState(REMOVED);
lhanks02 0:bbda88bee65a 180 }
lhanks02 0:bbda88bee65a 181 }
lhanks02 0:bbda88bee65a 182 }
lhanks02 0:bbda88bee65a 183 numarray[idx]=0;
lhanks02 0:bbda88bee65a 184 }
lhanks02 0:bbda88bee65a 185 }
lhanks02 0:bbda88bee65a 186 }
lhanks02 0:bbda88bee65a 187 if(pairCounter!=3) {
lhanks02 0:bbda88bee65a 188 for(int idx=0; idx<7; idx++) {
lhanks02 0:bbda88bee65a 189 if(idx==1) {
lhanks02 0:bbda88bee65a 190 if(numarray[idx]==2) {
lhanks02 0:bbda88bee65a 191 rollScore+=200;//if there are not three pairs, only add points for 1's and 5's
lhanks02 0:bbda88bee65a 192 numarray[idx]=0;
lhanks02 0:bbda88bee65a 193 for(int index=0; index<6; index++) {
lhanks02 0:bbda88bee65a 194 if(arr[index].getValue()==idx) {
lhanks02 0:bbda88bee65a 195 arr[index].setCurrDieState(REMOVED);
lhanks02 0:bbda88bee65a 196 }
lhanks02 0:bbda88bee65a 197 }
lhanks02 0:bbda88bee65a 198 }
lhanks02 0:bbda88bee65a 199 if(numarray[idx]==1) {
lhanks02 0:bbda88bee65a 200 rollScore+=100;
lhanks02 0:bbda88bee65a 201 numarray[idx]=0;
lhanks02 0:bbda88bee65a 202 for(int index=0; index<6; index++) {
lhanks02 0:bbda88bee65a 203 if(arr[index].getValue()==idx) {
lhanks02 0:bbda88bee65a 204 arr[index].setCurrDieState(REMOVED);
lhanks02 0:bbda88bee65a 205 }
lhanks02 0:bbda88bee65a 206 }
lhanks02 0:bbda88bee65a 207 }
lhanks02 0:bbda88bee65a 208
lhanks02 0:bbda88bee65a 209 }
lhanks02 0:bbda88bee65a 210 if(idx==5) {
lhanks02 0:bbda88bee65a 211 if(numarray[idx]==2) {
lhanks02 0:bbda88bee65a 212 rollScore+=100;
lhanks02 0:bbda88bee65a 213 numarray[idx]=0;
lhanks02 0:bbda88bee65a 214 for(int index=0; index<6; index++) {
lhanks02 0:bbda88bee65a 215 if(arr[index].getValue()==idx) {
lhanks02 0:bbda88bee65a 216 arr[index].setCurrDieState(REMOVED);
lhanks02 0:bbda88bee65a 217 }
lhanks02 0:bbda88bee65a 218 }
lhanks02 0:bbda88bee65a 219 }
lhanks02 0:bbda88bee65a 220 if(numarray[idx]==1) {
lhanks02 0:bbda88bee65a 221 rollScore+=50;
lhanks02 0:bbda88bee65a 222 numarray[idx]=0;
lhanks02 0:bbda88bee65a 223 for(int index=0; index<6; index++) {
lhanks02 0:bbda88bee65a 224 if(arr[index].getValue()==idx) {
lhanks02 0:bbda88bee65a 225 arr[index].setCurrDieState(REMOVED);
lhanks02 0:bbda88bee65a 226 }
lhanks02 0:bbda88bee65a 227 }
lhanks02 0:bbda88bee65a 228 }
lhanks02 0:bbda88bee65a 229
lhanks02 0:bbda88bee65a 230 }
lhanks02 0:bbda88bee65a 231 }
lhanks02 0:bbda88bee65a 232 pairCounter=0;
lhanks02 0:bbda88bee65a 233 }
lhanks02 0:bbda88bee65a 234 return rollScore;
lhanks02 0:bbda88bee65a 235 }
lhanks02 0:bbda88bee65a 236
lhanks02 0:bbda88bee65a 237
lhanks02 0:bbda88bee65a 238
lhanks02 0:bbda88bee65a 239
lhanks02 0:bbda88bee65a 240
lhanks02 0:bbda88bee65a 241
lhanks02 0:bbda88bee65a 242
lhanks02 0:bbda88bee65a 243
lhanks02 0:bbda88bee65a 244
lhanks02 0:bbda88bee65a 245
lhanks02 0:bbda88bee65a 246
lhanks02 0:bbda88bee65a 247
lhanks02 0:bbda88bee65a 248
lhanks02 0:bbda88bee65a 249 int FarkleGame::getScore()//setter and getter for score
lhanks02 0:bbda88bee65a 250 {
lhanks02 0:bbda88bee65a 251 return score;
lhanks02 0:bbda88bee65a 252 }
lhanks02 0:bbda88bee65a 253
lhanks02 0:bbda88bee65a 254 void FarkleGame::setScore(int num)
lhanks02 0:bbda88bee65a 255 {
lhanks02 0:bbda88bee65a 256 score=num;
lhanks02 0:bbda88bee65a 257 }
lhanks02 0:bbda88bee65a 258 void FarkleGame::startGame()
lhanks02 0:bbda88bee65a 259 {
lhanks02 0:bbda88bee65a 260 uLCD.cls();
lhanks02 0:bbda88bee65a 261 uLCD.display_control(LANDSCAPE);
lhanks02 0:bbda88bee65a 262 uLCD.text_width(2);
lhanks02 0:bbda88bee65a 263 uLCD.text_height(2);
lhanks02 0:bbda88bee65a 264 uLCD.locate(0,1);
lhanks02 0:bbda88bee65a 265 uLCD.printf("Shake\n");
lhanks02 0:bbda88bee65a 266 uLCD.printf("Board\n");
lhanks02 0:bbda88bee65a 267 uLCD.printf("------\n");
lhanks02 0:bbda88bee65a 268 uLCD.printf("To\n");
lhanks02 0:bbda88bee65a 269 uLCD.printf("Roll\n");
lhanks02 0:bbda88bee65a 270 int rolling=0;
lhanks02 0:bbda88bee65a 271 for(int i=0; i<6; i++) {
lhanks02 0:bbda88bee65a 272 if(arr[i].getCurrDieState()==ROLL) {//count how many die are in a rollable state and use that to display how many dice the user will roll
lhanks02 0:bbda88bee65a 273 rolling+=1;
lhanks02 0:bbda88bee65a 274 }
lhanks02 0:bbda88bee65a 275 }
lhanks02 0:bbda88bee65a 276 uLCD.printf("%d", rolling);
lhanks02 0:bbda88bee65a 277 uLCD.printf(" Dice");
lhanks02 0:bbda88bee65a 278 }
lhanks02 0:bbda88bee65a 279