Farkle Game Code-Final

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 //Michael McDonald
mmcdoanld81 0:8ef203a5084f 2 //Farkle Main
mmcdoanld81 0:8ef203a5084f 3
mmcdoanld81 0:8ef203a5084f 4 #include <time.h>
mmcdoanld81 0:8ef203a5084f 5 #include <stdlib.h>
mmcdoanld81 0:8ef203a5084f 6 #include <stdio.h>
mmcdoanld81 0:8ef203a5084f 7
mmcdoanld81 0:8ef203a5084f 8 #include "farkleMath.h"
mmcdoanld81 0:8ef203a5084f 9 #include "diceMath.h"
mmcdoanld81 0:8ef203a5084f 10 #include "MMA8452.h"
mmcdoanld81 0:8ef203a5084f 11 #include "uLCD_4DGL.h"
mmcdoanld81 0:8ef203a5084f 12 #include "Speaker.h"
mmcdoanld81 0:8ef203a5084f 13 #include "temperature.h"
mmcdoanld81 0:8ef203a5084f 14 #include "PinDetect.h"
mmcdoanld81 0:8ef203a5084f 15 #include "mbed.h"
mmcdoanld81 0:8ef203a5084f 16
mmcdoanld81 0:8ef203a5084f 17
mmcdoanld81 0:8ef203a5084f 18 using namespace std;
mmcdoanld81 0:8ef203a5084f 19 MMA8452 acc(p28, p27, 40000);
mmcdoanld81 0:8ef203a5084f 20 Speaker mySpeaker(p25);
mmcdoanld81 0:8ef203a5084f 21 PinDetect pb1(p23);
mmcdoanld81 0:8ef203a5084f 22 PinDetect pb2(p22);
mmcdoanld81 0:8ef203a5084f 23 PinDetect pb3(p21);
mmcdoanld81 0:8ef203a5084f 24
mmcdoanld81 0:8ef203a5084f 25 enum InputType {aIn,bIn,cIn,shakeIn,stay};
mmcdoanld81 0:8ef203a5084f 26 enum StateType {startState,bState, rollState,turnState};
mmcdoanld81 0:8ef203a5084f 27 InputType input = stay;
mmcdoanld81 0:8ef203a5084f 28 StateType state = startState;
mmcdoanld81 0:8ef203a5084f 29
mmcdoanld81 0:8ef203a5084f 30 //Button callbacks
mmcdoanld81 0:8ef203a5084f 31 void pb1_hit_callback (void) {
mmcdoanld81 0:8ef203a5084f 32 input = aIn;
mmcdoanld81 0:8ef203a5084f 33 };
mmcdoanld81 0:8ef203a5084f 34
mmcdoanld81 0:8ef203a5084f 35 void pb2_hit_callback (void) {
mmcdoanld81 0:8ef203a5084f 36 input = bIn;
mmcdoanld81 0:8ef203a5084f 37 };
mmcdoanld81 0:8ef203a5084f 38
mmcdoanld81 0:8ef203a5084f 39 void pb3_hit_callback (void) {
mmcdoanld81 0:8ef203a5084f 40 input = cIn;
mmcdoanld81 0:8ef203a5084f 41 };
mmcdoanld81 0:8ef203a5084f 42
mmcdoanld81 0:8ef203a5084f 43 //Sets up the accelerometer for me
mmcdoanld81 0:8ef203a5084f 44 void accelerometer() {
mmcdoanld81 0:8ef203a5084f 45 acc.setBitDepth(MMA8452::BIT_DEPTH_12);
mmcdoanld81 0:8ef203a5084f 46 acc.setDynamicRange(MMA8452::DYNAMIC_RANGE_4G);
mmcdoanld81 0:8ef203a5084f 47 acc.setDataRate(MMA8452::RATE_100);
mmcdoanld81 0:8ef203a5084f 48 }
mmcdoanld81 0:8ef203a5084f 49
mmcdoanld81 0:8ef203a5084f 50 //Inputs for the accelerometer, put into shakeIn
mmcdoanld81 0:8ef203a5084f 51 void accIn(){
mmcdoanld81 0:8ef203a5084f 52 double x = 0.0l;
mmcdoanld81 0:8ef203a5084f 53 double y = 0.0l;
mmcdoanld81 0:8ef203a5084f 54 double z = 0.0l;
mmcdoanld81 0:8ef203a5084f 55 acc.readXYZGravity(&x,&y,&z);
mmcdoanld81 0:8ef203a5084f 56 if ((fabs(x)>1.5)||(fabs(y)>1.5)) {
mmcdoanld81 0:8ef203a5084f 57 input = shakeIn;
mmcdoanld81 0:8ef203a5084f 58 }
mmcdoanld81 0:8ef203a5084f 59 };
mmcdoanld81 0:8ef203a5084f 60
mmcdoanld81 0:8ef203a5084f 61 int main() {
mmcdoanld81 0:8ef203a5084f 62
mmcdoanld81 0:8ef203a5084f 63 extern Dice dice; //make class objects
mmcdoanld81 0:8ef203a5084f 64 extern FarkleMath farklemath; //make this class object as well
mmcdoanld81 0:8ef203a5084f 65 extern TMP36 myTMP36;
mmcdoanld81 0:8ef203a5084f 66
mmcdoanld81 0:8ef203a5084f 67 accelerometer(); //call accelerometer
mmcdoanld81 0:8ef203a5084f 68
mmcdoanld81 0:8ef203a5084f 69 int seedAssist; //helps make random numbers
mmcdoanld81 0:8ef203a5084f 70 seedAssist = static_cast <int> (10000 * myTMP36.read()) % 12344; //helps make random numbers
mmcdoanld81 0:8ef203a5084f 71 srand(time(0)+seedAssist); //helps make random numbers
mmcdoanld81 0:8ef203a5084f 72
mmcdoanld81 0:8ef203a5084f 73 //This code creats the pushbuttons
mmcdoanld81 0:8ef203a5084f 74 pb1.mode(PullUp);//a input pushbotton
mmcdoanld81 0:8ef203a5084f 75 pb2.mode(PullUp);//b input pushbotton
mmcdoanld81 0:8ef203a5084f 76 pb3.mode(PullUp);//c input pushbotton
mmcdoanld81 0:8ef203a5084f 77 wait(.01);
mmcdoanld81 0:8ef203a5084f 78 pb1.attach_deasserted(&pb1_hit_callback);
mmcdoanld81 0:8ef203a5084f 79 pb2.attach_deasserted(&pb2_hit_callback);
mmcdoanld81 0:8ef203a5084f 80 pb3.attach_deasserted(&pb3_hit_callback);
mmcdoanld81 0:8ef203a5084f 81 pb1.setSampleFrequency();
mmcdoanld81 0:8ef203a5084f 82 pb2.setSampleFrequency();
mmcdoanld81 0:8ef203a5084f 83 pb3.setSampleFrequency();
mmcdoanld81 0:8ef203a5084f 84
mmcdoanld81 0:8ef203a5084f 85 bool counter = true;
mmcdoanld81 0:8ef203a5084f 86 while(1) {
mmcdoanld81 0:8ef203a5084f 87 switch(state) {
mmcdoanld81 0:8ef203a5084f 88 case(startState):
mmcdoanld81 0:8ef203a5084f 89 if (counter == true) {
mmcdoanld81 0:8ef203a5084f 90 dice.displayStartScreen(dice.getNumOfDice());
mmcdoanld81 0:8ef203a5084f 91 counter = false;
mmcdoanld81 0:8ef203a5084f 92 }
mmcdoanld81 0:8ef203a5084f 93
mmcdoanld81 0:8ef203a5084f 94 accIn();
mmcdoanld81 0:8ef203a5084f 95
mmcdoanld81 0:8ef203a5084f 96 if (input == bIn) {
mmcdoanld81 0:8ef203a5084f 97 state = bState;
mmcdoanld81 0:8ef203a5084f 98 }
mmcdoanld81 0:8ef203a5084f 99 else if (input == shakeIn) {
mmcdoanld81 0:8ef203a5084f 100 dice.startDiceRoll();
mmcdoanld81 0:8ef203a5084f 101 state = rollState;
mmcdoanld81 0:8ef203a5084f 102 }
mmcdoanld81 0:8ef203a5084f 103 else {
mmcdoanld81 0:8ef203a5084f 104 state = startState;
mmcdoanld81 0:8ef203a5084f 105 }
mmcdoanld81 0:8ef203a5084f 106 break;
mmcdoanld81 0:8ef203a5084f 107
mmcdoanld81 0:8ef203a5084f 108 case(bState):
mmcdoanld81 0:8ef203a5084f 109 counter = true;
mmcdoanld81 0:8ef203a5084f 110 dice.setNumOfDice();
mmcdoanld81 0:8ef203a5084f 111 input = stay;
mmcdoanld81 0:8ef203a5084f 112 state = startState;
mmcdoanld81 0:8ef203a5084f 113 break;
mmcdoanld81 0:8ef203a5084f 114
mmcdoanld81 0:8ef203a5084f 115 case(rollState):
mmcdoanld81 0:8ef203a5084f 116 counter = true;
mmcdoanld81 0:8ef203a5084f 117 if ((input == cIn)&&(farklemath.getTurnScore()!= 0)&&(dice.getTakeaway()!= 6)) {
mmcdoanld81 0:8ef203a5084f 118 input = stay;
mmcdoanld81 0:8ef203a5084f 119 dice.setNumberOfDice(6-dice.getTakeaway());
mmcdoanld81 0:8ef203a5084f 120 state = startState;
mmcdoanld81 0:8ef203a5084f 121 }
mmcdoanld81 0:8ef203a5084f 122 else if (input == aIn) {
mmcdoanld81 0:8ef203a5084f 123 farklemath.printEndGame(farklemath.getTurnScore());
mmcdoanld81 0:8ef203a5084f 124 input = stay;
mmcdoanld81 0:8ef203a5084f 125 state = turnState;
mmcdoanld81 0:8ef203a5084f 126 }
mmcdoanld81 0:8ef203a5084f 127 else {
mmcdoanld81 0:8ef203a5084f 128 state = rollState;
mmcdoanld81 0:8ef203a5084f 129 }
mmcdoanld81 0:8ef203a5084f 130 break;
mmcdoanld81 0:8ef203a5084f 131
mmcdoanld81 0:8ef203a5084f 132 case (turnState):
mmcdoanld81 0:8ef203a5084f 133 counter = true;
mmcdoanld81 0:8ef203a5084f 134 if (input == aIn) {
mmcdoanld81 0:8ef203a5084f 135 farklemath.setRollScore(0);
mmcdoanld81 0:8ef203a5084f 136 farklemath.setTurnScore(0);
mmcdoanld81 0:8ef203a5084f 137 dice.setSetTakeaway(0);
mmcdoanld81 0:8ef203a5084f 138 dice.setNumberOfDice(6);
mmcdoanld81 0:8ef203a5084f 139 state = startState;
mmcdoanld81 0:8ef203a5084f 140 }
mmcdoanld81 0:8ef203a5084f 141 else {
mmcdoanld81 0:8ef203a5084f 142 state = turnState;
mmcdoanld81 0:8ef203a5084f 143 }
mmcdoanld81 0:8ef203a5084f 144 break;
mmcdoanld81 0:8ef203a5084f 145 }
mmcdoanld81 0:8ef203a5084f 146 }
mmcdoanld81 0:8ef203a5084f 147 }; //end of main