Philip Walne
/
335_project
Dotstar LED demonstration, with stacker game. Uses 2 buttons, and LPC1768 microcontroller
Diff: modes/stacker.h
- Revision:
- 0:9ab173ff6353
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modes/stacker.h Wed Jan 04 20:53:49 2017 +0000 @@ -0,0 +1,64 @@ +#ifndef _STACKER_H +#define _STACKER_H +#include <../light_game.h> +class Stacker : public Light_Game { + public: + Stacker() {} + virtual void init() { + index_last = -1; + index_cur = -1; + next_goal = 29; + forward = true; + isDone = false; + for(int i = 0; i < 30; i++) //reset all lights! + strip.setPixelColor(i, 0, 0, 0); + strip.show(); + wait(0.3); + } + + virtual void update() { //dont need to declare this virtual but compiler throws warnings... + strip.setPixelColor(index_last, 0, 0, 0); + if(forward) + strip.setPixelColor(++index_cur, 0, 0, 255); + else + strip.setPixelColor(--index_cur, 0, 0, 255); + index_last = index_cur; + strip.show(); + if(index_cur >= next_goal || index_cur == 0 && !forward) + forward = !forward; + wait((0.009 * next_goal)); + } + + virtual void btn1() { + if(index_cur != next_goal) { //They lost! + isDone = true; + for(int i = 0; i < 30; i++) + strip.setPixelColor(i, 0, 255, 0); + strip.show(); + wait(1); //let them see it before resetting. + return; + } + index_last = -1; //reset last index. + strip.setPixelColor(index_cur, 0, 255, 0); + strip.show(); + index_cur = 0; + forward = true; + wait(0.1); //sometimes butons take time to press. + if(--next_goal == 0) {//They win! + for(int i = 0; i < 30; i++) { + if(i % 2 == 0) + strip.setPixelColor(i, 100, 100, 100); + else + strip.setPixelColor(i, 75, 100, 200); + } + strip.show(); + } + } + virtual void btn2() { btn1();} //Both buttons do the same thing. + virtual bool isFinished() { return isDone; } + private: + int index_cur, index_last; //This is the index the moving light is currently on! + int next_goal; //This is the next required light. + bool forward, isDone; +}; +#endif \ No newline at end of file