/* * test.c * * Created: 2019-04-18 13:05:46 * Author : ol4656he-s */ #include #include #include #include #include extern void executeDelay(); extern void level1(); extern void level2(); extern void level3(); extern void level4(); extern void level5(); extern void level6(); extern void level7(); extern void level8(); extern void level9(); extern void level10(); extern void wait1s(); volatile uint8_t characterLoc = 1; volatile uint8_t state = 1; uint8_t alive = 0; int score = 0; void interruptInit(){ PCMSK0 = 0b00000111; PCICR = 0b0001; } void init() { DDRD = 0xff; DDRB = 0xff; DDRA = 0x00; PORTB = 0b00100000; PORTD = 0x00; } int main(void) { init(); interruptInit(); sei(); LCD_on(); LCD_clear(); /* Replace with your application code */ while (1) { switch(state){ case 1: //Menu LCD_clear(); LCD_drawBorder(); titleText(5, 121); startText(2, 94); while(1){ if(PINA &= 0b00000010){ countDown(3,71); LCD_clear(); LCD_drawBorder(); state = 2; break; } } break; case 2: //Game character(0); alive = 1; while(alive){ int r = randomP(); if(r == 1){ for(int i = 0; i < 124; i++){ obstacle1(0,i); variDelay(); eraseObstacle1(); if(characterCollision()){ alive = 0; break; } } } else if(r == 2){ for(int i = 0; i < 124; i++){ obstacle2(0,i); variDelay(); eraseObstacle2(); if(characterCollision()){ alive = 0; break; } } } else if(r == 3){ for(int i = 0; i < 124; i++){ obstacle3(4,i); variDelay(); eraseObstacle3(); if(characterCollision()){ alive = 0; break; } } } else if(r == 4){ for(int i = 0; i < 124; i++){ obstacle4(0,i); variDelay(); eraseObstacle4(); if(characterCollision()){ alive = 0; break; } } } else if(r == 5){ for(int i = 0; i < 124; i++){ obstacle5(0,i); variDelay(); eraseObstacle5(); if(characterCollision()){ alive = 0; break; } } } if(alive)score++; } state = 3; break; case 3: //Game over LCD_clear(); LCD_drawBorder(); gameOverText(5,94); scoreText(1, 120); printScore(); while(1){ if(PINA &= 0b00000010){ state = 1; score = 0; break; } } break; } } } void moveCharacter(){ //down if(PINA &= 0b00000100){ _delay_ms(100); if(characterLoc < 1){ characterLoc = 1; } else{ characterLoc--; updateCharacter(); character(characterLoc); } } //up if(PINA &= 0b00000001){ _delay_ms(100); if(characterLoc > 5){ characterLoc = 5; } else{ characterLoc++; updateCharacter(); character(characterLoc); } } } ISR(PCINT0_vect) { switch(state){ case 1: break; case 2: moveCharacter(); _delay_ms(50); break; case 3: break; } }