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
Simon.cpp@0:d53b17bb7ffa, 2015-02-03 (annotated)
- Committer:
- tsoic
- Date:
- Tue Feb 03 13:01:28 2015 +0000
- Revision:
- 0:d53b17bb7ffa
- Child:
- 1:fb29354d9073
- Child:
- 3:75399d0ba94e
Simple Simon says game
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tsoic | 0:d53b17bb7ffa | 1 | #include "mbed.h" |
tsoic | 0:d53b17bb7ffa | 2 | #include "PinDetect.h" |
tsoic | 0:d53b17bb7ffa | 3 | #include "Simon.h" |
tsoic | 0:d53b17bb7ffa | 4 | #include <vector> |
tsoic | 0:d53b17bb7ffa | 5 | #include <cstdlib> |
tsoic | 0:d53b17bb7ffa | 6 | |
tsoic | 0:d53b17bb7ffa | 7 | |
tsoic | 0:d53b17bb7ffa | 8 | DigitalOut Simon::leds[4] = {LED1, LED2, LED3, LED4}; |
tsoic | 0:d53b17bb7ffa | 9 | PinDetect Simon::button[4] = {p12, p13, p14, p15}; |
tsoic | 0:d53b17bb7ffa | 10 | |
tsoic | 0:d53b17bb7ffa | 11 | Simon::Simon() : queue(turn) { |
tsoic | 0:d53b17bb7ffa | 12 | LEDSOn(); |
tsoic | 0:d53b17bb7ffa | 13 | wait(0.4); |
tsoic | 0:d53b17bb7ffa | 14 | LEDSOff(); |
tsoic | 0:d53b17bb7ffa | 15 | for(i = 0; i < 4; i++) { |
tsoic | 0:d53b17bb7ffa | 16 | button[i].mode( PullDown ); |
tsoic | 0:d53b17bb7ffa | 17 | switch (i) { |
tsoic | 0:d53b17bb7ffa | 18 | case 0: |
tsoic | 0:d53b17bb7ffa | 19 | button[i].attach_asserted(this, &Simon::keyPressedSt); |
tsoic | 0:d53b17bb7ffa | 20 | break; |
tsoic | 0:d53b17bb7ffa | 21 | case 1: |
tsoic | 0:d53b17bb7ffa | 22 | button[i].attach_asserted(this, &Simon::keyPressedNd); |
tsoic | 0:d53b17bb7ffa | 23 | break; |
tsoic | 0:d53b17bb7ffa | 24 | case 2: |
tsoic | 0:d53b17bb7ffa | 25 | button[i].attach_asserted(this, &Simon::keyPressedRd); |
tsoic | 0:d53b17bb7ffa | 26 | break; |
tsoic | 0:d53b17bb7ffa | 27 | case 3: |
tsoic | 0:d53b17bb7ffa | 28 | button[i].attach_asserted(this, &Simon::keyPressedTh); |
tsoic | 0:d53b17bb7ffa | 29 | break; |
tsoic | 0:d53b17bb7ffa | 30 | } |
tsoic | 0:d53b17bb7ffa | 31 | button[i].setSampleFrequency(); |
tsoic | 0:d53b17bb7ffa | 32 | } |
tsoic | 0:d53b17bb7ffa | 33 | } |
tsoic | 0:d53b17bb7ffa | 34 | int Simon::TestQueue(int i) { |
tsoic | 0:d53b17bb7ffa | 35 | if (queue[i] == test_val) { |
tsoic | 0:d53b17bb7ffa | 36 | leds[queue[i]] = 1; |
tsoic | 0:d53b17bb7ffa | 37 | wait(0.2); |
tsoic | 0:d53b17bb7ffa | 38 | leds[queue[i]] = 0; |
tsoic | 0:d53b17bb7ffa | 39 | return 1; |
tsoic | 0:d53b17bb7ffa | 40 | } |
tsoic | 0:d53b17bb7ffa | 41 | else return 0; |
tsoic | 0:d53b17bb7ffa | 42 | } |
tsoic | 0:d53b17bb7ffa | 43 | |
tsoic | 0:d53b17bb7ffa | 44 | void Simon::LEDSOn() { |
tsoic | 0:d53b17bb7ffa | 45 | for(i = 0; i < 4; i++) leds[i] = 1; |
tsoic | 0:d53b17bb7ffa | 46 | } |
tsoic | 0:d53b17bb7ffa | 47 | |
tsoic | 0:d53b17bb7ffa | 48 | void Simon::LEDSOff() { |
tsoic | 0:d53b17bb7ffa | 49 | for(i = 0; i < 4; i++) leds[i] = 0; |
tsoic | 0:d53b17bb7ffa | 50 | } |
tsoic | 0:d53b17bb7ffa | 51 | |
tsoic | 0:d53b17bb7ffa | 52 | void Simon::newQueue() { |
tsoic | 0:d53b17bb7ffa | 53 | for(i = 0; i < turn; i++) queue[i] = rand() % 4; |
tsoic | 0:d53b17bb7ffa | 54 | } |
tsoic | 0:d53b17bb7ffa | 55 | |
tsoic | 0:d53b17bb7ffa | 56 | void Simon::showQueue() { |
tsoic | 0:d53b17bb7ffa | 57 | wait(0.2); |
tsoic | 0:d53b17bb7ffa | 58 | for(i = 0; i < turn; i++) { |
tsoic | 0:d53b17bb7ffa | 59 | leds[queue[i]] = 1; |
tsoic | 0:d53b17bb7ffa | 60 | wait(0.5); |
tsoic | 0:d53b17bb7ffa | 61 | leds[queue[i]] = 0; |
tsoic | 0:d53b17bb7ffa | 62 | wait(0.1); |
tsoic | 0:d53b17bb7ffa | 63 | } |
tsoic | 0:d53b17bb7ffa | 64 | } |
tsoic | 0:d53b17bb7ffa | 65 | |
tsoic | 0:d53b17bb7ffa | 66 | bool Simon::userTurn() { |
tsoic | 0:d53b17bb7ffa | 67 | LEDSOn(); |
tsoic | 0:d53b17bb7ffa | 68 | wait(0.5); |
tsoic | 0:d53b17bb7ffa | 69 | LEDSOff(); |
tsoic | 0:d53b17bb7ffa | 70 | i = 0; |
tsoic | 0:d53b17bb7ffa | 71 | while(i < turn){ |
tsoic | 0:d53b17bb7ffa | 72 | if (button_press == 1) { |
tsoic | 0:d53b17bb7ffa | 73 | if (TestQueue(i) == 0) { |
tsoic | 0:d53b17bb7ffa | 74 | i = turn; |
tsoic | 0:d53b17bb7ffa | 75 | button_press = 0; |
tsoic | 0:d53b17bb7ffa | 76 | LEDSOn();/* Indication of Game Over */ |
tsoic | 0:d53b17bb7ffa | 77 | wait(0.4); |
tsoic | 0:d53b17bb7ffa | 78 | LEDSOff(); |
tsoic | 0:d53b17bb7ffa | 79 | return false; |
tsoic | 0:d53b17bb7ffa | 80 | } |
tsoic | 0:d53b17bb7ffa | 81 | else if (TestQueue(i) == 1) { |
tsoic | 0:d53b17bb7ffa | 82 | i++; |
tsoic | 0:d53b17bb7ffa | 83 | button_press = 0; |
tsoic | 0:d53b17bb7ffa | 84 | } |
tsoic | 0:d53b17bb7ffa | 85 | } |
tsoic | 0:d53b17bb7ffa | 86 | } |
tsoic | 0:d53b17bb7ffa | 87 | this -> turn++; |
tsoic | 0:d53b17bb7ffa | 88 | return true; |
tsoic | 0:d53b17bb7ffa | 89 | } |
tsoic | 0:d53b17bb7ffa | 90 | |
tsoic | 0:d53b17bb7ffa | 91 | void Simon::keyPressedSt(void) { |
tsoic | 0:d53b17bb7ffa | 92 | button_press = 1; |
tsoic | 0:d53b17bb7ffa | 93 | test_val = 0; |
tsoic | 0:d53b17bb7ffa | 94 | } |
tsoic | 0:d53b17bb7ffa | 95 | |
tsoic | 0:d53b17bb7ffa | 96 | void Simon::keyPressedNd(void) { |
tsoic | 0:d53b17bb7ffa | 97 | button_press = 1; |
tsoic | 0:d53b17bb7ffa | 98 | test_val = 1; |
tsoic | 0:d53b17bb7ffa | 99 | } |
tsoic | 0:d53b17bb7ffa | 100 | |
tsoic | 0:d53b17bb7ffa | 101 | void Simon::keyPressedRd(void) { |
tsoic | 0:d53b17bb7ffa | 102 | button_press = 1; |
tsoic | 0:d53b17bb7ffa | 103 | test_val = 2; |
tsoic | 0:d53b17bb7ffa | 104 | } |
tsoic | 0:d53b17bb7ffa | 105 | |
tsoic | 0:d53b17bb7ffa | 106 | void Simon::keyPressedTh(void) { |
tsoic | 0:d53b17bb7ffa | 107 | button_press = 1; |
tsoic | 0:d53b17bb7ffa | 108 | test_val = 3; |
tsoic | 0:d53b17bb7ffa | 109 | } |