#include #include #include #include #include #include #include uint8_t switches; uint8_t randNumber; uint8_t moves[100]; int level, checkloop, win, gamelength; static void delay(uint16_t us) { while(us) us--; } void waitForButton(void) { while(PIND!=0b11111111); int waitseed; while(PIND==0xFF) { waitseed++; waitseed=waitseed % 65535; } srand(waitseed); } void playBackGame(uint8_t movearray[], int level) { int loop; for(loop=0;loop<=level;loop++) { PORTB=0b11111111; delay(30000); PORTB=movearray[loop]; delay(30000); } } void initGame(void) { DDRB = 0xff; //use all pins on PORT B for output DDRD = 0x00; //use all pins on PORT D for input PORTB=0b10101010; waitForButton(); } void blinkWin(void) { for(;;) { PORTB=0b10101010; delay(30000); PORTB=0b01010101; delay(30000); PORTB=0b10101010; delay(30000); PORTB=0b01010101; delay(30000); } } void doLose(void) { while(PIND!=0b11111100) { PORTB=0b11111100; delay(30000); PORTB=0b11111111; delay(30000); } playGame(); } int getRand(void) { randNumber = (uint8_t) rand(); // Get a random number (0 to 255) int randMod = randNumber % 8; switch (randMod) { case 0: return 0b11111110; case 1: return 0b11111101; case 2: return 0b11111011; case 3: return 0b11110111; case 4: return 0b11101111; case 5: return 0b11011111; case 6: return 0b10111111; case 7: return 0b01111111; default: return 0b01111111; } } void playGame() { initGame(); delay(30000); level=0; for(gamelength=3;gamelength>=0;gamelength--) { switches=0; moves[level]=getRand(); delay(30000); playBackGame(moves, level); delay(10000); PORTB=0b11111111; for(checkloop=0;checkloop<=level;checkloop++) { waitForButton(); switches = PIND; delay(5000); PORTB=switches; delay(5000); PORTB=0b11111111; while(PIND!=0b11111111); if (switches!=moves[checkloop]) doLose(); } level++; } blinkWin(); } int main(void) { playGame(); return 0; }