Dependencies: MMA8452 N5110 PowerControl beep mbed
Game.h@5:c0a58a6916f2, 2015-05-05 (annotated)
- Committer:
- stevenle93
- Date:
- Tue May 05 22:32:07 2015 +0000
- Revision:
- 5:c0a58a6916f2
- Parent:
- 4:c141e252d786
- Child:
- 8:aebb468546c5
The changes include: alert sound when the countdown in 10s, the High score menu was extended into Easy, Normal and Hard mode scores, testing function of Sleep().
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
stevenle93 | 1:92f77de19aad | 1 | /** |
stevenle93 | 1:92f77de19aad | 2 | @file Game.h |
stevenle93 | 1:92f77de19aad | 3 | |
stevenle93 | 1:92f77de19aad | 4 | @brief Header file of the game rule which contain member functions, variables and functions definition |
stevenle93 | 1:92f77de19aad | 5 | |
stevenle93 | 1:92f77de19aad | 6 | */ |
stevenle93 | 1:92f77de19aad | 7 | |
stevenle93 | 1:92f77de19aad | 8 | #ifndef GAME_H |
stevenle93 | 1:92f77de19aad | 9 | #define GAME_H |
stevenle93 | 1:92f77de19aad | 10 | |
stevenle93 | 1:92f77de19aad | 11 | #include "mbed.h" |
stevenle93 | 1:92f77de19aad | 12 | #include "MMA8452.h" |
stevenle93 | 1:92f77de19aad | 13 | #include "N5110.h" |
stevenle93 | 2:57d1ed1f0ad3 | 14 | #include "Clock.h" |
stevenle93 | 1:92f77de19aad | 15 | |
stevenle93 | 3:1974db5993ef | 16 | Ticker gatimer; |
stevenle93 | 3:1974db5993ef | 17 | int gatimerFlag = 0; |
stevenle93 | 3:1974db5993ef | 18 | |
stevenle93 | 3:1974db5993ef | 19 | void gatimerExpired() |
stevenle93 | 3:1974db5993ef | 20 | { |
stevenle93 | 3:1974db5993ef | 21 | gatimerFlag = 1; //Set flag for timer of the game |
stevenle93 | 3:1974db5993ef | 22 | } |
stevenle93 | 1:92f77de19aad | 23 | |
stevenle93 | 1:92f77de19aad | 24 | class Game |
stevenle93 | 1:92f77de19aad | 25 | { |
stevenle93 | 1:92f77de19aad | 26 | private: |
stevenle93 | 1:92f77de19aad | 27 | /** |
stevenle93 | 1:92f77de19aad | 28 | * @param The variable Score is used to store score of user when |
stevenle93 | 1:92f77de19aad | 29 | * @param the accelerometer excessed a threshold value. |
stevenle93 | 1:92f77de19aad | 30 | */ |
stevenle93 | 2:57d1ed1f0ad3 | 31 | |
stevenle93 | 1:92f77de19aad | 32 | |
stevenle93 | 1:92f77de19aad | 33 | /** |
stevenle93 | 1:92f77de19aad | 34 | * @param The acceleration variable recalled from MMA8452.h |
stevenle93 | 1:92f77de19aad | 35 | */ |
stevenle93 | 1:92f77de19aad | 36 | Acceleration accel; // Acceleration variable declared in MMA8452 class |
stevenle93 | 1:92f77de19aad | 37 | |
stevenle93 | 1:92f77de19aad | 38 | public: |
stevenle93 | 1:92f77de19aad | 39 | /** |
stevenle93 | 5:c0a58a6916f2 | 40 | * A function that contains condition of easy mode |
stevenle93 | 5:c0a58a6916f2 | 41 | * The conditions: Threshold value of 2g - Time interval for reading data of 0.1s |
stevenle93 | 1:92f77de19aad | 42 | */ |
stevenle93 | 3:1974db5993ef | 43 | void easyMode(); |
stevenle93 | 5:c0a58a6916f2 | 44 | /** |
stevenle93 | 5:c0a58a6916f2 | 45 | * A function that contains condition of normal mode |
stevenle93 | 5:c0a58a6916f2 | 46 | * The conditions: Threshold value of 3g - Time interval for reading data of 0.2s |
stevenle93 | 5:c0a58a6916f2 | 47 | */ |
stevenle93 | 3:1974db5993ef | 48 | void norMode(); |
stevenle93 | 5:c0a58a6916f2 | 49 | /** |
stevenle93 | 5:c0a58a6916f2 | 50 | * A functionthat contains condition of hard mode |
stevenle93 | 5:c0a58a6916f2 | 51 | * The conditions: Threshold value of 3g - Time interval for reading data of 0.4s |
stevenle93 | 5:c0a58a6916f2 | 52 | */ |
stevenle93 | 3:1974db5993ef | 53 | void hardMode(); |
stevenle93 | 5:c0a58a6916f2 | 54 | /** |
stevenle93 | 5:c0a58a6916f2 | 55 | * @param A global variable to store play score. |
stevenle93 | 5:c0a58a6916f2 | 56 | * @param This score will later transfer into an array |
stevenle93 | 5:c0a58a6916f2 | 57 | */ |
stevenle93 | 4:c141e252d786 | 58 | int score; |
stevenle93 | 5:c0a58a6916f2 | 59 | /** |
stevenle93 | 5:c0a58a6916f2 | 60 | * @param An array to store set of scores |
stevenle93 | 5:c0a58a6916f2 | 61 | * @param The array structure is as follow: |
stevenle93 | 5:c0a58a6916f2 | 62 | * @param Easy high score, Easy current score, Normal high score, Normal current score, Hard high score, Hard current score. |
stevenle93 | 5:c0a58a6916f2 | 63 | */ |
stevenle93 | 4:c141e252d786 | 64 | int scoArr[6]; |
stevenle93 | 5:c0a58a6916f2 | 65 | /** |
stevenle93 | 5:c0a58a6916f2 | 66 | * A function used to reset the game condition |
stevenle93 | 5:c0a58a6916f2 | 67 | */ |
stevenle93 | 3:1974db5993ef | 68 | void reset(); |
stevenle93 | 5:c0a58a6916f2 | 69 | /** |
stevenle93 | 5:c0a58a6916f2 | 70 | * A funtion to draw a battery image when playing game |
stevenle93 | 5:c0a58a6916f2 | 71 | */ |
stevenle93 | 5:c0a58a6916f2 | 72 | void battImag(); |
stevenle93 | 1:92f77de19aad | 73 | }; |
stevenle93 | 1:92f77de19aad | 74 | |
stevenle93 | 3:1974db5993ef | 75 | void Game::easyMode () |
stevenle93 | 1:92f77de19aad | 76 | { |
stevenle93 | 5:c0a58a6916f2 | 77 | lcd.printString("EASY MODE",16,0); //Displaying the title of difficulty level |
stevenle93 | 5:c0a58a6916f2 | 78 | lcd.drawRect(30,32,28,12,0); //Drawing an empty battery image |
stevenle93 | 5:c0a58a6916f2 | 79 | lcd.drawRect(59,36,1,4,1); //Drawing a tip of battery image |
stevenle93 | 3:1974db5993ef | 80 | if (gatimerFlag) { |
stevenle93 | 3:1974db5993ef | 81 | gatimerFlag = 0; |
stevenle93 | 3:1974db5993ef | 82 | accel = mma8452.readValues(); //Read the value from MMA8452 sensor |
stevenle93 | 5:c0a58a6916f2 | 83 | |
stevenle93 | 3:1974db5993ef | 84 | if (accel.x > 2 || accel.x < -2) { //Easy mode: If the value of accelerator data exceed 2g, the score will increase by one unit |
stevenle93 | 3:1974db5993ef | 85 | score++; |
stevenle93 | 3:1974db5993ef | 86 | char scorebuffer[14]; |
stevenle93 | 4:c141e252d786 | 87 | sprintf(scorebuffer,"Score:%d",score); //Score will be displayed as unsigned Decimal Interger number |
stevenle93 | 4:c141e252d786 | 88 | lcd.printString(scorebuffer,6,3); |
stevenle93 | 5:c0a58a6916f2 | 89 | battImag(); |
stevenle93 | 1:92f77de19aad | 90 | } |
stevenle93 | 1:92f77de19aad | 91 | } |
stevenle93 | 5:c0a58a6916f2 | 92 | |
stevenle93 | 5:c0a58a6916f2 | 93 | scoArr[1] = score; |
stevenle93 | 5:c0a58a6916f2 | 94 | if(scoArr[0] > scoArr[1]) { |
stevenle93 | 4:c141e252d786 | 95 | scoArr[1] = score; |
stevenle93 | 4:c141e252d786 | 96 | } else if(scoArr[0] < scoArr[1]) { |
stevenle93 | 4:c141e252d786 | 97 | scoArr[0] = score; |
stevenle93 | 4:c141e252d786 | 98 | } |
stevenle93 | 1:92f77de19aad | 99 | } |
stevenle93 | 2:57d1ed1f0ad3 | 100 | |
stevenle93 | 3:1974db5993ef | 101 | void Game::norMode() |
stevenle93 | 3:1974db5993ef | 102 | { |
stevenle93 | 5:c0a58a6916f2 | 103 | lcd.printString("NORMAL MODE",9,0); //Displaying the title of difficulty level |
stevenle93 | 5:c0a58a6916f2 | 104 | lcd.drawRect(30,32,28,12,0); //Drawing an empty battery image |
stevenle93 | 5:c0a58a6916f2 | 105 | lcd.drawRect(59,36,1,4,1); //Drawing a tip of battery image |
stevenle93 | 3:1974db5993ef | 106 | if (gatimerFlag) { |
stevenle93 | 3:1974db5993ef | 107 | gatimerFlag = 0; |
stevenle93 | 3:1974db5993ef | 108 | accel = mma8452.readValues(); //Read the value from MMA8452 sensor |
stevenle93 | 5:c0a58a6916f2 | 109 | |
stevenle93 | 3:1974db5993ef | 110 | if (accel.x > 3 || accel.x < -3) { //Easy mode: If the value of accelerator data exceed 3g, the score will increase by one unit |
stevenle93 | 3:1974db5993ef | 111 | score++; |
stevenle93 | 3:1974db5993ef | 112 | char scorebuffer[14]; |
stevenle93 | 4:c141e252d786 | 113 | sprintf(scorebuffer,"Score:%d",score); //Score will be displayed as unsigned Decimal Interger number |
stevenle93 | 4:c141e252d786 | 114 | lcd.printString(scorebuffer,6,3); |
stevenle93 | 5:c0a58a6916f2 | 115 | battImag(); |
stevenle93 | 3:1974db5993ef | 116 | } |
stevenle93 | 3:1974db5993ef | 117 | } |
stevenle93 | 5:c0a58a6916f2 | 118 | scoArr[3] = score; |
stevenle93 | 5:c0a58a6916f2 | 119 | if(scoArr[2] > scoArr[3]) { |
stevenle93 | 4:c141e252d786 | 120 | scoArr[3] = score; |
stevenle93 | 4:c141e252d786 | 121 | } else if(scoArr[2] < scoArr[3]) { |
stevenle93 | 4:c141e252d786 | 122 | scoArr[2] = score; |
stevenle93 | 4:c141e252d786 | 123 | } |
stevenle93 | 3:1974db5993ef | 124 | } |
stevenle93 | 3:1974db5993ef | 125 | |
stevenle93 | 3:1974db5993ef | 126 | void Game::hardMode() |
stevenle93 | 3:1974db5993ef | 127 | { |
stevenle93 | 5:c0a58a6916f2 | 128 | lcd.printString("HARD MODE",16,0); //Displaying the title of difficulty level |
stevenle93 | 5:c0a58a6916f2 | 129 | lcd.drawRect(30,32,28,12,0); //Drawing an empty battery image |
stevenle93 | 5:c0a58a6916f2 | 130 | lcd.drawRect(59,36,1,4,1); //Drawing a tip of battery image |
stevenle93 | 3:1974db5993ef | 131 | if (gatimerFlag) { |
stevenle93 | 3:1974db5993ef | 132 | gatimerFlag = 0; |
stevenle93 | 3:1974db5993ef | 133 | accel = mma8452.readValues(); //Read the value from MMA8452 sensor |
stevenle93 | 5:c0a58a6916f2 | 134 | |
stevenle93 | 3:1974db5993ef | 135 | if (accel.x > 3.5 || accel.x < -3.5) { //Easy mode: If the value of accelerator data exceed 3.5g, the score will increase by one unit |
stevenle93 | 3:1974db5993ef | 136 | score++; |
stevenle93 | 3:1974db5993ef | 137 | char scorebuffer[14]; |
stevenle93 | 4:c141e252d786 | 138 | sprintf(scorebuffer,"Score:%d",score); //Score will be displayed as unsigned Decimal Interger number |
stevenle93 | 4:c141e252d786 | 139 | lcd.printString(scorebuffer,6,3); |
stevenle93 | 5:c0a58a6916f2 | 140 | battImag(); |
stevenle93 | 3:1974db5993ef | 141 | } |
stevenle93 | 3:1974db5993ef | 142 | } |
stevenle93 | 5:c0a58a6916f2 | 143 | scoArr[5] = score; |
stevenle93 | 5:c0a58a6916f2 | 144 | if(scoArr[4] > scoArr[5]) { |
stevenle93 | 4:c141e252d786 | 145 | scoArr[5] = score; |
stevenle93 | 4:c141e252d786 | 146 | } else if(scoArr[4] < scoArr[5]) { |
stevenle93 | 4:c141e252d786 | 147 | scoArr[4] = score; |
stevenle93 | 4:c141e252d786 | 148 | } |
stevenle93 | 3:1974db5993ef | 149 | } |
stevenle93 | 3:1974db5993ef | 150 | |
stevenle93 | 3:1974db5993ef | 151 | void Game::reset() |
stevenle93 | 2:57d1ed1f0ad3 | 152 | { |
stevenle93 | 2:57d1ed1f0ad3 | 153 | score = 0; |
stevenle93 | 2:57d1ed1f0ad3 | 154 | CClock = 60; |
stevenle93 | 2:57d1ed1f0ad3 | 155 | } |
stevenle93 | 3:1974db5993ef | 156 | |
stevenle93 | 5:c0a58a6916f2 | 157 | void Game::battImag() |
stevenle93 | 5:c0a58a6916f2 | 158 | { |
stevenle93 | 5:c0a58a6916f2 | 159 | if (score>20 && score<40) { |
stevenle93 | 5:c0a58a6916f2 | 160 | lcd.drawRect(32,34,3,8,1); |
stevenle93 | 5:c0a58a6916f2 | 161 | } |
stevenle93 | 5:c0a58a6916f2 | 162 | if (score>40 && score<60) { |
stevenle93 | 5:c0a58a6916f2 | 163 | lcd.drawRect(32,34,6,8,1); |
stevenle93 | 5:c0a58a6916f2 | 164 | } |
stevenle93 | 5:c0a58a6916f2 | 165 | if (score>60 && score<80) { |
stevenle93 | 5:c0a58a6916f2 | 166 | lcd.drawRect(32,34,9,8,1); |
stevenle93 | 5:c0a58a6916f2 | 167 | } |
stevenle93 | 5:c0a58a6916f2 | 168 | if (score>80 && score<100) { |
stevenle93 | 5:c0a58a6916f2 | 169 | lcd.drawRect(32,34,12,8,1); |
stevenle93 | 5:c0a58a6916f2 | 170 | } |
stevenle93 | 5:c0a58a6916f2 | 171 | if (score>100 && score<120) { |
stevenle93 | 5:c0a58a6916f2 | 172 | lcd.drawRect(32,34,15,8,1); |
stevenle93 | 5:c0a58a6916f2 | 173 | } |
stevenle93 | 5:c0a58a6916f2 | 174 | if (score>120 && score<140) { |
stevenle93 | 5:c0a58a6916f2 | 175 | lcd.drawRect(32,34,18,8,1); |
stevenle93 | 5:c0a58a6916f2 | 176 | } |
stevenle93 | 5:c0a58a6916f2 | 177 | if (score>140 && score<160) { |
stevenle93 | 5:c0a58a6916f2 | 178 | lcd.drawRect(32,34,21,8,1); |
stevenle93 | 5:c0a58a6916f2 | 179 | } |
stevenle93 | 5:c0a58a6916f2 | 180 | if (score>160) { |
stevenle93 | 5:c0a58a6916f2 | 181 | lcd.drawRect(32,34,24,8,1); |
stevenle93 | 5:c0a58a6916f2 | 182 | } |
stevenle93 | 5:c0a58a6916f2 | 183 | } |
stevenle93 | 5:c0a58a6916f2 | 184 | |
stevenle93 | 5:c0a58a6916f2 | 185 | |
stevenle93 | 1:92f77de19aad | 186 | #endif |