Farkle Game Code-Final
Dependencies: mbed 4DGL-uLCD-SE PinDetect
main.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 | //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 |