Simple Simon says mbed game which makes random queue, shows it with onboard LEDs and takes user input with push buttons.
Dependencies: PinDetect mbed beep
Diff: Simon.cpp
- Revision:
- 1:fb29354d9073
- Parent:
- 0:d53b17bb7ffa
- Child:
- 2:0b6e10420ce2
--- a/Simon.cpp Tue Feb 03 13:01:28 2015 +0000 +++ b/Simon.cpp Wed Feb 04 09:12:38 2015 +0000 @@ -5,80 +5,77 @@ #include <cstdlib> -DigitalOut Simon::leds[4] = {LED1, LED2, LED3, LED4}; -PinDetect Simon::button[4] = {p12, p13, p14, p15}; +DigitalOut Simon::led[4] = {LED1, LED2, LED3, LED4}; +PinDetect Simon::button[5] = {p12, p13, p14, p15, p16}; Simon::Simon() : queue(turn) { - LEDSOn(); - wait(0.4); - LEDSOff(); - for(i = 0; i < 4; i++) { + LEDSBlink(); + button_press = false; + run = false; + button[0].attach_asserted(this, &Simon::keyPressedSt); + button[1].attach_asserted(this, &Simon::keyPressedNd); + button[2].attach_asserted(this, &Simon::keyPressedRd); + button[3].attach_asserted(this, &Simon::keyPressedTh); + button[4].attach_asserted(this, &Simon::ReStart); + for(i = 0; i < 5; i++) { button[i].mode( PullDown ); - switch (i) { - case 0: - button[i].attach_asserted(this, &Simon::keyPressedSt); - break; - case 1: - button[i].attach_asserted(this, &Simon::keyPressedNd); - break; - case 2: - button[i].attach_asserted(this, &Simon::keyPressedRd); - break; - case 3: - button[i].attach_asserted(this, &Simon::keyPressedTh); - break; - } button[i].setSampleFrequency(); } } -int Simon::TestQueue(int i) { + +void Simon::gameStart(int firstTurn) { + turn = firstTurn; + while(1) { + while(run == true) { + newQueue(); + showQueue(); + run = userTurn(); + } + } +} + +int Simon::testQueue() { if (queue[i] == test_val) { - leds[queue[i]] = 1; + led[queue[i]] = 1; wait(0.2); - leds[queue[i]] = 0; + led[queue[i]] = 0; return 1; } else return 0; } -void Simon::LEDSOn() { - for(i = 0; i < 4; i++) leds[i] = 1; +void Simon::LEDSBlink() { + for(i = 0; i < 4; i++) led[i] = 1; + wait(0.4); + for(i = 0; i < 4; i++) led[i] = 0; } -void Simon::LEDSOff() { - for(i = 0; i < 4; i++) leds[i] = 0; -} - -void Simon::newQueue() { +void Simon::newQueue() { for(i = 0; i < turn; i++) queue[i] = rand() % 4; } void Simon::showQueue() { wait(0.2); for(i = 0; i < turn; i++) { - leds[queue[i]] = 1; + led[queue[i]] = 1; wait(0.5); - leds[queue[i]] = 0; + led[queue[i]] = 0; wait(0.1); } } bool Simon::userTurn() { - LEDSOn(); - wait(0.5); - LEDSOff(); + LEDSBlink(); i = 0; while(i < turn){ if (button_press == 1) { - if (TestQueue(i) == 0) { + if (testQueue() == 0) { i = turn; button_press = 0; - LEDSOn();/* Indication of Game Over */ - wait(0.4); - LEDSOff(); + LEDSBlink();/* Indication of Game Over */ return false; } - else if (TestQueue(i) == 1) { + else if (testQueue() == 1) { i++; button_press = 0; } @@ -88,22 +85,26 @@ return true; } -void Simon::keyPressedSt(void) { +void Simon::keyPressedSt() { button_press = 1; test_val = 0; } -void Simon::keyPressedNd(void) { +void Simon::keyPressedNd() { button_press = 1; test_val = 1; } -void Simon::keyPressedRd(void) { +void Simon::keyPressedRd() { button_press = 1; test_val = 2; } -void Simon::keyPressedTh(void) { +void Simon::keyPressedTh() { button_press = 1; test_val = 3; +} + +void Simon:: ReStart() { + run = true; } \ No newline at end of file