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

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?

UserRevisionLine numberNew 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 }