Kevin Lin / Mbed 2 deprecated Lab4Farkle

Dependencies:   mbed 4DGL-uLCD-SE PinDetect

Committer:
klin315
Date:
Tue Oct 26 05:10:36 2021 +0000
Revision:
0:8ee41d0deef7
Child:
1:3cd6e5938144
ok

Who changed what in which revision?

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