Andrew Shi / Mbed 2 deprecated Lab4

Dependencies:   mbed 4DGL-uLCD-SE PinDetect

Committer:
ashi31
Date:
Fri Oct 22 03:57:47 2021 +0000
Revision:
0:7d8ffdfdb16e
Lab4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashi31 0:7d8ffdfdb16e 1 #include "Die.h"
ashi31 0:7d8ffdfdb16e 2 #include "FarkleGame.h"
ashi31 0:7d8ffdfdb16e 3
ashi31 0:7d8ffdfdb16e 4 #include <string>
ashi31 0:7d8ffdfdb16e 5 #include <iostream>
ashi31 0:7d8ffdfdb16e 6 #include <sstream>
ashi31 0:7d8ffdfdb16e 7
ashi31 0:7d8ffdfdb16e 8 using namespace std;
ashi31 0:7d8ffdfdb16e 9
ashi31 0:7d8ffdfdb16e 10 //Constructors
ashi31 0:7d8ffdfdb16e 11 FarkleGame::FarkleGame(){
ashi31 0:7d8ffdfdb16e 12 Die Dice[6];
ashi31 0:7d8ffdfdb16e 13 int DiceVals[6];
ashi31 0:7d8ffdfdb16e 14
ashi31 0:7d8ffdfdb16e 15 int turnScore = 0;
ashi31 0:7d8ffdfdb16e 16 int rollScore = 0;
ashi31 0:7d8ffdfdb16e 17 int farkles = 0;
ashi31 0:7d8ffdfdb16e 18 }
ashi31 0:7d8ffdfdb16e 19
ashi31 0:7d8ffdfdb16e 20 //Method
ashi31 0:7d8ffdfdb16e 21 void FarkleGame::dispIntro(uLCD_4DGL& scr, int nd){
ashi31 0:7d8ffdfdb16e 22 scr.cls();
ashi31 0:7d8ffdfdb16e 23 scr.display_control(PORTRAIT);
ashi31 0:7d8ffdfdb16e 24
ashi31 0:7d8ffdfdb16e 25 scr.text_width(2);
ashi31 0:7d8ffdfdb16e 26 scr.text_height(2);
ashi31 0:7d8ffdfdb16e 27 scr.locate(0,1);
ashi31 0:7d8ffdfdb16e 28 scr.printf("Shake\n");
ashi31 0:7d8ffdfdb16e 29 scr.printf("Board\n");
ashi31 0:7d8ffdfdb16e 30 scr.printf("------\n");
ashi31 0:7d8ffdfdb16e 31 scr.printf("To\n");
ashi31 0:7d8ffdfdb16e 32 scr.printf("Roll\n");
ashi31 0:7d8ffdfdb16e 33 scr.printf("%d Dice", nd);
ashi31 0:7d8ffdfdb16e 34 }
ashi31 0:7d8ffdfdb16e 35
ashi31 0:7d8ffdfdb16e 36 void FarkleGame::init(){
ashi31 0:7d8ffdfdb16e 37 turnScore = 0;
ashi31 0:7d8ffdfdb16e 38 rollScore = 0;
ashi31 0:7d8ffdfdb16e 39 farkles = 0;
ashi31 0:7d8ffdfdb16e 40 }
ashi31 0:7d8ffdfdb16e 41
ashi31 0:7d8ffdfdb16e 42 void FarkleGame::rollDice(){
ashi31 0:7d8ffdfdb16e 43 for(int i = 0; i < 6; i++){
ashi31 0:7d8ffdfdb16e 44 Dice[i].rollDie();
ashi31 0:7d8ffdfdb16e 45 }
ashi31 0:7d8ffdfdb16e 46 }
ashi31 0:7d8ffdfdb16e 47
ashi31 0:7d8ffdfdb16e 48 void FarkleGame::displayDice(uLCD_4DGL& scr, int nd){
ashi31 0:7d8ffdfdb16e 49
ashi31 0:7d8ffdfdb16e 50 scr.cls();
ashi31 0:7d8ffdfdb16e 51 scr.display_control(PORTRAIT);
ashi31 0:7d8ffdfdb16e 52
ashi31 0:7d8ffdfdb16e 53 for(int i = 0; i < nd; i++){
ashi31 0:7d8ffdfdb16e 54 Dice[i].displayDie(i+1, scr);
ashi31 0:7d8ffdfdb16e 55 }
ashi31 0:7d8ffdfdb16e 56
ashi31 0:7d8ffdfdb16e 57 }
ashi31 0:7d8ffdfdb16e 58
ashi31 0:7d8ffdfdb16e 59 void FarkleGame::loadVals(int nd){
ashi31 0:7d8ffdfdb16e 60 for(int i = 0; i < 6; i++){
ashi31 0:7d8ffdfdb16e 61 DiceVals[i] = 0;
ashi31 0:7d8ffdfdb16e 62 }
ashi31 0:7d8ffdfdb16e 63 for(int i = 0; i < nd; i++){
ashi31 0:7d8ffdfdb16e 64 if(Dice[i].getVal() == 1){
ashi31 0:7d8ffdfdb16e 65 DiceVals[0]++;
ashi31 0:7d8ffdfdb16e 66 }else if(Dice[i].getVal() == 2){
ashi31 0:7d8ffdfdb16e 67 DiceVals[1]++;
ashi31 0:7d8ffdfdb16e 68 }else if(Dice[i].getVal() == 3){
ashi31 0:7d8ffdfdb16e 69 DiceVals[2]++;
ashi31 0:7d8ffdfdb16e 70 }else if(Dice[i].getVal() == 4){
ashi31 0:7d8ffdfdb16e 71 DiceVals[3]++;
ashi31 0:7d8ffdfdb16e 72 }else if(Dice[i].getVal() == 5){
ashi31 0:7d8ffdfdb16e 73 DiceVals[4]++;
ashi31 0:7d8ffdfdb16e 74 }else if(Dice[i].getVal() == 6){
ashi31 0:7d8ffdfdb16e 75 DiceVals[5]++;
ashi31 0:7d8ffdfdb16e 76 }
ashi31 0:7d8ffdfdb16e 77 }
ashi31 0:7d8ffdfdb16e 78 }
ashi31 0:7d8ffdfdb16e 79
ashi31 0:7d8ffdfdb16e 80 int FarkleGame::calcScore(){
ashi31 0:7d8ffdfdb16e 81 //Scores will be checked in descending order of value
ashi31 0:7d8ffdfdb16e 82
ashi31 0:7d8ffdfdb16e 83 //check for 6
ashi31 0:7d8ffdfdb16e 84 for(int i = 0; i < 6; i++){
ashi31 0:7d8ffdfdb16e 85 if(DiceVals[i] == 6){
ashi31 0:7d8ffdfdb16e 86 return 3000;
ashi31 0:7d8ffdfdb16e 87 }
ashi31 0:7d8ffdfdb16e 88 }
ashi31 0:7d8ffdfdb16e 89
ashi31 0:7d8ffdfdb16e 90 //check for 2triplets
ashi31 0:7d8ffdfdb16e 91 int tripCount = 0;
ashi31 0:7d8ffdfdb16e 92 for(int i = 0; i < 6; i++){
ashi31 0:7d8ffdfdb16e 93 if(DiceVals[i] == 3) tripCount++;
ashi31 0:7d8ffdfdb16e 94 }
ashi31 0:7d8ffdfdb16e 95 if(tripCount == 2){
ashi31 0:7d8ffdfdb16e 96 return 2500;
ashi31 0:7d8ffdfdb16e 97 }
ashi31 0:7d8ffdfdb16e 98
ashi31 0:7d8ffdfdb16e 99 //check for 5
ashi31 0:7d8ffdfdb16e 100 for(int i = 0; i < 6; i++){
ashi31 0:7d8ffdfdb16e 101 if(DiceVals[i] == 5){
ashi31 0:7d8ffdfdb16e 102 return 2000;
ashi31 0:7d8ffdfdb16e 103 }
ashi31 0:7d8ffdfdb16e 104 }
ashi31 0:7d8ffdfdb16e 105
ashi31 0:7d8ffdfdb16e 106 //check for 123456
ashi31 0:7d8ffdfdb16e 107 int singCount = 0;
ashi31 0:7d8ffdfdb16e 108 for(int i = 0; i < 6; i++){
ashi31 0:7d8ffdfdb16e 109 if(DiceVals[i] == 1) singCount++;
ashi31 0:7d8ffdfdb16e 110 }
ashi31 0:7d8ffdfdb16e 111 if(singCount == 6){
ashi31 0:7d8ffdfdb16e 112 return 1500;
ashi31 0:7d8ffdfdb16e 113 }
ashi31 0:7d8ffdfdb16e 114
ashi31 0:7d8ffdfdb16e 115 //check for 3doubs
ashi31 0:7d8ffdfdb16e 116 int doubCount = 0;
ashi31 0:7d8ffdfdb16e 117 for(int i = 0; i < 6; i++){
ashi31 0:7d8ffdfdb16e 118 if(DiceVals[i] == 2) doubCount++;
ashi31 0:7d8ffdfdb16e 119 }
ashi31 0:7d8ffdfdb16e 120 if(doubCount == 3){
ashi31 0:7d8ffdfdb16e 121 return 1500;
ashi31 0:7d8ffdfdb16e 122 }
ashi31 0:7d8ffdfdb16e 123
ashi31 0:7d8ffdfdb16e 124 //check for 4
ashi31 0:7d8ffdfdb16e 125 for(int i = 0; i < 6; i++){
ashi31 0:7d8ffdfdb16e 126 if(DiceVals[i] == 4){
ashi31 0:7d8ffdfdb16e 127 return 1000;
ashi31 0:7d8ffdfdb16e 128 }
ashi31 0:7d8ffdfdb16e 129 }
ashi31 0:7d8ffdfdb16e 130
ashi31 0:7d8ffdfdb16e 131 //check trips
ashi31 0:7d8ffdfdb16e 132 if(tripCount == 1){
ashi31 0:7d8ffdfdb16e 133 if(DiceVals[0] == 3){
ashi31 0:7d8ffdfdb16e 134 return 1000;
ashi31 0:7d8ffdfdb16e 135 }else if(DiceVals[5] == 3){
ashi31 0:7d8ffdfdb16e 136 return 600;
ashi31 0:7d8ffdfdb16e 137 }
ashi31 0:7d8ffdfdb16e 138 else if(DiceVals[4] == 3){
ashi31 0:7d8ffdfdb16e 139 return 500;
ashi31 0:7d8ffdfdb16e 140 }else if(DiceVals[3] == 3){
ashi31 0:7d8ffdfdb16e 141 return 400;
ashi31 0:7d8ffdfdb16e 142 }else if(DiceVals[2] == 3){
ashi31 0:7d8ffdfdb16e 143 return 300;
ashi31 0:7d8ffdfdb16e 144 }else if(DiceVals[1] == 3){
ashi31 0:7d8ffdfdb16e 145 return 200;
ashi31 0:7d8ffdfdb16e 146 }
ashi31 0:7d8ffdfdb16e 147 }
ashi31 0:7d8ffdfdb16e 148
ashi31 0:7d8ffdfdb16e 149 //check 1
ashi31 0:7d8ffdfdb16e 150 if(DiceVals[0] != 0){
ashi31 0:7d8ffdfdb16e 151 return 100;
ashi31 0:7d8ffdfdb16e 152 }
ashi31 0:7d8ffdfdb16e 153
ashi31 0:7d8ffdfdb16e 154 //check 5
ashi31 0:7d8ffdfdb16e 155 if(DiceVals[4] != 0){
ashi31 0:7d8ffdfdb16e 156 return 50;
ashi31 0:7d8ffdfdb16e 157 }
ashi31 0:7d8ffdfdb16e 158
ashi31 0:7d8ffdfdb16e 159 farkles++;
ashi31 0:7d8ffdfdb16e 160
ashi31 0:7d8ffdfdb16e 161 return 0;
ashi31 0:7d8ffdfdb16e 162 }
ashi31 0:7d8ffdfdb16e 163
ashi31 0:7d8ffdfdb16e 164 void FarkleGame::updateScores(){
ashi31 0:7d8ffdfdb16e 165 rollScore = calcScore();
ashi31 0:7d8ffdfdb16e 166 turnScore += rollScore;
ashi31 0:7d8ffdfdb16e 167 if(farkles > 0){
ashi31 0:7d8ffdfdb16e 168 turnScore = 0;
ashi31 0:7d8ffdfdb16e 169 }
ashi31 0:7d8ffdfdb16e 170 }
ashi31 0:7d8ffdfdb16e 171
ashi31 0:7d8ffdfdb16e 172 void FarkleGame::dispFarkle(uLCD_4DGL& scr){
ashi31 0:7d8ffdfdb16e 173 scr.text_width(2);
ashi31 0:7d8ffdfdb16e 174 scr.text_height(2);
ashi31 0:7d8ffdfdb16e 175 scr.locate(0,6);
ashi31 0:7d8ffdfdb16e 176
ashi31 0:7d8ffdfdb16e 177 scr.printf("FARKLE!");
ashi31 0:7d8ffdfdb16e 178 }
ashi31 0:7d8ffdfdb16e 179
ashi31 0:7d8ffdfdb16e 180 void FarkleGame::dispScore(uLCD_4DGL& scr){
ashi31 0:7d8ffdfdb16e 181 scr.text_width(1);
ashi31 0:7d8ffdfdb16e 182 scr.text_height(1);
ashi31 0:7d8ffdfdb16e 183 scr.locate(0,11);
ashi31 0:7d8ffdfdb16e 184
ashi31 0:7d8ffdfdb16e 185 scr.printf("\nThis Turn: %d\n", turnScore);
ashi31 0:7d8ffdfdb16e 186 scr.printf("\nThis Roll: %d\n", rollScore);
ashi31 0:7d8ffdfdb16e 187 //scr.printf("Val Counts: %d %d %d %d %d %d", DiceVals[0], DiceVals[1], DiceVals[2], DiceVals[3], DiceVals[4], DiceVals[5]);
ashi31 0:7d8ffdfdb16e 188 }
ashi31 0:7d8ffdfdb16e 189
ashi31 0:7d8ffdfdb16e 190 void FarkleGame::dispTurn(uLCD_4DGL& scr){
ashi31 0:7d8ffdfdb16e 191 scr.cls();
ashi31 0:7d8ffdfdb16e 192 scr.display_control(PORTRAIT);
ashi31 0:7d8ffdfdb16e 193
ashi31 0:7d8ffdfdb16e 194 scr.text_width(2);
ashi31 0:7d8ffdfdb16e 195 scr.text_height(2);
ashi31 0:7d8ffdfdb16e 196 scr.locate(0,1);
ashi31 0:7d8ffdfdb16e 197 scr.printf("Your\n");
ashi31 0:7d8ffdfdb16e 198 scr.printf("Turn\n");
ashi31 0:7d8ffdfdb16e 199 scr.printf("Score\n");
ashi31 0:7d8ffdfdb16e 200 scr.printf("-----\n");
ashi31 0:7d8ffdfdb16e 201 scr.printf("%d\n", turnScore);
ashi31 0:7d8ffdfdb16e 202 }
ashi31 0:7d8ffdfdb16e 203
ashi31 0:7d8ffdfdb16e 204 void FarkleGame::scrnWipe(uLCD_4DGL& scr){
ashi31 0:7d8ffdfdb16e 205 scr.cls();
ashi31 0:7d8ffdfdb16e 206 }
ashi31 0:7d8ffdfdb16e 207
ashi31 0:7d8ffdfdb16e 208 bool FarkleGame::checkRoll(MMA8452& a){
ashi31 0:7d8ffdfdb16e 209 double x = 0;
ashi31 0:7d8ffdfdb16e 210 double y = 0;
ashi31 0:7d8ffdfdb16e 211 double z = 0;
ashi31 0:7d8ffdfdb16e 212
ashi31 0:7d8ffdfdb16e 213 a.readXYZGravity(&x,&y,&z);
ashi31 0:7d8ffdfdb16e 214
ashi31 0:7d8ffdfdb16e 215 return (x > 0.5 || x < -0.5 || y > 0.5 || y < -0.5);
ashi31 0:7d8ffdfdb16e 216 }
ashi31 0:7d8ffdfdb16e 217
ashi31 0:7d8ffdfdb16e 218 //S&G
ashi31 0:7d8ffdfdb16e 219 void FarkleGame::setDieVal(int pos, int v){
ashi31 0:7d8ffdfdb16e 220 Dice[pos-1].setVal(v);
ashi31 0:7d8ffdfdb16e 221 }
ashi31 0:7d8ffdfdb16e 222
ashi31 0:7d8ffdfdb16e 223 int FarkleGame::getDieVal(int pos){
ashi31 0:7d8ffdfdb16e 224 return Dice[pos-1].getVal();
ashi31 0:7d8ffdfdb16e 225 }