Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed 4DGL-uLCD-SE PinDetect
diceMath.cpp@0:8ef203a5084f, 2022-03-17 (annotated)
- Committer:
- mmcdoanld81
- Date:
- Thu Mar 17 17:50:51 2022 +0000
- Revision:
- 0:8ef203a5084f
FinalCopy
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mmcdoanld81 | 0:8ef203a5084f | 1 | //This file contains on the calculations to display the dice on the screen |
| mmcdoanld81 | 0:8ef203a5084f | 2 | #include <iostream> |
| mmcdoanld81 | 0:8ef203a5084f | 3 | #include <fstream> |
| mmcdoanld81 | 0:8ef203a5084f | 4 | #include <iomanip> |
| mmcdoanld81 | 0:8ef203a5084f | 5 | #include <cmath> |
| mmcdoanld81 | 0:8ef203a5084f | 6 | #include <cstdlib> |
| mmcdoanld81 | 0:8ef203a5084f | 7 | #include <time.h> |
| mmcdoanld81 | 0:8ef203a5084f | 8 | #include <string> |
| mmcdoanld81 | 0:8ef203a5084f | 9 | #include <stdlib.h> |
| mmcdoanld81 | 0:8ef203a5084f | 10 | #include <stdio.h> |
| mmcdoanld81 | 0:8ef203a5084f | 11 | #include <sstream> |
| mmcdoanld81 | 0:8ef203a5084f | 12 | |
| mmcdoanld81 | 0:8ef203a5084f | 13 | #include "farkleMath.h" |
| mmcdoanld81 | 0:8ef203a5084f | 14 | #include "diceMath.h" |
| mmcdoanld81 | 0:8ef203a5084f | 15 | #include "MMA8452.h" |
| mmcdoanld81 | 0:8ef203a5084f | 16 | #include "uLCD_4DGL.h" |
| mmcdoanld81 | 0:8ef203a5084f | 17 | #include "Speaker.h" |
| mmcdoanld81 | 0:8ef203a5084f | 18 | #include "temperature.h" |
| mmcdoanld81 | 0:8ef203a5084f | 19 | #include "PinDetect.h" |
| mmcdoanld81 | 0:8ef203a5084f | 20 | #include "mbed.h" |
| mmcdoanld81 | 0:8ef203a5084f | 21 | |
| mmcdoanld81 | 0:8ef203a5084f | 22 | #define WHITE 0xFFFFFF |
| mmcdoanld81 | 0:8ef203a5084f | 23 | #define BLACK 0x000000 |
| mmcdoanld81 | 0:8ef203a5084f | 24 | #define Red 0xFF0000 |
| mmcdoanld81 | 0:8ef203a5084f | 25 | #define GREEN 0x00FF00 |
| mmcdoanld81 | 0:8ef203a5084f | 26 | #define BLUE 0x0000FF |
| mmcdoanld81 | 0:8ef203a5084f | 27 | #define LGREY 0xBFBFBF |
| mmcdoanld81 | 0:8ef203a5084f | 28 | #define DGRAY 0x5F5F5F |
| mmcdoanld81 | 0:8ef203a5084f | 29 | |
| mmcdoanld81 | 0:8ef203a5084f | 30 | using namespace std; |
| mmcdoanld81 | 0:8ef203a5084f | 31 | |
| mmcdoanld81 | 0:8ef203a5084f | 32 | extern MMA8452 acc; |
| mmcdoanld81 | 0:8ef203a5084f | 33 | uLCD_4DGL uLCD(p9, p10, p11); |
| mmcdoanld81 | 0:8ef203a5084f | 34 | Serial pc(USBTX,USBRX); |
| mmcdoanld81 | 0:8ef203a5084f | 35 | extern Speaker mySpeaker; |
| mmcdoanld81 | 0:8ef203a5084f | 36 | Dice dice; |
| mmcdoanld81 | 0:8ef203a5084f | 37 | extern FarkleMath farklemath; |
| mmcdoanld81 | 0:8ef203a5084f | 38 | |
| mmcdoanld81 | 0:8ef203a5084f | 39 | |
| mmcdoanld81 | 0:8ef203a5084f | 40 | void Dice::setTakeaway(int input){ |
| mmcdoanld81 | 0:8ef203a5084f | 41 | takeaway = takeaway + input; |
| mmcdoanld81 | 0:8ef203a5084f | 42 | } |
| mmcdoanld81 | 0:8ef203a5084f | 43 | void Dice::setSetTakeaway(int input){ |
| mmcdoanld81 | 0:8ef203a5084f | 44 | takeaway = input; |
| mmcdoanld81 | 0:8ef203a5084f | 45 | } |
| mmcdoanld81 | 0:8ef203a5084f | 46 | |
| mmcdoanld81 | 0:8ef203a5084f | 47 | int Dice::getGetDiceResults(int input){ |
| mmcdoanld81 | 0:8ef203a5084f | 48 | return getDiceResult(diceResults, input); |
| mmcdoanld81 | 0:8ef203a5084f | 49 | } |
| mmcdoanld81 | 0:8ef203a5084f | 50 | |
| mmcdoanld81 | 0:8ef203a5084f | 51 | void Dice::startDiceRoll(){ |
| mmcdoanld81 | 0:8ef203a5084f | 52 | rollDice(diceResults); |
| mmcdoanld81 | 0:8ef203a5084f | 53 | } |
| mmcdoanld81 | 0:8ef203a5084f | 54 | |
| mmcdoanld81 | 0:8ef203a5084f | 55 | void Dice::rollDice(int array[]){ |
| mmcdoanld81 | 0:8ef203a5084f | 56 | mySpeaker.PlayNote(100.0,0.15,0.2); |
| mmcdoanld81 | 0:8ef203a5084f | 57 | mySpeaker.PlayNote(200.0,0.15,0.2); |
| mmcdoanld81 | 0:8ef203a5084f | 58 | mySpeaker.PlayNote(300.0,0.15,0.2); |
| mmcdoanld81 | 0:8ef203a5084f | 59 | mySpeaker.PlayNote(400.0,0.15,0.2); |
| mmcdoanld81 | 0:8ef203a5084f | 60 | mySpeaker.PlayNote(300.0,0.15,0.2); |
| mmcdoanld81 | 0:8ef203a5084f | 61 | mySpeaker.PlayNote(200.0,0.15,0.2); |
| mmcdoanld81 | 0:8ef203a5084f | 62 | mySpeaker.PlayNote(100.0,0.15,0.2); |
| mmcdoanld81 | 0:8ef203a5084f | 63 | for(int i = 1; i<=6; i++){ |
| mmcdoanld81 | 0:8ef203a5084f | 64 | array[i] = 0; |
| mmcdoanld81 | 0:8ef203a5084f | 65 | } |
| mmcdoanld81 | 0:8ef203a5084f | 66 | uLCD.cls(); |
| mmcdoanld81 | 0:8ef203a5084f | 67 | for (int counter = 1; counter <= numberOfDice; counter++){ |
| mmcdoanld81 | 0:8ef203a5084f | 68 | int throwValue = rollDie(); |
| mmcdoanld81 | 0:8ef203a5084f | 69 | array[throwValue] += 1; |
| mmcdoanld81 | 0:8ef203a5084f | 70 | displayDiceOutline(counter); |
| mmcdoanld81 | 0:8ef203a5084f | 71 | displayDiceNumber(counter, throwValue); |
| mmcdoanld81 | 0:8ef203a5084f | 72 | } |
| mmcdoanld81 | 0:8ef203a5084f | 73 | farklemath.calculateScore(); |
| mmcdoanld81 | 0:8ef203a5084f | 74 | } |
| mmcdoanld81 | 0:8ef203a5084f | 75 | |
| mmcdoanld81 | 0:8ef203a5084f | 76 | void Dice::setSetDiceResult (int position, int value){ |
| mmcdoanld81 | 0:8ef203a5084f | 77 | setDiceResult(diceResults,position,value); |
| mmcdoanld81 | 0:8ef203a5084f | 78 | } |
| mmcdoanld81 | 0:8ef203a5084f | 79 | |
| mmcdoanld81 | 0:8ef203a5084f | 80 | |
| mmcdoanld81 | 0:8ef203a5084f | 81 | void Dice::setDiceResult (int array[], int position, int value){ |
| mmcdoanld81 | 0:8ef203a5084f | 82 | array[position] = value; |
| mmcdoanld81 | 0:8ef203a5084f | 83 | } |
| mmcdoanld81 | 0:8ef203a5084f | 84 | |
| mmcdoanld81 | 0:8ef203a5084f | 85 | |
| mmcdoanld81 | 0:8ef203a5084f | 86 | int Dice::getDiceResult(int array[], int position){ |
| mmcdoanld81 | 0:8ef203a5084f | 87 | int space = array[position]; |
| mmcdoanld81 | 0:8ef203a5084f | 88 | return space; |
| mmcdoanld81 | 0:8ef203a5084f | 89 | } |
| mmcdoanld81 | 0:8ef203a5084f | 90 | |
| mmcdoanld81 | 0:8ef203a5084f | 91 | int Dice::rollDie(){ |
| mmcdoanld81 | 0:8ef203a5084f | 92 | int value = (rand()%6)+1; |
| mmcdoanld81 | 0:8ef203a5084f | 93 | return value; |
| mmcdoanld81 | 0:8ef203a5084f | 94 | } |
| mmcdoanld81 | 0:8ef203a5084f | 95 | |
| mmcdoanld81 | 0:8ef203a5084f | 96 | |
| mmcdoanld81 | 0:8ef203a5084f | 97 | Dice::Dice(){ |
| mmcdoanld81 | 0:8ef203a5084f | 98 | numberOfDice = 6; |
| mmcdoanld81 | 0:8ef203a5084f | 99 | takeaway = 0; |
| mmcdoanld81 | 0:8ef203a5084f | 100 | } |
| mmcdoanld81 | 0:8ef203a5084f | 101 | |
| mmcdoanld81 | 0:8ef203a5084f | 102 | void Dice::setNumberOfDice(int value){ |
| mmcdoanld81 | 0:8ef203a5084f | 103 | numberOfDice = value; |
| mmcdoanld81 | 0:8ef203a5084f | 104 | } |
| mmcdoanld81 | 0:8ef203a5084f | 105 | |
| mmcdoanld81 | 0:8ef203a5084f | 106 | int Dice::getTakeaway(){ |
| mmcdoanld81 | 0:8ef203a5084f | 107 | return takeaway; |
| mmcdoanld81 | 0:8ef203a5084f | 108 | } |
| mmcdoanld81 | 0:8ef203a5084f | 109 | |
| mmcdoanld81 | 0:8ef203a5084f | 110 | void Dice::displayStartScreen(int value){ |
| mmcdoanld81 | 0:8ef203a5084f | 111 | uLCD.cls(); |
| mmcdoanld81 | 0:8ef203a5084f | 112 | uLCD.text_width(2); |
| mmcdoanld81 | 0:8ef203a5084f | 113 | uLCD.text_height(2); |
| mmcdoanld81 | 0:8ef203a5084f | 114 | uLCD.printf("Shake\n"); |
| mmcdoanld81 | 0:8ef203a5084f | 115 | uLCD.printf("Board To\n"); |
| mmcdoanld81 | 0:8ef203a5084f | 116 | uLCD.printf("--------\n"); |
| mmcdoanld81 | 0:8ef203a5084f | 117 | uLCD.printf("Roll\n"); |
| mmcdoanld81 | 0:8ef203a5084f | 118 | uLCD.printf("%d Dice\n", value); |
| mmcdoanld81 | 0:8ef203a5084f | 119 | } |
| mmcdoanld81 | 0:8ef203a5084f | 120 | |
| mmcdoanld81 | 0:8ef203a5084f | 121 | int Dice::getNumOfDice(){ |
| mmcdoanld81 | 0:8ef203a5084f | 122 | return numberOfDice; |
| mmcdoanld81 | 0:8ef203a5084f | 123 | } |
| mmcdoanld81 | 0:8ef203a5084f | 124 | |
| mmcdoanld81 | 0:8ef203a5084f | 125 | void Dice::setNumOfDice(){ |
| mmcdoanld81 | 0:8ef203a5084f | 126 | numberOfDice = (((numberOfDice % (6-takeaway))+1)); |
| mmcdoanld81 | 0:8ef203a5084f | 127 | } |
| mmcdoanld81 | 0:8ef203a5084f | 128 | |
| mmcdoanld81 | 0:8ef203a5084f | 129 | void Dice::displayDiceOutline(int currPos){ |
| mmcdoanld81 | 0:8ef203a5084f | 130 | //Draws the outline of dice in White |
| mmcdoanld81 | 0:8ef203a5084f | 131 | if(currPos == 1){ |
| mmcdoanld81 | 0:8ef203a5084f | 132 | uLCD.filled_rectangle(0,0,41,41, WHITE); |
| mmcdoanld81 | 0:8ef203a5084f | 133 | } |
| mmcdoanld81 | 0:8ef203a5084f | 134 | if(currPos == 2){ |
| mmcdoanld81 | 0:8ef203a5084f | 135 | uLCD.filled_rectangle(43,0,85,41, WHITE); |
| mmcdoanld81 | 0:8ef203a5084f | 136 | } |
| mmcdoanld81 | 0:8ef203a5084f | 137 | if(currPos == 3){ |
| mmcdoanld81 | 0:8ef203a5084f | 138 | uLCD.filled_rectangle(87,0,126,41, WHITE); |
| mmcdoanld81 | 0:8ef203a5084f | 139 | } |
| mmcdoanld81 | 0:8ef203a5084f | 140 | if(currPos == 4){ |
| mmcdoanld81 | 0:8ef203a5084f | 141 | uLCD.filled_rectangle(0,43,41,84, WHITE); |
| mmcdoanld81 | 0:8ef203a5084f | 142 | } |
| mmcdoanld81 | 0:8ef203a5084f | 143 | if(currPos == 5){ |
| mmcdoanld81 | 0:8ef203a5084f | 144 | uLCD.filled_rectangle(43,43,85,84, WHITE); |
| mmcdoanld81 | 0:8ef203a5084f | 145 | } |
| mmcdoanld81 | 0:8ef203a5084f | 146 | if(currPos == 6){ |
| mmcdoanld81 | 0:8ef203a5084f | 147 | uLCD.filled_rectangle(87,43,126,84, WHITE); |
| mmcdoanld81 | 0:8ef203a5084f | 148 | } |
| mmcdoanld81 | 0:8ef203a5084f | 149 | } |
| mmcdoanld81 | 0:8ef203a5084f | 150 | void Dice::displayDiceNumber(int currPos, int currValue){ |
| mmcdoanld81 | 0:8ef203a5084f | 151 | int xpos = 0; |
| mmcdoanld81 | 0:8ef203a5084f | 152 | int ypos = 0; |
| mmcdoanld81 | 0:8ef203a5084f | 153 | int radius = 4; |
| mmcdoanld81 | 0:8ef203a5084f | 154 | |
| mmcdoanld81 | 0:8ef203a5084f | 155 | //This tells where each circle will be in order to display the dice |
| mmcdoanld81 | 0:8ef203a5084f | 156 | if (currPos == 1){ |
| mmcdoanld81 | 0:8ef203a5084f | 157 | xpos = 0; |
| mmcdoanld81 | 0:8ef203a5084f | 158 | ypos = 0; |
| mmcdoanld81 | 0:8ef203a5084f | 159 | } |
| mmcdoanld81 | 0:8ef203a5084f | 160 | if (currPos == 2){ |
| mmcdoanld81 | 0:8ef203a5084f | 161 | xpos = 43; |
| mmcdoanld81 | 0:8ef203a5084f | 162 | ypos = 0; |
| mmcdoanld81 | 0:8ef203a5084f | 163 | } |
| mmcdoanld81 | 0:8ef203a5084f | 164 | if (currPos == 3){ |
| mmcdoanld81 | 0:8ef203a5084f | 165 | xpos =87; |
| mmcdoanld81 | 0:8ef203a5084f | 166 | ypos = 0; |
| mmcdoanld81 | 0:8ef203a5084f | 167 | } |
| mmcdoanld81 | 0:8ef203a5084f | 168 | if (currPos == 4){ |
| mmcdoanld81 | 0:8ef203a5084f | 169 | xpos = 0; |
| mmcdoanld81 | 0:8ef203a5084f | 170 | ypos = 43; |
| mmcdoanld81 | 0:8ef203a5084f | 171 | } |
| mmcdoanld81 | 0:8ef203a5084f | 172 | if (currPos == 5){ |
| mmcdoanld81 | 0:8ef203a5084f | 173 | xpos = 43; |
| mmcdoanld81 | 0:8ef203a5084f | 174 | ypos = 43; |
| mmcdoanld81 | 0:8ef203a5084f | 175 | } |
| mmcdoanld81 | 0:8ef203a5084f | 176 | if (currPos == 6){ |
| mmcdoanld81 | 0:8ef203a5084f | 177 | xpos = 87; |
| mmcdoanld81 | 0:8ef203a5084f | 178 | ypos = 43; |
| mmcdoanld81 | 0:8ef203a5084f | 179 | } |
| mmcdoanld81 | 0:8ef203a5084f | 180 | //This draws the circles to tell what dice it is in Black |
| mmcdoanld81 | 0:8ef203a5084f | 181 | if (currValue == 1){ |
| mmcdoanld81 | 0:8ef203a5084f | 182 | uLCD.filled_circle(xpos + 20, ypos + 20, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 183 | } |
| mmcdoanld81 | 0:8ef203a5084f | 184 | if (currValue == 2){ |
| mmcdoanld81 | 0:8ef203a5084f | 185 | uLCD.filled_circle(xpos + 10, ypos + 10, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 186 | uLCD.filled_circle(xpos + 32, ypos + 32, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 187 | } |
| mmcdoanld81 | 0:8ef203a5084f | 188 | if (currValue == 3){ |
| mmcdoanld81 | 0:8ef203a5084f | 189 | uLCD.filled_circle(xpos + 10, ypos + 10, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 190 | uLCD.filled_circle(xpos + 21, ypos + 21, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 191 | uLCD.filled_circle(xpos + 32, ypos + 32, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 192 | } |
| mmcdoanld81 | 0:8ef203a5084f | 193 | if (currValue == 4){ |
| mmcdoanld81 | 0:8ef203a5084f | 194 | uLCD.filled_circle(xpos + 10, ypos + 10, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 195 | uLCD.filled_circle(xpos + 10, ypos + 32, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 196 | uLCD.filled_circle(xpos + 32, ypos + 10, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 197 | uLCD.filled_circle(xpos + 32, ypos + 32, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 198 | } |
| mmcdoanld81 | 0:8ef203a5084f | 199 | if (currValue == 5){ |
| mmcdoanld81 | 0:8ef203a5084f | 200 | uLCD.filled_circle(xpos + 10, ypos + 10, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 201 | uLCD.filled_circle(xpos + 10, ypos + 32, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 202 | uLCD.filled_circle(xpos + 32, ypos + 10, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 203 | uLCD.filled_circle(xpos + 32, ypos + 32, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 204 | uLCD.filled_circle(xpos + 21, ypos + 21, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 205 | } |
| mmcdoanld81 | 0:8ef203a5084f | 206 | if (currValue == 6){ |
| mmcdoanld81 | 0:8ef203a5084f | 207 | uLCD.filled_circle(xpos + 10, ypos + 10, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 208 | uLCD.filled_circle(xpos + 10, ypos + 32, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 209 | uLCD.filled_circle(xpos + 32, ypos + 10, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 210 | uLCD.filled_circle(xpos + 32, ypos + 32, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 211 | uLCD.filled_circle(xpos + 10, ypos + 21, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 212 | uLCD.filled_circle(xpos + 32, ypos + 21, radius, BLACK); |
| mmcdoanld81 | 0:8ef203a5084f | 213 | } |
| mmcdoanld81 | 0:8ef203a5084f | 214 | } |