My ELEC2645 project. Nikollao Sulollari. 200804685
Dependencies: N5110 SoftPWM mbed
Fork of Treasure_Hunt by
Diff: main.cpp
- Revision:
- 4:f31bdc212241
- Parent:
- 3:d2cc054e8605
- Child:
- 5:ffa498d7071f
--- a/main.cpp Mon Mar 21 11:36:51 2016 +0000 +++ b/main.cpp Thu Mar 24 11:46:35 2016 +0000 @@ -1,17 +1,30 @@ +//Fadia + #include "mbed.h" #include "N5110.h" #include "stdlib.h" #include "main.h" - N5110 lcd(PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); Serial pc(USBTX,USBRX); +#define DIRECTION_TOLERANCE 0.05 Ticker ticker; Ticker game_ticker; Timeout timeout; +enum DirectionName { + UP, + DOWN, + LEFT, + RIGHT, + CENTRE, + UP_LEFT, + UP_RIGHT, + DOWN_LEFT, + DOWN_RIGHT +}; typedef struct JoyStick Joystick; struct JoyStick { @@ -25,19 +38,13 @@ // create struct variable Joystick joystick; -// error function hangs flashing an LED - int main() { - - lcd.init(); init_K64F(); init_serial(); - sw2.fall(&sw2_isr); button.rise(&button_isr); - sw3.fall(&sw3_isr); init_game(); calibrateJoystick(); @@ -54,9 +61,6 @@ hero(); enemies(); obstacles(); - count++; - //heroX++; - //heroY--; if (heroY < -45) { heroY = 0; @@ -66,17 +70,16 @@ if (reset < level) { reset = level; - count = 0; rectX = rand() % 84; rectY = 0; circleX = 0; circleY = rand() % 47; } - for (int i=0; i<84; i++) { + /*for (int i=0; i<84; i++) { for (int j=0; j<48; j++) { // loop through the cells on the grid - int n = intersection(i,j); + bool n = intersection(i,j); if ( n > 0) { @@ -85,7 +88,7 @@ break; } } - } + }*/ pc.printf("x = %f y = %f button = %d ",joystick.x,joystick.y,joystick.button); @@ -107,7 +110,7 @@ if (joystick.direction == DOWN_RIGHT) pc.printf(" DOWN - RIGHT\n"); if (joystick.direction == DOWN_LEFT) - pc.printf(" DOWN - LEFT\n"); + pc.printf(" DOWN - LEFT\n"); } updateJoystick(); //callibrateJoystick(); @@ -144,39 +147,33 @@ void game_timer_isr() { - g_game_timer_flag = 1; } void sw2_isr() { - g_sw2_flag = 1; } -void sw3_isr() { - +void sw3_isr() +{ g_sw3_flag = 1; } void button_isr() { - g_button_flag =1; } void timeout_isr() { - if (button) { - - pc.printf("button is pressed!!!"); + pc.printf("button is pressed! \n"); } } void enemyRect() { - lcd.drawRect(rectX,rectY,5,4,1); rectX = rectX + rand()%4 - 2; //rectY = rand()%4-2; @@ -188,11 +185,13 @@ { heroX = heroX + 5*xPot; heroY = heroY - 5*yPot; - + if (heroX > 35) { heroX = 35; - } - + } + if (heroX < 5) { + heroX = 5; + } lcd.drawLine(40+heroX, 47+heroY, 48+heroX, 43+heroY,1); lcd.drawLine(40+heroX, 43+heroY,48+heroX, 47+heroY,1); lcd.drawLine(44+heroX, 45+heroY,44+heroX, 41+heroY,1); @@ -201,31 +200,32 @@ void enemyCircle() { - if (count > 10) { - lcd.drawCircle(circleX,circleY,4,1); - circleY = circleY + rand() %4 - 2; + lcd.drawCircle(circleX,circleY,4,1); + circleY = circleY + rand() %4 - 2; - circleX++; - } + circleX++; } void init_game() { - button.mode(PullNone); - + //button.mode(PullNone); srand(time(NULL)); rectY = 0; - rectX = rand() %84 + 1; - circleY = rand() %48 + 1; + rectX = rand() %40 + 20; + circleY = rand() %20 + 10; circleX = 0; - lcd.setBrightness(0.5); // put LED backlight on 50% - timeout.attach(&timeout_isr,2); - lcd.printString("Welcome to",11,1); - lcd.printString("Treasure Hunt!",1,3); - lcd.refresh(); - sleep(); - lcd.clear(); - game_ticker.attach(game_timer_isr,0.5); + + if ( play == 0) { + + lcd.setBrightness(0.5); // put LED backlight on 50% + timeout.attach(&timeout_isr,2); + lcd.printString("Welcome to",11,1); + lcd.printString("Treasure Hunt!",1,3); + lcd.refresh(); + sleep(); + lcd.clear(); + } + game_ticker.attach(game_timer_isr,0.2); while (1) { @@ -242,36 +242,41 @@ lcd.printString("Start Game <",0,0); lcd.printString("Settings",0,2); lcd.printString("Exit",0,4); - } else if (option == 1) { + } + else if (option == 1) { lcd.printString("Start Game",0,0); lcd.printString("Settings <",0,2); lcd.printString("Exit",0,4); - } else { + } + else { lcd.printString("Start Game",0,0); lcd.printString("Settings",0,2); lcd.printString("Exit <",0,4); } } - if (g_sw2_flag) { + if (g_button_flag) { + + g_button_flag = 0; - g_sw2_flag = 0; if (option == 0) { - game_ticker.detach(); - break; - } else if (option == 1) { - + game_ticker.detach(); + break; + } + else if (option == 1) { + //settings_menu(); pc.printf("Modify Settings!"); - } else { - + } + else { + lcd.turnOff(); deepsleep(); } - } - sleep(); + } + sleep(); } } void guidance() @@ -284,20 +289,28 @@ lcd.drawLine(42,0,44,2,1); } else if (level == 7) { - lcd.drawLine(42,0,42,6,1); - lcd.drawLine(40,3,44,3,1); - lcd.drawLine(40,0,44,6,1); - lcd.drawLine(40,6,44,0,1); + lcd.printString("F",42,0); } else if (level == 8) { ticker.detach(); lcd.clear(); lcd.printString("Well done!",0,0); lcd.refresh(); - wait(2); + timeout.attach(&timeout_isr,2); + sleep(); lcd.clear(); - lcd.printString("Play again",0,0); + lcd.printString("Play again <",0,0); lcd.refresh(); + sleep(); + + if (g_button_flag) { + + g_button_flag = 0; + level = 0; + play++; + lcd.clear(); + main(); + } } } @@ -334,35 +347,43 @@ lcd.drawRect(54,15 + rand() %4 - 2,2,2,1); lcd.drawRect(30,28 + rand() %4 - 2,2,2,1); lcd.drawRect(54 + rand() %4 - 2,28,2,2,1); - }else if ( level == 5) { - + } else if ( level == 5) { + lcd.drawLine(50,35,65,35,1); lcd.drawLine(38,30,28,30,1); lcd.drawLine(60,25,70,25,1); lcd.drawLine(28,25,18,25,1); lcd.drawLine(70,20,80,20,1); lcd.drawLine(18,20,8,20,1); - + } else if (level == 6) { + + } else if (level == 7) { + + /* + lcd.drawLine(50,15,30,15,1); + lcd.drawLine(30,15,30,35,1); + lcd.drawLine(30,25,45,25,1); + */ } } -void enemies() { - +void enemies() +{ + if (level == 0) { - enemyRect(); - enemyCircle(); - } else if (level == 1) { + enemyRect(); + //enemyCircle(); + } else if (level == 1) { - enemyRect(); - enemyCircle(); - enemyRect(); - } else if (level == 2) { + enemyRect(); + //enemyCircle(); + } else if (level == 2) { - } else if (level == 3) { + } else if (level == 3) { - } - + } + enemyCircle(); } void calibrateJoystick() { @@ -414,37 +435,36 @@ return option; } -int intersection (int i, int j) { +bool intersection (int i, int j) +{ - int n=0; // set n (number of neigbours) as 0 + bool n=0; // set n (number of neigbours) as 0 - if (lcd.getPixel(i-1,j-1)!=0) //pixel to the top-left - n++; // increase n by 1 - if (lcd.getPixel(i-1,j)!=0) //pixel to the left - n++; // increase n by 1 - if (lcd.getPixel(i-1,j+1)!=0) //pixel to the bottom-left - n++; // increase n by 1 - if (lcd.getPixel(i,j-1)!=0) // pixel to the top - n++; // increase n by 1 - if (lcd.getPixel(i,j+1)!=0) //pixel to the bottom - n++; // increase n by 1 - if (lcd.getPixel(i+1,j-1)!=0) //pixel to the top-right - n++; // increase n by 1 - if (lcd.getPixel(i+1,j)!=0) // pixel to the right - n++; // increase n by 1 - if (lcd.getPixel(i+1,j+1)!=0) //pixel to the bottom right - n++; // increase n by 1 - + if (lcd.getPixel(i-1,j-1)) //pixel to the top-left + n = 1; // increase n by 1 + if (lcd.getPixel(i-1,j)) //pixel to the left + n = 1; // increase n by 1 + if (lcd.getPixel(i-1,j+1)) //pixel to the bottom-left + n = 1; // increase n by 1 + if (lcd.getPixel(i,j-1)) // pixel to the top + n = 1; // increase n by 1 + if (lcd.getPixel(i,j+1)) //pixel to the bottom + n = 1; // increase n by 1 + if (lcd.getPixel(i+1,j-1)) //pixel to the top-right + n = 1; // increase n by 1 + if (lcd.getPixel(i+1,j)) // pixel to the right + n = 1; // increase n by 1 + if (lcd.getPixel(i+1,j+1)) //pixel to the bottom right + n = 1; // increase n by 1 + //pc.printf("Number of neighbours = %d \n",n); return n; } void error() { - while (1) { - + lcd.printString("Error!",0,0); - r_led = 0; wait(0.2); r_led = 1;