Rhythm game with mbed
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed wave_player
rhythm.cpp@1:4136709c77f4, 2016-11-01 (annotated)
- Committer:
- spoda
- Date:
- Tue Nov 01 02:20:45 2016 +0000
- Revision:
- 1:4136709c77f4
- Parent:
- 0:40c6dc4c379b
rhythm game
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
spoda | 0:40c6dc4c379b | 1 | #include "mbed.h" |
spoda | 0:40c6dc4c379b | 2 | #include "uLCD_4DGL.h" |
spoda | 0:40c6dc4c379b | 3 | #include <stdlib.h> |
spoda | 0:40c6dc4c379b | 4 | #include "rhythm.h" |
spoda | 0:40c6dc4c379b | 5 | #include "SDFileSystem.h" |
spoda | 0:40c6dc4c379b | 6 | #include "wave_player.h" |
spoda | 0:40c6dc4c379b | 7 | |
spoda | 0:40c6dc4c379b | 8 | Rhythm::Rhythm() |
spoda | 0:40c6dc4c379b | 9 | { |
spoda | 0:40c6dc4c379b | 10 | sd = new SDFileSystem(p5, p6, p7, p8, "sd"); |
spoda | 0:40c6dc4c379b | 11 | DACout = new AnalogOut(p18); |
spoda | 0:40c6dc4c379b | 12 | waver = new wave_player(DACout); |
spoda | 0:40c6dc4c379b | 13 | uLCD = new uLCD_4DGL(p13,p14,p12); |
spoda | 0:40c6dc4c379b | 14 | Up = new DigitalIn(p24); |
spoda | 0:40c6dc4c379b | 15 | Left = new DigitalIn(p26); |
spoda | 0:40c6dc4c379b | 16 | Right = new DigitalIn(p28); |
spoda | 0:40c6dc4c379b | 17 | Center = new DigitalIn(p25); |
spoda | 0:40c6dc4c379b | 18 | Down = new DigitalIn(p27); |
spoda | 0:40c6dc4c379b | 19 | up = false; |
spoda | 0:40c6dc4c379b | 20 | down = false; |
spoda | 0:40c6dc4c379b | 21 | left = false; |
spoda | 0:40c6dc4c379b | 22 | right = false; |
spoda | 0:40c6dc4c379b | 23 | center = false; |
spoda | 0:40c6dc4c379b | 24 | score = 0; |
spoda | 0:40c6dc4c379b | 25 | endloop = 0; |
spoda | 0:40c6dc4c379b | 26 | random_number = 0; |
spoda | 0:40c6dc4c379b | 27 | shape_color = 0; |
spoda | 0:40c6dc4c379b | 28 | average_reaction_time = 0; |
spoda | 0:40c6dc4c379b | 29 | } |
spoda | 0:40c6dc4c379b | 30 | |
spoda | 0:40c6dc4c379b | 31 | void Rhythm::drawBorder() { |
spoda | 0:40c6dc4c379b | 32 | //Left side 1 |
spoda | 0:40c6dc4c379b | 33 | uLCD->line(0, 0, 10, 16, RED); |
spoda | 0:40c6dc4c379b | 34 | uLCD->line(10, 16, 0, 32, GREEN); |
spoda | 0:40c6dc4c379b | 35 | uLCD->line(0, 32, 10, 48, BLUE); |
spoda | 0:40c6dc4c379b | 36 | uLCD->line(10, 48, 0, 64, RED); |
spoda | 0:40c6dc4c379b | 37 | uLCD->line(0, 64, 10, 80, GREEN); |
spoda | 0:40c6dc4c379b | 38 | uLCD->line(10, 80, 0, 96, BLUE); |
spoda | 0:40c6dc4c379b | 39 | uLCD->line(0, 96, 10, 112, RED); |
spoda | 0:40c6dc4c379b | 40 | uLCD->line(10, 112, 0, 128, GREEN); |
spoda | 0:40c6dc4c379b | 41 | //Left side 2 |
spoda | 0:40c6dc4c379b | 42 | uLCD->line(10, 0, 0, 16, GREEN); |
spoda | 0:40c6dc4c379b | 43 | uLCD->line(0, 16, 10, 32, BLUE); |
spoda | 0:40c6dc4c379b | 44 | uLCD->line(10, 32, 0, 48, RED); |
spoda | 0:40c6dc4c379b | 45 | uLCD->line(0, 48, 10, 64, GREEN); |
spoda | 0:40c6dc4c379b | 46 | uLCD->line(10, 64, 0, 80, BLUE); |
spoda | 0:40c6dc4c379b | 47 | uLCD->line(0, 80, 10, 96, RED); |
spoda | 0:40c6dc4c379b | 48 | uLCD->line(10, 96, 0, 112, GREEN); |
spoda | 0:40c6dc4c379b | 49 | uLCD->line(0, 112, 10, 128, BLUE); |
spoda | 0:40c6dc4c379b | 50 | //Bottom 1 |
spoda | 0:40c6dc4c379b | 51 | uLCD->line(0, 128, 16, 118, BLUE); |
spoda | 0:40c6dc4c379b | 52 | uLCD->line(16, 118, 32, 128, RED); |
spoda | 0:40c6dc4c379b | 53 | uLCD->line(32, 128, 48, 118, GREEN); |
spoda | 0:40c6dc4c379b | 54 | uLCD->line(48, 118, 64, 128, BLUE); |
spoda | 0:40c6dc4c379b | 55 | uLCD->line(64, 128, 80, 118, RED); |
spoda | 0:40c6dc4c379b | 56 | uLCD->line(80, 118, 96, 128, GREEN); |
spoda | 0:40c6dc4c379b | 57 | uLCD->line(96, 128, 112, 118, BLUE); |
spoda | 0:40c6dc4c379b | 58 | uLCD->line(112, 118, 128, 128, RED); |
spoda | 0:40c6dc4c379b | 59 | //Bottom 2 |
spoda | 0:40c6dc4c379b | 60 | uLCD->line(0, 118, 16, 128, RED); |
spoda | 0:40c6dc4c379b | 61 | uLCD->line(16, 128, 32, 118, GREEN); |
spoda | 0:40c6dc4c379b | 62 | uLCD->line(32, 118, 48, 128, BLUE); |
spoda | 0:40c6dc4c379b | 63 | uLCD->line(48, 128, 64, 118, RED); |
spoda | 0:40c6dc4c379b | 64 | uLCD->line(64, 118, 80, 128, GREEN); |
spoda | 0:40c6dc4c379b | 65 | uLCD->line(80, 128, 96, 118, BLUE); |
spoda | 0:40c6dc4c379b | 66 | uLCD->line(96, 118, 112, 128, RED); |
spoda | 0:40c6dc4c379b | 67 | uLCD->line(112, 128, 128, 118, GREEN); |
spoda | 0:40c6dc4c379b | 68 | //Right side 1 |
spoda | 0:40c6dc4c379b | 69 | uLCD->line(128, 128, 118, 112, GREEN); |
spoda | 0:40c6dc4c379b | 70 | uLCD->line(118, 112, 128, 96, BLUE); |
spoda | 0:40c6dc4c379b | 71 | uLCD->line(128, 96, 118, 80, RED); |
spoda | 0:40c6dc4c379b | 72 | uLCD->line(118, 80, 128, 64, GREEN); |
spoda | 0:40c6dc4c379b | 73 | uLCD->line(128, 64, 118, 48, BLUE); |
spoda | 0:40c6dc4c379b | 74 | uLCD->line(118, 48, 128, 32, RED); |
spoda | 0:40c6dc4c379b | 75 | uLCD->line(128, 32, 118, 16, GREEN); |
spoda | 0:40c6dc4c379b | 76 | uLCD->line(118, 16, 128, 0, BLUE); |
spoda | 0:40c6dc4c379b | 77 | //Right side 2 |
spoda | 0:40c6dc4c379b | 78 | uLCD->line(118, 128, 128, 112, BLUE); |
spoda | 0:40c6dc4c379b | 79 | uLCD->line(128, 112, 118, 96, RED); |
spoda | 0:40c6dc4c379b | 80 | uLCD->line(118, 96, 128, 80, GREEN); |
spoda | 0:40c6dc4c379b | 81 | uLCD->line(128, 80, 118, 64, BLUE); |
spoda | 0:40c6dc4c379b | 82 | uLCD->line(118, 64, 128, 48, RED); |
spoda | 0:40c6dc4c379b | 83 | uLCD->line(128, 48, 118, 32, GREEN); |
spoda | 0:40c6dc4c379b | 84 | uLCD->line(118, 32, 128, 16, BLUE); |
spoda | 0:40c6dc4c379b | 85 | uLCD->line(128, 16, 118, 0, RED); |
spoda | 0:40c6dc4c379b | 86 | //Top 1 |
spoda | 0:40c6dc4c379b | 87 | uLCD->line(128, 0, 112, 10, RED); |
spoda | 0:40c6dc4c379b | 88 | uLCD->line(112, 10, 96, 0, GREEN); |
spoda | 0:40c6dc4c379b | 89 | uLCD->line(96, 0, 80, 10, BLUE); |
spoda | 0:40c6dc4c379b | 90 | uLCD->line(80, 10, 64, 0, RED); |
spoda | 0:40c6dc4c379b | 91 | uLCD->line(64, 0, 48, 10, GREEN); |
spoda | 0:40c6dc4c379b | 92 | uLCD->line(48, 10, 32, 0, BLUE); |
spoda | 0:40c6dc4c379b | 93 | uLCD->line(32, 0, 16, 10, RED); |
spoda | 0:40c6dc4c379b | 94 | uLCD->line(16, 10, 0, 0, GREEN); |
spoda | 0:40c6dc4c379b | 95 | //Top 2 |
spoda | 0:40c6dc4c379b | 96 | uLCD->line(128, 10, 112, 0, GREEN); |
spoda | 0:40c6dc4c379b | 97 | uLCD->line(112, 0, 96, 10, BLUE); |
spoda | 0:40c6dc4c379b | 98 | uLCD->line(96, 10, 80, 0, RED); |
spoda | 0:40c6dc4c379b | 99 | uLCD->line(80, 0, 64, 10, GREEN); |
spoda | 0:40c6dc4c379b | 100 | uLCD->line(64, 10, 48, 0, BLUE); |
spoda | 0:40c6dc4c379b | 101 | uLCD->line(48, 0, 32, 10, RED); |
spoda | 0:40c6dc4c379b | 102 | uLCD->line(32, 10, 16, 0, GREEN); |
spoda | 0:40c6dc4c379b | 103 | uLCD->line(16, 0, 0, 10, BLUE); |
spoda | 0:40c6dc4c379b | 104 | } |
spoda | 0:40c6dc4c379b | 105 | |
spoda | 0:40c6dc4c379b | 106 | void Rhythm::drawLevel1Screen() { |
spoda | 0:40c6dc4c379b | 107 | uLCD->cls(); |
spoda | 0:40c6dc4c379b | 108 | drawBorder(); |
spoda | 0:40c6dc4c379b | 109 | uLCD->text_string("Level 1", 6, 6, FONT_7X8, BLUE); |
spoda | 0:40c6dc4c379b | 110 | } |
spoda | 0:40c6dc4c379b | 111 | |
spoda | 0:40c6dc4c379b | 112 | void Rhythm::drawLevel2Screen() { |
spoda | 0:40c6dc4c379b | 113 | uLCD->cls(); |
spoda | 0:40c6dc4c379b | 114 | drawBorder(); |
spoda | 0:40c6dc4c379b | 115 | uLCD->text_string("Level 2", 6, 6, FONT_7X8, GREEN); |
spoda | 0:40c6dc4c379b | 116 | } |
spoda | 0:40c6dc4c379b | 117 | |
spoda | 0:40c6dc4c379b | 118 | void Rhythm::drawLevel3Screen() { |
spoda | 0:40c6dc4c379b | 119 | uLCD->cls(); |
spoda | 0:40c6dc4c379b | 120 | drawBorder(); |
spoda | 0:40c6dc4c379b | 121 | uLCD->text_string("Level 3", 6, 6, FONT_7X8, RED); |
spoda | 0:40c6dc4c379b | 122 | } |
spoda | 0:40c6dc4c379b | 123 | |
spoda | 0:40c6dc4c379b | 124 | void Rhythm::drawEndScreen() { |
spoda | 0:40c6dc4c379b | 125 | uLCD->cls(); |
spoda | 0:40c6dc4c379b | 126 | drawBorder(); |
spoda | 0:40c6dc4c379b | 127 | uLCD->text_string("Thank You", 5, 7, FONT_7X8, 0xFFFF00); |
spoda | 0:40c6dc4c379b | 128 | uLCD->text_string("For Playing", 4, 9, FONT_7X8, 0xFFFF00); |
spoda | 0:40c6dc4c379b | 129 | for (int i = 0; i < 3; i++) { |
spoda | 0:40c6dc4c379b | 130 | playMusicEnd(); |
spoda | 0:40c6dc4c379b | 131 | } |
spoda | 0:40c6dc4c379b | 132 | } |
spoda | 0:40c6dc4c379b | 133 | |
spoda | 0:40c6dc4c379b | 134 | void Rhythm::generateRandomColor() { |
spoda | 0:40c6dc4c379b | 135 | random_number = rand() % 6; |
spoda | 0:40c6dc4c379b | 136 | if (random_number == 0) { |
spoda | 0:40c6dc4c379b | 137 | shape_color = 0xFF0000; |
spoda | 0:40c6dc4c379b | 138 | } else if (random_number == 1) { |
spoda | 0:40c6dc4c379b | 139 | shape_color = 0x00FF00; |
spoda | 0:40c6dc4c379b | 140 | } else if (random_number == 2) { |
spoda | 0:40c6dc4c379b | 141 | shape_color = 0x0000FF; |
spoda | 0:40c6dc4c379b | 142 | } else if (random_number == 3) { |
spoda | 0:40c6dc4c379b | 143 | shape_color = 0xFFFF00; |
spoda | 0:40c6dc4c379b | 144 | } else if (random_number == 4) { |
spoda | 0:40c6dc4c379b | 145 | shape_color = 0x00FFFF; |
spoda | 0:40c6dc4c379b | 146 | } else if (random_number == 5) { |
spoda | 0:40c6dc4c379b | 147 | shape_color = 0xFF00FF; |
spoda | 0:40c6dc4c379b | 148 | } |
spoda | 0:40c6dc4c379b | 149 | } |
spoda | 0:40c6dc4c379b | 150 | |
spoda | 0:40c6dc4c379b | 151 | void Rhythm::drawUpArrow() { |
spoda | 0:40c6dc4c379b | 152 | uLCD->cls(); |
spoda | 0:40c6dc4c379b | 153 | generateRandomColor(); |
spoda | 0:40c6dc4c379b | 154 | uLCD->filled_rectangle(60, 52, 68, 76, shape_color); |
spoda | 0:40c6dc4c379b | 155 | for (int n = 0; n < 9; n++) { |
spoda | 0:40c6dc4c379b | 156 | uLCD->line(56 + n, 52 - n, 72 - n, 52 - n, shape_color); |
spoda | 0:40c6dc4c379b | 157 | } |
spoda | 0:40c6dc4c379b | 158 | up = true; |
spoda | 0:40c6dc4c379b | 159 | down = false; |
spoda | 0:40c6dc4c379b | 160 | left = false; |
spoda | 0:40c6dc4c379b | 161 | right = false; |
spoda | 0:40c6dc4c379b | 162 | center = false; |
spoda | 0:40c6dc4c379b | 163 | } |
spoda | 0:40c6dc4c379b | 164 | |
spoda | 0:40c6dc4c379b | 165 | void Rhythm::drawDownArrow() { |
spoda | 0:40c6dc4c379b | 166 | uLCD->cls(); |
spoda | 0:40c6dc4c379b | 167 | generateRandomColor(); |
spoda | 0:40c6dc4c379b | 168 | uLCD->filled_rectangle(60, 52, 68, 76, shape_color); |
spoda | 0:40c6dc4c379b | 169 | for (int n = 0; n < 9; n++) { |
spoda | 0:40c6dc4c379b | 170 | uLCD->line(56 + n, 76 + n, 72 - n, 76 + n, shape_color); |
spoda | 0:40c6dc4c379b | 171 | } |
spoda | 0:40c6dc4c379b | 172 | up = false; |
spoda | 0:40c6dc4c379b | 173 | down = true; |
spoda | 0:40c6dc4c379b | 174 | left = false; |
spoda | 0:40c6dc4c379b | 175 | right = false; |
spoda | 0:40c6dc4c379b | 176 | center = false; |
spoda | 0:40c6dc4c379b | 177 | } |
spoda | 0:40c6dc4c379b | 178 | |
spoda | 0:40c6dc4c379b | 179 | void Rhythm::drawLeftArrow() { |
spoda | 0:40c6dc4c379b | 180 | uLCD->cls(); |
spoda | 0:40c6dc4c379b | 181 | generateRandomColor(); |
spoda | 0:40c6dc4c379b | 182 | uLCD->filled_rectangle(52, 60, 76, 68, shape_color); |
spoda | 0:40c6dc4c379b | 183 | for (int n = 0; n < 9; n++) { |
spoda | 0:40c6dc4c379b | 184 | uLCD->line(52 - n, 56 + n, 52 - n, 72 - n, shape_color); |
spoda | 0:40c6dc4c379b | 185 | } |
spoda | 0:40c6dc4c379b | 186 | up = false; |
spoda | 0:40c6dc4c379b | 187 | down = false; |
spoda | 0:40c6dc4c379b | 188 | left = true; |
spoda | 0:40c6dc4c379b | 189 | right = false; |
spoda | 0:40c6dc4c379b | 190 | center = false; |
spoda | 0:40c6dc4c379b | 191 | |
spoda | 0:40c6dc4c379b | 192 | } |
spoda | 0:40c6dc4c379b | 193 | |
spoda | 0:40c6dc4c379b | 194 | void Rhythm::drawRightArrow() { |
spoda | 0:40c6dc4c379b | 195 | uLCD->cls(); |
spoda | 0:40c6dc4c379b | 196 | generateRandomColor(); |
spoda | 0:40c6dc4c379b | 197 | uLCD->filled_rectangle(52, 60, 76, 68, shape_color); |
spoda | 0:40c6dc4c379b | 198 | for (int n = 0; n < 9; n++) { |
spoda | 0:40c6dc4c379b | 199 | uLCD->line(76 + n, 56 + n, 76 + n, 72 - n, shape_color); |
spoda | 0:40c6dc4c379b | 200 | } |
spoda | 0:40c6dc4c379b | 201 | up = false; |
spoda | 0:40c6dc4c379b | 202 | down = false; |
spoda | 0:40c6dc4c379b | 203 | left = false; |
spoda | 0:40c6dc4c379b | 204 | right = true; |
spoda | 0:40c6dc4c379b | 205 | center = false; |
spoda | 0:40c6dc4c379b | 206 | |
spoda | 0:40c6dc4c379b | 207 | } |
spoda | 0:40c6dc4c379b | 208 | |
spoda | 0:40c6dc4c379b | 209 | void Rhythm::drawCenterCircle() { |
spoda | 0:40c6dc4c379b | 210 | uLCD->cls(); |
spoda | 0:40c6dc4c379b | 211 | generateRandomColor(); |
spoda | 0:40c6dc4c379b | 212 | uLCD->filled_circle(64, 64, 15, shape_color); |
spoda | 0:40c6dc4c379b | 213 | up = false; |
spoda | 0:40c6dc4c379b | 214 | down = false; |
spoda | 0:40c6dc4c379b | 215 | left = false; |
spoda | 0:40c6dc4c379b | 216 | right = false; |
spoda | 0:40c6dc4c379b | 217 | center = true; |
spoda | 0:40c6dc4c379b | 218 | |
spoda | 0:40c6dc4c379b | 219 | } |
spoda | 0:40c6dc4c379b | 220 | |
spoda | 0:40c6dc4c379b | 221 | void Rhythm::getArrowDirection() |
spoda | 0:40c6dc4c379b | 222 | { |
spoda | 0:40c6dc4c379b | 223 | int randgen = rand() % 5; |
spoda | 0:40c6dc4c379b | 224 | if(randgen == 0) |
spoda | 0:40c6dc4c379b | 225 | { |
spoda | 0:40c6dc4c379b | 226 | drawUpArrow(); |
spoda | 0:40c6dc4c379b | 227 | } |
spoda | 0:40c6dc4c379b | 228 | else if(randgen == 1) |
spoda | 0:40c6dc4c379b | 229 | { |
spoda | 0:40c6dc4c379b | 230 | drawDownArrow(); |
spoda | 0:40c6dc4c379b | 231 | } |
spoda | 0:40c6dc4c379b | 232 | else if(randgen == 2) |
spoda | 0:40c6dc4c379b | 233 | { |
spoda | 0:40c6dc4c379b | 234 | drawLeftArrow(); |
spoda | 0:40c6dc4c379b | 235 | } |
spoda | 0:40c6dc4c379b | 236 | else if(randgen == 3) |
spoda | 0:40c6dc4c379b | 237 | { |
spoda | 0:40c6dc4c379b | 238 | drawRightArrow(); |
spoda | 0:40c6dc4c379b | 239 | } |
spoda | 0:40c6dc4c379b | 240 | else if(randgen == 4) |
spoda | 0:40c6dc4c379b | 241 | { |
spoda | 0:40c6dc4c379b | 242 | drawCenterCircle(); |
spoda | 0:40c6dc4c379b | 243 | } |
spoda | 0:40c6dc4c379b | 244 | t.start(); |
spoda | 0:40c6dc4c379b | 245 | endloop++; |
spoda | 0:40c6dc4c379b | 246 | } |
spoda | 0:40c6dc4c379b | 247 | |
spoda | 0:40c6dc4c379b | 248 | |
spoda | 0:40c6dc4c379b | 249 | void Rhythm::level1() |
spoda | 0:40c6dc4c379b | 250 | { |
spoda | 0:40c6dc4c379b | 251 | drawLevel1Screen(); |
spoda | 0:40c6dc4c379b | 252 | wait(2.0); |
spoda | 0:40c6dc4c379b | 253 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 254 | while(endloop <= 10) |
spoda | 0:40c6dc4c379b | 255 | { |
spoda | 0:40c6dc4c379b | 256 | if(up && Up->read() == 0 && t.read() <= 3.0) |
spoda | 0:40c6dc4c379b | 257 | { |
spoda | 0:40c6dc4c379b | 258 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 259 | score++; |
spoda | 0:40c6dc4c379b | 260 | t.stop(); |
spoda | 0:40c6dc4c379b | 261 | t.reset(); |
spoda | 0:40c6dc4c379b | 262 | wait(0.3); |
spoda | 0:40c6dc4c379b | 263 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 264 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 265 | } |
spoda | 0:40c6dc4c379b | 266 | else if(down && Down->read() == 0 && t.read() <= 3.0) |
spoda | 0:40c6dc4c379b | 267 | { |
spoda | 0:40c6dc4c379b | 268 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 269 | score++; |
spoda | 0:40c6dc4c379b | 270 | t.stop(); |
spoda | 0:40c6dc4c379b | 271 | t.reset(); |
spoda | 0:40c6dc4c379b | 272 | wait(0.3); |
spoda | 0:40c6dc4c379b | 273 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 274 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 275 | } |
spoda | 0:40c6dc4c379b | 276 | else if(left && Left->read() == 0 && t.read() <= 3.0) |
spoda | 0:40c6dc4c379b | 277 | { |
spoda | 0:40c6dc4c379b | 278 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 279 | score++; |
spoda | 0:40c6dc4c379b | 280 | t.stop(); |
spoda | 0:40c6dc4c379b | 281 | t.reset(); |
spoda | 0:40c6dc4c379b | 282 | wait(0.3); |
spoda | 0:40c6dc4c379b | 283 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 284 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 285 | } |
spoda | 0:40c6dc4c379b | 286 | else if(right && Right->read() == 0 && t.read() <= 3.0) |
spoda | 0:40c6dc4c379b | 287 | { |
spoda | 0:40c6dc4c379b | 288 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 289 | score++; |
spoda | 0:40c6dc4c379b | 290 | t.stop(); |
spoda | 0:40c6dc4c379b | 291 | t.reset(); |
spoda | 0:40c6dc4c379b | 292 | wait(0.3); |
spoda | 0:40c6dc4c379b | 293 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 294 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 295 | } |
spoda | 0:40c6dc4c379b | 296 | else if(center && Center->read() == 0 && t.read() <= 3.0) |
spoda | 0:40c6dc4c379b | 297 | { |
spoda | 0:40c6dc4c379b | 298 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 299 | score++; |
spoda | 0:40c6dc4c379b | 300 | t.stop(); |
spoda | 0:40c6dc4c379b | 301 | t.reset(); |
spoda | 0:40c6dc4c379b | 302 | wait(0.3); |
spoda | 0:40c6dc4c379b | 303 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 304 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 305 | } |
spoda | 0:40c6dc4c379b | 306 | else if (up && (Down->read() == 0 || Left->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 3.0) |
spoda | 0:40c6dc4c379b | 307 | { |
spoda | 0:40c6dc4c379b | 308 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 309 | t.stop(); |
spoda | 0:40c6dc4c379b | 310 | t.reset(); |
spoda | 0:40c6dc4c379b | 311 | wait(0.3); |
spoda | 0:40c6dc4c379b | 312 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 313 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 314 | } |
spoda | 0:40c6dc4c379b | 315 | else if (down && (Up->read() == 0 || Left->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 3.0) |
spoda | 0:40c6dc4c379b | 316 | { |
spoda | 0:40c6dc4c379b | 317 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 318 | t.stop(); |
spoda | 0:40c6dc4c379b | 319 | t.reset(); |
spoda | 0:40c6dc4c379b | 320 | wait(0.3); |
spoda | 0:40c6dc4c379b | 321 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 322 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 323 | } |
spoda | 0:40c6dc4c379b | 324 | else if (left && (Down->read() == 0 || Up->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 3.0) |
spoda | 0:40c6dc4c379b | 325 | { |
spoda | 0:40c6dc4c379b | 326 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 327 | t.stop(); |
spoda | 0:40c6dc4c379b | 328 | t.reset(); |
spoda | 0:40c6dc4c379b | 329 | wait(0.3); |
spoda | 0:40c6dc4c379b | 330 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 331 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 332 | } |
spoda | 0:40c6dc4c379b | 333 | else if (right && (Down->read() == 0 || Left->read() == 0 || Up->read() == 0 || Center->read() == 0)&& t.read() < 3.0) |
spoda | 0:40c6dc4c379b | 334 | { |
spoda | 0:40c6dc4c379b | 335 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 336 | t.stop(); |
spoda | 0:40c6dc4c379b | 337 | t.reset(); |
spoda | 0:40c6dc4c379b | 338 | wait(0.3); |
spoda | 0:40c6dc4c379b | 339 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 340 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 341 | } |
spoda | 0:40c6dc4c379b | 342 | else if (center && (Down->read() == 0 || Left->read() == 0 || Right->read() == 0 || Up->read() == 0) && t.read() < 3.0) |
spoda | 0:40c6dc4c379b | 343 | { |
spoda | 0:40c6dc4c379b | 344 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 345 | t.stop(); |
spoda | 0:40c6dc4c379b | 346 | t.reset(); |
spoda | 0:40c6dc4c379b | 347 | wait(0.3); |
spoda | 0:40c6dc4c379b | 348 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 349 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 350 | } |
spoda | 0:40c6dc4c379b | 351 | else if( t.read() >= 3.0) |
spoda | 0:40c6dc4c379b | 352 | { |
spoda | 0:40c6dc4c379b | 353 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 354 | t.stop(); |
spoda | 0:40c6dc4c379b | 355 | t.reset(); |
spoda | 0:40c6dc4c379b | 356 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 357 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 358 | } |
spoda | 0:40c6dc4c379b | 359 | } |
spoda | 0:40c6dc4c379b | 360 | endloop = 0; |
spoda | 0:40c6dc4c379b | 361 | computeAverageReactionTime(); |
spoda | 0:40c6dc4c379b | 362 | drawResultsScreen(); |
spoda | 0:40c6dc4c379b | 363 | } |
spoda | 0:40c6dc4c379b | 364 | |
spoda | 0:40c6dc4c379b | 365 | void Rhythm::level2() |
spoda | 0:40c6dc4c379b | 366 | { |
spoda | 0:40c6dc4c379b | 367 | drawLevel2Screen(); |
spoda | 0:40c6dc4c379b | 368 | wait(2.0); |
spoda | 0:40c6dc4c379b | 369 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 370 | while(endloop <= 10) |
spoda | 0:40c6dc4c379b | 371 | { |
spoda | 0:40c6dc4c379b | 372 | if(up && Up->read() == 0 && t.read() <= 2.0) |
spoda | 0:40c6dc4c379b | 373 | { |
spoda | 0:40c6dc4c379b | 374 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 375 | score++; |
spoda | 0:40c6dc4c379b | 376 | t.stop(); |
spoda | 0:40c6dc4c379b | 377 | t.reset(); |
spoda | 0:40c6dc4c379b | 378 | wait(0.3); |
spoda | 0:40c6dc4c379b | 379 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 380 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 381 | } |
spoda | 0:40c6dc4c379b | 382 | else if(down && Down->read() == 0 && t.read() <= 2.0) |
spoda | 0:40c6dc4c379b | 383 | { |
spoda | 0:40c6dc4c379b | 384 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 385 | score++; |
spoda | 0:40c6dc4c379b | 386 | t.stop(); |
spoda | 0:40c6dc4c379b | 387 | t.reset(); |
spoda | 0:40c6dc4c379b | 388 | wait(0.3); |
spoda | 0:40c6dc4c379b | 389 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 390 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 391 | } |
spoda | 0:40c6dc4c379b | 392 | else if(left && Left->read() == 0 && t.read() <= 2.0) |
spoda | 0:40c6dc4c379b | 393 | { |
spoda | 0:40c6dc4c379b | 394 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 395 | score++; |
spoda | 0:40c6dc4c379b | 396 | t.stop(); |
spoda | 0:40c6dc4c379b | 397 | t.reset(); |
spoda | 0:40c6dc4c379b | 398 | wait(0.3); |
spoda | 0:40c6dc4c379b | 399 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 400 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 401 | } |
spoda | 0:40c6dc4c379b | 402 | else if(right && Right->read() == 0 && t.read() <= 2.0) |
spoda | 0:40c6dc4c379b | 403 | { |
spoda | 0:40c6dc4c379b | 404 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 405 | score++; |
spoda | 0:40c6dc4c379b | 406 | t.stop(); |
spoda | 0:40c6dc4c379b | 407 | t.reset(); |
spoda | 0:40c6dc4c379b | 408 | wait(0.3); |
spoda | 0:40c6dc4c379b | 409 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 410 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 411 | } |
spoda | 0:40c6dc4c379b | 412 | else if(center && Center->read() == 0 && t.read() <= 2.0) |
spoda | 0:40c6dc4c379b | 413 | { |
spoda | 0:40c6dc4c379b | 414 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 415 | score++; |
spoda | 0:40c6dc4c379b | 416 | t.stop(); |
spoda | 0:40c6dc4c379b | 417 | t.reset(); |
spoda | 0:40c6dc4c379b | 418 | wait(0.3); |
spoda | 0:40c6dc4c379b | 419 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 420 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 421 | } |
spoda | 0:40c6dc4c379b | 422 | else if (up && (Down->read() == 0 || Left->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 2.0) |
spoda | 0:40c6dc4c379b | 423 | { |
spoda | 0:40c6dc4c379b | 424 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 425 | t.stop(); |
spoda | 0:40c6dc4c379b | 426 | t.reset(); |
spoda | 0:40c6dc4c379b | 427 | wait(0.3); |
spoda | 0:40c6dc4c379b | 428 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 429 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 430 | } |
spoda | 0:40c6dc4c379b | 431 | else if (down && (Up->read() == 0 || Left->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 2.0) |
spoda | 0:40c6dc4c379b | 432 | { |
spoda | 0:40c6dc4c379b | 433 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 434 | t.stop(); |
spoda | 0:40c6dc4c379b | 435 | t.reset(); |
spoda | 0:40c6dc4c379b | 436 | wait(0.3); |
spoda | 0:40c6dc4c379b | 437 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 438 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 439 | } |
spoda | 0:40c6dc4c379b | 440 | else if (left && (Down->read() == 0 || Up->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 2.0) |
spoda | 0:40c6dc4c379b | 441 | { |
spoda | 0:40c6dc4c379b | 442 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 443 | t.stop(); |
spoda | 0:40c6dc4c379b | 444 | t.reset(); |
spoda | 0:40c6dc4c379b | 445 | wait(0.3); |
spoda | 0:40c6dc4c379b | 446 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 447 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 448 | } |
spoda | 0:40c6dc4c379b | 449 | else if (right && (Down->read() == 0 || Left->read() == 0 || Up->read() == 0 || Center->read() == 0)&& t.read() < 2.0) |
spoda | 0:40c6dc4c379b | 450 | { |
spoda | 0:40c6dc4c379b | 451 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 452 | t.stop(); |
spoda | 0:40c6dc4c379b | 453 | t.reset(); |
spoda | 0:40c6dc4c379b | 454 | wait(0.3); |
spoda | 0:40c6dc4c379b | 455 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 456 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 457 | } |
spoda | 0:40c6dc4c379b | 458 | else if (center && (Down->read() == 0 || Left->read() == 0 || Right->read() == 0 || Up->read() == 0) && t.read() < 2.0) |
spoda | 0:40c6dc4c379b | 459 | { |
spoda | 0:40c6dc4c379b | 460 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 461 | t.stop(); |
spoda | 0:40c6dc4c379b | 462 | t.reset(); |
spoda | 0:40c6dc4c379b | 463 | wait(0.3); |
spoda | 0:40c6dc4c379b | 464 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 465 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 466 | } |
spoda | 0:40c6dc4c379b | 467 | else if( t.read() >= 2.0) |
spoda | 0:40c6dc4c379b | 468 | { |
spoda | 0:40c6dc4c379b | 469 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 470 | t.stop(); |
spoda | 0:40c6dc4c379b | 471 | t.reset(); |
spoda | 0:40c6dc4c379b | 472 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 473 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 474 | } |
spoda | 0:40c6dc4c379b | 475 | } |
spoda | 0:40c6dc4c379b | 476 | endloop = 0; |
spoda | 0:40c6dc4c379b | 477 | computeAverageReactionTime(); |
spoda | 0:40c6dc4c379b | 478 | drawResultsScreen(); |
spoda | 0:40c6dc4c379b | 479 | } |
spoda | 0:40c6dc4c379b | 480 | |
spoda | 0:40c6dc4c379b | 481 | void Rhythm::level3() |
spoda | 0:40c6dc4c379b | 482 | { |
spoda | 0:40c6dc4c379b | 483 | drawLevel3Screen(); |
spoda | 0:40c6dc4c379b | 484 | wait(2.0); |
spoda | 0:40c6dc4c379b | 485 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 486 | while(endloop <= 10) |
spoda | 0:40c6dc4c379b | 487 | { |
spoda | 0:40c6dc4c379b | 488 | if(up && Up->read() == 0 && t.read() <= 1.0) |
spoda | 0:40c6dc4c379b | 489 | { |
spoda | 0:40c6dc4c379b | 490 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 491 | score++; |
spoda | 0:40c6dc4c379b | 492 | t.stop(); |
spoda | 0:40c6dc4c379b | 493 | t.reset(); |
spoda | 0:40c6dc4c379b | 494 | wait(0.3); |
spoda | 0:40c6dc4c379b | 495 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 496 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 497 | } |
spoda | 0:40c6dc4c379b | 498 | else if(down && Down->read() == 0 && t.read() <= 1.0) |
spoda | 0:40c6dc4c379b | 499 | { |
spoda | 0:40c6dc4c379b | 500 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 501 | score++; |
spoda | 0:40c6dc4c379b | 502 | t.stop(); |
spoda | 0:40c6dc4c379b | 503 | t.reset(); |
spoda | 0:40c6dc4c379b | 504 | wait(0.3); |
spoda | 0:40c6dc4c379b | 505 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 506 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 507 | } |
spoda | 0:40c6dc4c379b | 508 | else if(left && Left->read() == 0 && t.read() <= 1.0) |
spoda | 0:40c6dc4c379b | 509 | { |
spoda | 0:40c6dc4c379b | 510 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 511 | score++; |
spoda | 0:40c6dc4c379b | 512 | t.stop(); |
spoda | 0:40c6dc4c379b | 513 | t.reset(); |
spoda | 0:40c6dc4c379b | 514 | wait(0.3); |
spoda | 0:40c6dc4c379b | 515 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 516 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 517 | } |
spoda | 0:40c6dc4c379b | 518 | else if(right && Right->read() == 0 && t.read() <= 1.0) |
spoda | 0:40c6dc4c379b | 519 | { |
spoda | 0:40c6dc4c379b | 520 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 521 | score++; |
spoda | 0:40c6dc4c379b | 522 | t.stop(); |
spoda | 0:40c6dc4c379b | 523 | t.reset(); |
spoda | 0:40c6dc4c379b | 524 | wait(0.3); |
spoda | 0:40c6dc4c379b | 525 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 526 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 527 | } |
spoda | 0:40c6dc4c379b | 528 | else if(center && Center->read() == 0 && t.read() <= 1.0) |
spoda | 0:40c6dc4c379b | 529 | { |
spoda | 0:40c6dc4c379b | 530 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 531 | score++; |
spoda | 0:40c6dc4c379b | 532 | t.stop(); |
spoda | 0:40c6dc4c379b | 533 | t.reset(); |
spoda | 0:40c6dc4c379b | 534 | wait(0.3); |
spoda | 0:40c6dc4c379b | 535 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 536 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 537 | } |
spoda | 0:40c6dc4c379b | 538 | else if (up && (Down->read() == 0 || Left->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 1.0) |
spoda | 0:40c6dc4c379b | 539 | { |
spoda | 0:40c6dc4c379b | 540 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 541 | t.stop(); |
spoda | 0:40c6dc4c379b | 542 | t.reset(); |
spoda | 0:40c6dc4c379b | 543 | wait(0.3); |
spoda | 0:40c6dc4c379b | 544 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 545 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 546 | } |
spoda | 0:40c6dc4c379b | 547 | else if (down && (Up->read() == 0 || Left->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 1.0) |
spoda | 0:40c6dc4c379b | 548 | { |
spoda | 0:40c6dc4c379b | 549 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 550 | t.stop(); |
spoda | 0:40c6dc4c379b | 551 | t.reset(); |
spoda | 0:40c6dc4c379b | 552 | wait(0.3); |
spoda | 0:40c6dc4c379b | 553 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 554 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 555 | } |
spoda | 0:40c6dc4c379b | 556 | else if (left && (Down->read() == 0 || Up->read() == 0 || Right->read() == 0 || Center->read() == 0)&& t.read() < 1.0) |
spoda | 0:40c6dc4c379b | 557 | { |
spoda | 0:40c6dc4c379b | 558 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 559 | t.stop(); |
spoda | 0:40c6dc4c379b | 560 | t.reset(); |
spoda | 0:40c6dc4c379b | 561 | wait(0.3); |
spoda | 0:40c6dc4c379b | 562 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 563 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 564 | } |
spoda | 0:40c6dc4c379b | 565 | else if (right && (Down->read() == 0 || Left->read() == 0 || Up->read() == 0 || Center->read() == 0)&& t.read() < 1.0) |
spoda | 0:40c6dc4c379b | 566 | { |
spoda | 0:40c6dc4c379b | 567 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 568 | t.stop(); |
spoda | 0:40c6dc4c379b | 569 | t.reset(); |
spoda | 0:40c6dc4c379b | 570 | wait(0.3); |
spoda | 0:40c6dc4c379b | 571 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 572 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 573 | } |
spoda | 0:40c6dc4c379b | 574 | else if (center && (Down->read() == 0 || Left->read() == 0 || Right->read() == 0 || Up->read() == 0) && t.read() < 1.0) |
spoda | 0:40c6dc4c379b | 575 | { |
spoda | 0:40c6dc4c379b | 576 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 577 | t.stop(); |
spoda | 0:40c6dc4c379b | 578 | t.reset(); |
spoda | 0:40c6dc4c379b | 579 | wait(0.3); |
spoda | 0:40c6dc4c379b | 580 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 581 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 582 | } |
spoda | 0:40c6dc4c379b | 583 | else if( t.read() >= 1.0) |
spoda | 0:40c6dc4c379b | 584 | { |
spoda | 0:40c6dc4c379b | 585 | reaction_times[endloop - 1] = t.read(); |
spoda | 0:40c6dc4c379b | 586 | t.stop(); |
spoda | 0:40c6dc4c379b | 587 | t.reset(); |
spoda | 0:40c6dc4c379b | 588 | if (endloop == 10) {break;} |
spoda | 0:40c6dc4c379b | 589 | getArrowDirection(); |
spoda | 0:40c6dc4c379b | 590 | } |
spoda | 0:40c6dc4c379b | 591 | } |
spoda | 0:40c6dc4c379b | 592 | endloop = 0; |
spoda | 0:40c6dc4c379b | 593 | computeAverageReactionTime(); |
spoda | 0:40c6dc4c379b | 594 | drawResultsScreen(); |
spoda | 0:40c6dc4c379b | 595 | } |
spoda | 0:40c6dc4c379b | 596 | |
spoda | 0:40c6dc4c379b | 597 | void Rhythm::drawTitleScreen() { |
spoda | 0:40c6dc4c379b | 598 | uLCD->cls(); |
spoda | 0:40c6dc4c379b | 599 | uLCD->background_color(BLACK); |
spoda | 0:40c6dc4c379b | 600 | uLCD->text_bold(ON); |
spoda | 0:40c6dc4c379b | 601 | uLCD->text_string("MBED Rhythm", 2, 4, FONT_7X8, WHITE); |
spoda | 0:40c6dc4c379b | 602 | uLCD->text_string("Down - Level 1", 2, 6, FONT_7X8, BLUE); |
spoda | 0:40c6dc4c379b | 603 | uLCD->text_string("Up - Level 2", 2, 8, FONT_7X8, GREEN); |
spoda | 0:40c6dc4c379b | 604 | uLCD->text_string("Right - Level 3", 2, 10, FONT_7X8, RED); |
spoda | 0:40c6dc4c379b | 605 | playMusicIntro(); |
spoda | 0:40c6dc4c379b | 606 | while(1) |
spoda | 0:40c6dc4c379b | 607 | { |
spoda | 0:40c6dc4c379b | 608 | if (Down->read() == 0) { |
spoda | 0:40c6dc4c379b | 609 | level1(); |
spoda | 0:40c6dc4c379b | 610 | break; |
spoda | 0:40c6dc4c379b | 611 | } else if (Up->read() == 0) { |
spoda | 0:40c6dc4c379b | 612 | level2(); |
spoda | 0:40c6dc4c379b | 613 | break; |
spoda | 0:40c6dc4c379b | 614 | } else if (Right->read() == 0) { |
spoda | 0:40c6dc4c379b | 615 | level3(); |
spoda | 0:40c6dc4c379b | 616 | break; |
spoda | 0:40c6dc4c379b | 617 | } |
spoda | 0:40c6dc4c379b | 618 | } |
spoda | 0:40c6dc4c379b | 619 | } |
spoda | 0:40c6dc4c379b | 620 | |
spoda | 0:40c6dc4c379b | 621 | void Rhythm::computeAverageReactionTime() { |
spoda | 0:40c6dc4c379b | 622 | float sum = 0; |
spoda | 0:40c6dc4c379b | 623 | for (int i = 0; i < 10; i++) { |
spoda | 0:40c6dc4c379b | 624 | sum = sum + reaction_times[i]; |
spoda | 0:40c6dc4c379b | 625 | } |
spoda | 0:40c6dc4c379b | 626 | average_reaction_time = sum / 10.0; |
spoda | 0:40c6dc4c379b | 627 | } |
spoda | 0:40c6dc4c379b | 628 | |
spoda | 0:40c6dc4c379b | 629 | void Rhythm::drawResultsScreen() { |
spoda | 0:40c6dc4c379b | 630 | uLCD->cls(); |
spoda | 0:40c6dc4c379b | 631 | uLCD->text_string("Results", 1, 1, FONT_7X8, WHITE); |
spoda | 0:40c6dc4c379b | 632 | uLCD->set_font(FONT_7X8); |
spoda | 0:40c6dc4c379b | 633 | uLCD->locate(1, 3); |
spoda | 0:40c6dc4c379b | 634 | uLCD->color(GREEN); |
spoda | 0:40c6dc4c379b | 635 | uLCD->printf("Score: %d", score); |
spoda | 0:40c6dc4c379b | 636 | uLCD->locate(1, 5); |
spoda | 0:40c6dc4c379b | 637 | uLCD->color(0xFFCA00); |
spoda | 0:40c6dc4c379b | 638 | uLCD->printf("Average Reaction Time: %1.3f sec", average_reaction_time); |
spoda | 0:40c6dc4c379b | 639 | uLCD->locate(1, 8); |
spoda | 0:40c6dc4c379b | 640 | uLCD->color(0xFF00FF); |
spoda | 0:40c6dc4c379b | 641 | uLCD->printf("Would you like to play again?"); |
spoda | 0:40c6dc4c379b | 642 | uLCD->locate(1, 11); |
spoda | 0:40c6dc4c379b | 643 | uLCD->color(BLUE); |
spoda | 0:40c6dc4c379b | 644 | uLCD->printf("Up - Yes"); |
spoda | 0:40c6dc4c379b | 645 | uLCD->locate(1, 13); |
spoda | 0:40c6dc4c379b | 646 | uLCD->color(RED); |
spoda | 0:40c6dc4c379b | 647 | uLCD->printf("Down - No"); |
spoda | 0:40c6dc4c379b | 648 | score = 0; |
spoda | 0:40c6dc4c379b | 649 | for (int i = 0; i < 10; i++) { |
spoda | 0:40c6dc4c379b | 650 | reaction_times[i] = 0; |
spoda | 0:40c6dc4c379b | 651 | } |
spoda | 0:40c6dc4c379b | 652 | average_reaction_time = 0; |
spoda | 0:40c6dc4c379b | 653 | playMusicResults(); |
spoda | 0:40c6dc4c379b | 654 | while (1) { |
spoda | 0:40c6dc4c379b | 655 | if (Up->read() == 0) { |
spoda | 0:40c6dc4c379b | 656 | drawTitleScreen(); |
spoda | 0:40c6dc4c379b | 657 | } else if (Down->read() == 0) { |
spoda | 0:40c6dc4c379b | 658 | drawEndScreen(); |
spoda | 0:40c6dc4c379b | 659 | } |
spoda | 0:40c6dc4c379b | 660 | } |
spoda | 0:40c6dc4c379b | 661 | } |
spoda | 0:40c6dc4c379b | 662 | |
spoda | 0:40c6dc4c379b | 663 | void Rhythm::playMusicIntro() |
spoda | 0:40c6dc4c379b | 664 | { |
spoda | 0:40c6dc4c379b | 665 | FILE *wave_file; |
spoda | 0:40c6dc4c379b | 666 | wave_file = fopen("/sd/wavfiles/WW_PressStart.wav","r"); |
spoda | 0:40c6dc4c379b | 667 | waver->play(wave_file); |
spoda | 0:40c6dc4c379b | 668 | fclose(wave_file); |
spoda | 0:40c6dc4c379b | 669 | } |
spoda | 0:40c6dc4c379b | 670 | |
spoda | 0:40c6dc4c379b | 671 | void Rhythm::playMusicEnd() |
spoda | 0:40c6dc4c379b | 672 | { |
spoda | 0:40c6dc4c379b | 673 | FILE *wave_file; |
spoda | 0:40c6dc4c379b | 674 | wave_file = fopen("/sd/wavfiles/WW_Get_Rupee_Red.wav","r"); |
spoda | 0:40c6dc4c379b | 675 | waver->play(wave_file); |
spoda | 0:40c6dc4c379b | 676 | fclose(wave_file); |
spoda | 0:40c6dc4c379b | 677 | } |
spoda | 0:40c6dc4c379b | 678 | |
spoda | 0:40c6dc4c379b | 679 | void Rhythm::playMusicResults() |
spoda | 0:40c6dc4c379b | 680 | { |
spoda | 0:40c6dc4c379b | 681 | FILE *wave_file; |
spoda | 0:40c6dc4c379b | 682 | wave_file = fopen("/sd/wavfiles/WW_ChuChu_Wobble.wav","r"); |
spoda | 0:40c6dc4c379b | 683 | waver->play(wave_file); |
spoda | 0:40c6dc4c379b | 684 | fclose(wave_file); |
spoda | 0:40c6dc4c379b | 685 | } |