A simple Simon Says game using a Grove Base Shield, 3 Grove LED Bars, 1 Grove Buzzer, and 3 Grove Buttons.
Components Used
Platform: ST-Nucleo-F401RE
Component Configuration
LED_Bar mid(D6, D5); //D5 LED_Bar right(D8, D7); //D7 LED_Bar left(D4, D3); //D3 InterruptIn button_left(A2); InterruptIn button_mid(A1); InterruptIn button_right(A0); DigitalOut buzzer(D2);
Gallery
Diff: main.cpp
- Revision:
- 7:b2576b2b916e
- Parent:
- 6:1c87edbbafe0
- Child:
- 8:7be76afe5597
--- a/main.cpp Fri Aug 19 14:23:57 2016 +0000 +++ b/main.cpp Fri Aug 19 14:30:01 2016 +0000 @@ -10,7 +10,6 @@ DigitalOut buzzer(D2); int input_index; int input[100]; -int sequence_size; int sequence[100]; bool start_flag = false; @@ -46,7 +45,7 @@ /* simon says loop: turn on corresponding LED Bars according to the # in the sequence array (1=right, 2=mid, 3=left) */ -void simon_loop() { +void simon_loop(int sequence_size) { for(int i = 0; i < sequence_size; i++) { if (sequence[i] == 1) { right.setLevel(10); @@ -96,7 +95,7 @@ /* gather user input based on buttons pressed, then store button index into the input array (1=button_right, 2=button_mid, 3=button_left) */ -void input_loop() { +void input_loop(int sequence_size) { button_right.rise(&right_input); button_mid.rise(&mid_input); button_left.rise(&left_input); @@ -108,7 +107,7 @@ /* compare input array to simon says sequence array, if they are a match return true, if they are not a match return false */ -bool win_or_lose() { +bool win_or_lose(int sequence_size) { for(int k = 0; k < sequence_size; k++) { if (input[k] == sequence[k]) { continue; } else { return false; } @@ -142,17 +141,18 @@ int win_count = 0; int lose_count = 0; int level_index = 1; + int sequence_size = 2; while(1) { input_index = 0; mid.setLevel(0); right.setLevel(0); left.setLevel(0); - sequence_size = ((level_index - 1) + 3); + sequence_size++; level_index = level(level_index, sequence_size); - simon_loop(); - input_loop(); + simon_loop(sequence_size); + input_loop(sequence_size); wait(0.3); - bool winner = win_or_lose(); + bool winner = win_or_lose(sequence_size); if (winner == true) { win_count++; success(); @@ -162,10 +162,10 @@ } if (lose_count > 0) { start_flag = false; - wait(1); win_count = 0; lose_count = 0; - level_index = 1;; + level_index = 1; + sequence_size = 2; } } } \ No newline at end of file