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@5:94c215df2b7c, 2015-02-10 (annotated)
- Committer:
- tsoic
- Date:
- Tue Feb 10 12:37:56 2015 +0000
- Revision:
- 5:94c215df2b7c
- Parent:
- 4:32b02dd83c0d
Added piezo speaker and sound effects
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 | 4:32b02dd83c0d | 4 | #include "Piezo.h" |
tsoic | 0:d53b17bb7ffa | 5 | #include <vector> |
tsoic | 0:d53b17bb7ffa | 6 | #include <cstdlib> |
tsoic | 0:d53b17bb7ffa | 7 | |
tsoic | 4:32b02dd83c0d | 8 | DigitalOut Simon::led[4] = {LED1, LED2, LED3, LED4}; |
tsoic | 3:75399d0ba94e | 9 | PinDetect Simon::button[5] = {p12, p13, p14, p15, p16}; |
tsoic | 4:32b02dd83c0d | 10 | |
tsoic | 0:d53b17bb7ffa | 11 | Simon::Simon() : queue(turn) { |
tsoic | 4:32b02dd83c0d | 12 | piezo.NoteC4(); |
tsoic | 4:32b02dd83c0d | 13 | wait(0.4); |
tsoic | 4:32b02dd83c0d | 14 | piezo.NoteB4(); |
tsoic | 3:75399d0ba94e | 15 | LEDSBlink(); |
tsoic | 3:75399d0ba94e | 16 | run = false; |
tsoic | 3:75399d0ba94e | 17 | button[0].attach_asserted(this, &Simon::keyPressedSt); |
tsoic | 3:75399d0ba94e | 18 | button[1].attach_asserted(this, &Simon::keyPressedNd); |
tsoic | 3:75399d0ba94e | 19 | button[2].attach_asserted(this, &Simon::keyPressedRd); |
tsoic | 3:75399d0ba94e | 20 | button[3].attach_asserted(this, &Simon::keyPressedTh); |
tsoic | 3:75399d0ba94e | 21 | button[4].attach_asserted(this, &Simon::ReStart); |
tsoic | 3:75399d0ba94e | 22 | for(i = 0; i < 5; i++) { |
tsoic | 0:d53b17bb7ffa | 23 | button[i].mode( PullDown ); |
tsoic | 0:d53b17bb7ffa | 24 | button[i].setSampleFrequency(); |
tsoic | 0:d53b17bb7ffa | 25 | } |
tsoic | 0:d53b17bb7ffa | 26 | } |
tsoic | 3:75399d0ba94e | 27 | |
tsoic | 3:75399d0ba94e | 28 | void Simon::gameStart(int first_turn) { |
tsoic | 3:75399d0ba94e | 29 | this -> first_turn = first_turn; |
tsoic | 3:75399d0ba94e | 30 | turn = first_turn; |
tsoic | 3:75399d0ba94e | 31 | while(1) { |
tsoic | 3:75399d0ba94e | 32 | while(run == true) { |
tsoic | 3:75399d0ba94e | 33 | newQueue(); |
tsoic | 3:75399d0ba94e | 34 | showQueue(); |
tsoic | 3:75399d0ba94e | 35 | run = userTurn(); |
tsoic | 3:75399d0ba94e | 36 | } |
tsoic | 3:75399d0ba94e | 37 | } |
tsoic | 3:75399d0ba94e | 38 | } |
tsoic | 3:75399d0ba94e | 39 | |
tsoic | 3:75399d0ba94e | 40 | int Simon::testQueue() { |
tsoic | 0:d53b17bb7ffa | 41 | if (queue[i] == test_val) { |
tsoic | 4:32b02dd83c0d | 42 | piezo.NoteFor(queue[i]); |
tsoic | 3:75399d0ba94e | 43 | led[queue[i]] = 1; |
tsoic | 0:d53b17bb7ffa | 44 | wait(0.2); |
tsoic | 3:75399d0ba94e | 45 | led[queue[i]] = 0; |
tsoic | 0:d53b17bb7ffa | 46 | return 1; |
tsoic | 0:d53b17bb7ffa | 47 | } |
tsoic | 0:d53b17bb7ffa | 48 | else return 0; |
tsoic | 0:d53b17bb7ffa | 49 | } |
tsoic | 0:d53b17bb7ffa | 50 | |
tsoic | 3:75399d0ba94e | 51 | void Simon::LEDSBlink() { |
tsoic | 3:75399d0ba94e | 52 | for(i = 0; i < 4; i++) led[i] = 1; |
tsoic | 3:75399d0ba94e | 53 | wait(0.4); |
tsoic | 3:75399d0ba94e | 54 | for(i = 0; i < 4; i++) led[i] = 0; |
tsoic | 0:d53b17bb7ffa | 55 | } |
tsoic | 0:d53b17bb7ffa | 56 | |
tsoic | 3:75399d0ba94e | 57 | void Simon::newQueue() { |
tsoic | 0:d53b17bb7ffa | 58 | for(i = 0; i < turn; i++) queue[i] = rand() % 4; |
tsoic | 0:d53b17bb7ffa | 59 | } |
tsoic | 0:d53b17bb7ffa | 60 | |
tsoic | 0:d53b17bb7ffa | 61 | void Simon::showQueue() { |
tsoic | 0:d53b17bb7ffa | 62 | wait(0.2); |
tsoic | 0:d53b17bb7ffa | 63 | for(i = 0; i < turn; i++) { |
tsoic | 4:32b02dd83c0d | 64 | piezo.NoteFor(queue[i]); |
tsoic | 3:75399d0ba94e | 65 | led[queue[i]] = 1; |
tsoic | 0:d53b17bb7ffa | 66 | wait(0.5); |
tsoic | 3:75399d0ba94e | 67 | led[queue[i]] = 0; |
tsoic | 0:d53b17bb7ffa | 68 | wait(0.1); |
tsoic | 0:d53b17bb7ffa | 69 | } |
tsoic | 0:d53b17bb7ffa | 70 | } |
tsoic | 0:d53b17bb7ffa | 71 | |
tsoic | 0:d53b17bb7ffa | 72 | bool Simon::userTurn() { |
tsoic | 0:d53b17bb7ffa | 73 | i = 0; |
tsoic | 3:75399d0ba94e | 74 | button_press = false; |
tsoic | 0:d53b17bb7ffa | 75 | while(i < turn){ |
tsoic | 0:d53b17bb7ffa | 76 | if (button_press == 1) { |
tsoic | 3:75399d0ba94e | 77 | if (testQueue() == 0) { |
tsoic | 0:d53b17bb7ffa | 78 | i = turn; |
tsoic | 0:d53b17bb7ffa | 79 | button_press = 0; |
tsoic | 4:32b02dd83c0d | 80 | LEDSBlink(); |
tsoic | 4:32b02dd83c0d | 81 | piezo.NoteB4(); |
tsoic | 4:32b02dd83c0d | 82 | wait(0.3); |
tsoic | 4:32b02dd83c0d | 83 | piezo.NoteC4(); |
tsoic | 0:d53b17bb7ffa | 84 | return false; |
tsoic | 0:d53b17bb7ffa | 85 | } |
tsoic | 3:75399d0ba94e | 86 | else if (testQueue() == 1) { |
tsoic | 0:d53b17bb7ffa | 87 | i++; |
tsoic | 0:d53b17bb7ffa | 88 | button_press = 0; |
tsoic | 0:d53b17bb7ffa | 89 | } |
tsoic | 0:d53b17bb7ffa | 90 | } |
tsoic | 0:d53b17bb7ffa | 91 | } |
tsoic | 0:d53b17bb7ffa | 92 | this -> turn++; |
tsoic | 4:32b02dd83c0d | 93 | wait(0.5); |
tsoic | 0:d53b17bb7ffa | 94 | return true; |
tsoic | 0:d53b17bb7ffa | 95 | } |
tsoic | 0:d53b17bb7ffa | 96 | |
tsoic | 3:75399d0ba94e | 97 | void Simon::keyPressedSt() { |
tsoic | 0:d53b17bb7ffa | 98 | button_press = 1; |
tsoic | 0:d53b17bb7ffa | 99 | test_val = 0; |
tsoic | 0:d53b17bb7ffa | 100 | } |
tsoic | 0:d53b17bb7ffa | 101 | |
tsoic | 4:32b02dd83c0d | 102 | void Simon::keyPressedNd() { |
tsoic | 0:d53b17bb7ffa | 103 | button_press = 1; |
tsoic | 0:d53b17bb7ffa | 104 | test_val = 1; |
tsoic | 0:d53b17bb7ffa | 105 | } |
tsoic | 0:d53b17bb7ffa | 106 | |
tsoic | 3:75399d0ba94e | 107 | void Simon::keyPressedRd() { |
tsoic | 0:d53b17bb7ffa | 108 | button_press = 1; |
tsoic | 0:d53b17bb7ffa | 109 | test_val = 2; |
tsoic | 0:d53b17bb7ffa | 110 | } |
tsoic | 0:d53b17bb7ffa | 111 | |
tsoic | 3:75399d0ba94e | 112 | void Simon::keyPressedTh() { |
tsoic | 0:d53b17bb7ffa | 113 | button_press = 1; |
tsoic | 0:d53b17bb7ffa | 114 | test_val = 3; |
tsoic | 3:75399d0ba94e | 115 | } |
tsoic | 3:75399d0ba94e | 116 | |
tsoic | 3:75399d0ba94e | 117 | void Simon:: ReStart() { |
tsoic | 3:75399d0ba94e | 118 | run = true; |
tsoic | 3:75399d0ba94e | 119 | turn = first_turn; |
tsoic | 0:d53b17bb7ffa | 120 | } |