Michael McDonald / Mbed 2 deprecated Farkle

Dependencies:   mbed 4DGL-uLCD-SE PinDetect

Committer:
mmcdoanld81
Date:
Thu Mar 17 17:50:51 2022 +0000
Revision:
0:8ef203a5084f
FinalCopy

Who changed what in which revision?

UserRevisionLine numberNew 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 }