4180-L4
Dependencies: 4DGL-uLCD-SE mbed-rtos mbed
main.cpp
- Committer:
- rfarr6
- Date:
- 2014-10-21
- Revision:
- 2:5b231e0d0718
- Parent:
- 0:68d1066c8288
File content as of revision 2:5b231e0d0718:
#include "mbed.h" #include "rtos.h" #include "uLCD_4DGL.h" uLCD_4DGL uLCD(p9, p10, p11); DigitalIn flap_button(p30); AnalogIn ain(p20); int bird_lo_addr = 0x7801; int y_pos = 63, old_ypos = 63; int vel = 1; int state = 0; int score = 0; // wall_1 int wall_x_pos1 = 128, opening_y_pos1; // wall 2 int wall_x_pos2, opening_y_pos2; // wall 3 int wall_x_pos3, opening_y_pos3; void draw_frame() { switch (state) { case 0: uLCD.locate(0, 6); uLCD.printf("PRESS 2 START"); break; case 1: // Draw blue rectangle over old bird position uLCD.set_sector_address(0x001D, 0x7803); uLCD.display_image(20, old_ypos); if(wall_x_pos1 > -21 && wall_x_pos1 < 128){ // draw wall 1 if(wall_x_pos1 < 0){ //uLCD.filled_rectangle(0, 0, wall_x_pos1 + 19, 127, RED); //uLCD.filled_rectangle(0, opening_y_pos1, wall_x_pos1 + 19, opening_y_pos1 + 39, BLUE); uLCD.filled_rectangle(wall_x_pos1 + 20, 0, wall_x_pos1 + 21, 127, BLUE); } else if (wall_x_pos1 > 119){ uLCD.filled_rectangle(wall_x_pos1, 0, wall_x_pos1+1, opening_y_pos1-1, RED); uLCD.filled_rectangle(wall_x_pos1, opening_y_pos1+40, wall_x_pos1+1, 127, RED); } else { uLCD.filled_rectangle(wall_x_pos1, 0, wall_x_pos1+1, opening_y_pos1-1, RED); uLCD.filled_rectangle(wall_x_pos1, opening_y_pos1+40, wall_x_pos1+1, 127, RED); uLCD.filled_rectangle(wall_x_pos1 + 20, 0, wall_x_pos1 + 21, 127, BLUE); } } if(wall_x_pos2 > -21 && wall_x_pos2 < 128){ // draw wall 1 if(wall_x_pos2 < 0){ //uLCD.filled_rectangle(0, 0, wall_x_pos2 + 19, 127, RED); //uLCD.filled_rectangle(0, opening_y_pos2, wall_x_pos2 + 19, opening_y_pos2 + 39, BLUE); uLCD.filled_rectangle(wall_x_pos2 + 20, 0, wall_x_pos2 + 21, 127, BLUE); } else if (wall_x_pos2 > 119){ uLCD.filled_rectangle(wall_x_pos2, 0, wall_x_pos2+1, opening_y_pos2-1, RED); uLCD.filled_rectangle(wall_x_pos2, opening_y_pos2+40, wall_x_pos2+1, 127, RED); } else { uLCD.filled_rectangle(wall_x_pos2, 0, wall_x_pos2+1, opening_y_pos2-1, RED); uLCD.filled_rectangle(wall_x_pos2, opening_y_pos2+40, wall_x_pos2+1, 127, RED); uLCD.filled_rectangle(wall_x_pos2 + 20, 0, wall_x_pos2 + 21, 127, BLUE); } } if(wall_x_pos3 > -21 && wall_x_pos3 < 128){ // draw wall 3 if(wall_x_pos3 < 0){ uLCD.filled_rectangle(wall_x_pos3 + 20, 0, wall_x_pos3 + 21, 127, BLUE); } else if (wall_x_pos3 > 119){ uLCD.filled_rectangle(wall_x_pos3, 0, wall_x_pos3+1, opening_y_pos3-1, RED); uLCD.filled_rectangle(wall_x_pos3, opening_y_pos3+40, wall_x_pos3+1, 127, RED); } else { uLCD.filled_rectangle(wall_x_pos3, 0, wall_x_pos3+1, opening_y_pos3-1, RED); uLCD.filled_rectangle(wall_x_pos3, opening_y_pos3+40, wall_x_pos3+1, 127, RED); uLCD.filled_rectangle(wall_x_pos3 + 20, 0, wall_x_pos3 + 21, 127, BLUE); } } // Draw bird at current position uLCD.set_sector_address(0x001D, bird_lo_addr); uLCD.display_image(20, y_pos); break; case 2: uLCD.filled_rectangle(0, 0, 127, 127, BLACK); uLCD.locate(0, 6); uLCD.printf("GAME OVER"); uLCD.locate(0, 7); uLCD.printf("SCORE: %d", score); break; } } void update_frame() { // Update bird position old_ypos = y_pos; y_pos += vel; if (y_pos > 122) { y_pos = 122; } else if (y_pos < 0) { y_pos = 0; } if (wall_x_pos1 <= 26 && wall_x_pos1 > 0) { if (y_pos < opening_y_pos1 || y_pos+5 > opening_y_pos1+39) { state = 2; wait(3); } } if (wall_x_pos2 <= 26 && wall_x_pos2 > 0) { if (y_pos < opening_y_pos2 || y_pos+5 > opening_y_pos2+39) { state = 2; wait(3); } } if (wall_x_pos3 <= 26 && wall_x_pos3 > 0) { if (y_pos < opening_y_pos3 || y_pos+5 > opening_y_pos3+39) { state = 2; wait(3); } } // Update bird velocity if (!flap_button) { // Toggle bird flap bird_lo_addr ^= 0x3; vel--; if (vel < -5) vel = -5; } else { vel++; if (vel > 5) vel = 5; } // Update wall positions if(wall_x_pos1 > -21){ wall_x_pos1 -= 2; } else { wall_x_pos1 = wall_x_pos3 + 80 - (rand() % score); opening_y_pos1 = (int)(ain*1000.0) % 46 + 20; score++; } if(wall_x_pos2 > -21){ wall_x_pos2 -= 2; } else { wall_x_pos2 = wall_x_pos1 + 80 - (rand() % score); opening_y_pos2 = (int)(ain*1000.0) % 46 + 20; score++; } if(wall_x_pos3 > -21){ wall_x_pos3 -= 2; } else { wall_x_pos3 = wall_x_pos2 + 80 - (rand() % score); opening_y_pos3 = (int)(ain*1000.0) % 46 + 20; score++; } } int main() { flap_button.mode(PullUp); uLCD.baudrate(3000000); uLCD.cls(); uLCD.filled_rectangle(0, 0, 127, 127, BLACK); uLCD.media_init(); opening_y_pos1 = rand() % 46 + 20; opening_y_pos2 = rand() % 46 + 20; opening_y_pos3 = rand() % 46 + 20; wall_x_pos2 = wall_x_pos1 + 80 - (rand() % 5); wall_x_pos3 = wall_x_pos2 + 80 - (rand() % 5); // Bird is 6 rows, 7 cols while (1) { draw_frame(); if (state == 1) { update_frame(); } else if (state == 0 && !flap_button) { uLCD.filled_rectangle(0, 0, 127, 127, BLUE); state = 1; } wait_ms(50); } }