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
main.cpp@0:7d8ffdfdb16e, 2021-10-22 (annotated)
- Committer:
- ashi31
- Date:
- Fri Oct 22 03:57:47 2021 +0000
- Revision:
- 0:7d8ffdfdb16e
Lab4
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| ashi31 | 0:7d8ffdfdb16e | 1 | /** |
| ashi31 | 0:7d8ffdfdb16e | 2 | |
| ashi31 | 0:7d8ffdfdb16e | 3 | Programmer: Andrew Shi |
| ashi31 | 0:7d8ffdfdb16e | 4 | Title: Lab 4 - Farkle Game |
| ashi31 | 0:7d8ffdfdb16e | 5 | Date: October 11 2021 |
| ashi31 | 0:7d8ffdfdb16e | 6 | Description: Main function |
| ashi31 | 0:7d8ffdfdb16e | 7 | |
| ashi31 | 0:7d8ffdfdb16e | 8 | **/ |
| ashi31 | 0:7d8ffdfdb16e | 9 | #include "Die.h" |
| ashi31 | 0:7d8ffdfdb16e | 10 | #include "FarkleGame.h" |
| ashi31 | 0:7d8ffdfdb16e | 11 | #include "PinDetect.h" |
| ashi31 | 0:7d8ffdfdb16e | 12 | |
| ashi31 | 0:7d8ffdfdb16e | 13 | #include "mbed.h" |
| ashi31 | 0:7d8ffdfdb16e | 14 | #include <time.h> |
| ashi31 | 0:7d8ffdfdb16e | 15 | |
| ashi31 | 0:7d8ffdfdb16e | 16 | using namespace std; |
| ashi31 | 0:7d8ffdfdb16e | 17 | |
| ashi31 | 0:7d8ffdfdb16e | 18 | Serial pc(USBTX,USBRX); |
| ashi31 | 0:7d8ffdfdb16e | 19 | |
| ashi31 | 0:7d8ffdfdb16e | 20 | PinDetect A(p21); |
| ashi31 | 0:7d8ffdfdb16e | 21 | PinDetect B(p22); |
| ashi31 | 0:7d8ffdfdb16e | 22 | PinDetect C(p23); |
| ashi31 | 0:7d8ffdfdb16e | 23 | |
| ashi31 | 0:7d8ffdfdb16e | 24 | int main(){ |
| ashi31 | 0:7d8ffdfdb16e | 25 | |
| ashi31 | 0:7d8ffdfdb16e | 26 | //clear system |
| ashi31 | 0:7d8ffdfdb16e | 27 | system("clear"); |
| ashi31 | 0:7d8ffdfdb16e | 28 | |
| ashi31 | 0:7d8ffdfdb16e | 29 | //declare buttons |
| ashi31 | 0:7d8ffdfdb16e | 30 | A.mode(PullUp); |
| ashi31 | 0:7d8ffdfdb16e | 31 | B.mode(PullUp); |
| ashi31 | 0:7d8ffdfdb16e | 32 | C.mode(PullUp); //unused |
| ashi31 | 0:7d8ffdfdb16e | 33 | |
| ashi31 | 0:7d8ffdfdb16e | 34 | //declare uLCD screen |
| ashi31 | 0:7d8ffdfdb16e | 35 | uLCD_4DGL uLCD(p9,p10,p11); |
| ashi31 | 0:7d8ffdfdb16e | 36 | uLCD.cls(); |
| ashi31 | 0:7d8ffdfdb16e | 37 | uLCD.display_control(PORTRAIT); |
| ashi31 | 0:7d8ffdfdb16e | 38 | |
| ashi31 | 0:7d8ffdfdb16e | 39 | //declare accelerometer |
| ashi31 | 0:7d8ffdfdb16e | 40 | MMA8452 acc(p28, p27, 40000); |
| ashi31 | 0:7d8ffdfdb16e | 41 | acc.setBitDepth(MMA8452::BIT_DEPTH_12); |
| ashi31 | 0:7d8ffdfdb16e | 42 | acc.setDynamicRange(MMA8452::DYNAMIC_RANGE_4G); |
| ashi31 | 0:7d8ffdfdb16e | 43 | acc.setDataRate(MMA8452::RATE_100); |
| ashi31 | 0:7d8ffdfdb16e | 44 | |
| ashi31 | 0:7d8ffdfdb16e | 45 | //declare dice number |
| ashi31 | 0:7d8ffdfdb16e | 46 | int numDice = 6; |
| ashi31 | 0:7d8ffdfdb16e | 47 | |
| ashi31 | 0:7d8ffdfdb16e | 48 | //initialize FarkleGame object |
| ashi31 | 0:7d8ffdfdb16e | 49 | FarkleGame game; |
| ashi31 | 0:7d8ffdfdb16e | 50 | |
| ashi31 | 0:7d8ffdfdb16e | 51 | game.scrnWipe(uLCD); |
| ashi31 | 0:7d8ffdfdb16e | 52 | |
| ashi31 | 0:7d8ffdfdb16e | 53 | //begin game |
| ashi31 | 0:7d8ffdfdb16e | 54 | while(1){ |
| ashi31 | 0:7d8ffdfdb16e | 55 | //display intro and initialize values |
| ashi31 | 0:7d8ffdfdb16e | 56 | game.dispIntro(uLCD, numDice); |
| ashi31 | 0:7d8ffdfdb16e | 57 | game.init(); |
| ashi31 | 0:7d8ffdfdb16e | 58 | |
| ashi31 | 0:7d8ffdfdb16e | 59 | //check for roll, adjust number of Dice |
| ashi31 | 0:7d8ffdfdb16e | 60 | while(!game.checkRoll(acc)){ |
| ashi31 | 0:7d8ffdfdb16e | 61 | if(!B){ |
| ashi31 | 0:7d8ffdfdb16e | 62 | numDice = (numDice+1)%7; |
| ashi31 | 0:7d8ffdfdb16e | 63 | game.dispIntro(uLCD,numDice); |
| ashi31 | 0:7d8ffdfdb16e | 64 | } |
| ashi31 | 0:7d8ffdfdb16e | 65 | } |
| ashi31 | 0:7d8ffdfdb16e | 66 | |
| ashi31 | 0:7d8ffdfdb16e | 67 | //roll dice when accelerometer is sensed, until A is clicked |
| ashi31 | 0:7d8ffdfdb16e | 68 | while(A){ |
| ashi31 | 0:7d8ffdfdb16e | 69 | if(game.checkRoll(acc)){ |
| ashi31 | 0:7d8ffdfdb16e | 70 | //roll dice and displar |
| ashi31 | 0:7d8ffdfdb16e | 71 | game.rollDice(); |
| ashi31 | 0:7d8ffdfdb16e | 72 | game.displayDice(uLCD, numDice); |
| ashi31 | 0:7d8ffdfdb16e | 73 | |
| ashi31 | 0:7d8ffdfdb16e | 74 | //update scores |
| ashi31 | 0:7d8ffdfdb16e | 75 | game.loadVals(numDice); |
| ashi31 | 0:7d8ffdfdb16e | 76 | game.updateScores(); |
| ashi31 | 0:7d8ffdfdb16e | 77 | |
| ashi31 | 0:7d8ffdfdb16e | 78 | //display screens based on scores |
| ashi31 | 0:7d8ffdfdb16e | 79 | if(game.calcScore() == 0){ |
| ashi31 | 0:7d8ffdfdb16e | 80 | game.dispFarkle(uLCD); |
| ashi31 | 0:7d8ffdfdb16e | 81 | wait(3); |
| ashi31 | 0:7d8ffdfdb16e | 82 | break; |
| ashi31 | 0:7d8ffdfdb16e | 83 | } |
| ashi31 | 0:7d8ffdfdb16e | 84 | else{ |
| ashi31 | 0:7d8ffdfdb16e | 85 | game.dispScore(uLCD); |
| ashi31 | 0:7d8ffdfdb16e | 86 | } |
| ashi31 | 0:7d8ffdfdb16e | 87 | } |
| ashi31 | 0:7d8ffdfdb16e | 88 | } |
| ashi31 | 0:7d8ffdfdb16e | 89 | |
| ashi31 | 0:7d8ffdfdb16e | 90 | //display turn end screen |
| ashi31 | 0:7d8ffdfdb16e | 91 | game.dispTurn(uLCD); |
| ashi31 | 0:7d8ffdfdb16e | 92 | //wait for button to be pressed |
| ashi31 | 0:7d8ffdfdb16e | 93 | while(A){ |
| ashi31 | 0:7d8ffdfdb16e | 94 | } |
| ashi31 | 0:7d8ffdfdb16e | 95 | //reset numDice |
| ashi31 | 0:7d8ffdfdb16e | 96 | numDice = 6; |
| ashi31 | 0:7d8ffdfdb16e | 97 | } |
| ashi31 | 0:7d8ffdfdb16e | 98 | |
| ashi31 | 0:7d8ffdfdb16e | 99 | } |
| ashi31 | 0:7d8ffdfdb16e | 100 |