My ELEC2645 project. Nikollao Sulollari. 200804685
Dependencies: N5110 SoftPWM mbed
Diff: main.h
- Revision:
- 18:5405ee7e243b
- Parent:
- 17:2d424db3975f
- Child:
- 19:70d40dac5ae0
--- a/main.h Mon May 02 11:02:36 2016 +0000 +++ b/main.h Mon May 02 12:01:55 2016 +0000 @@ -327,674 +327,4 @@ bool sound = 0; /*!< determines if sound is on or off */ -void enemies() -{ /// generate enemies in the screen depending on the level difficulty - if (level == 0) { - - enemyRect(); - //enemyCircle(); - } else if (level == 1) { - - enemyRect(); - //enemyCircle(); - } else if (level == 2) { - - } else if (level == 3) { - - } - enemyCircle(); - enemyRect(); -} - -void enemyRect() -{ ///generate rect shape enemy - lcd.drawRect(rectX,rectY,5,4,1); - rectX = rectX + rand()%4 - 2; - rectY++; ///enemy moving towards hero - if (rectY == 50){ - rectY = 0; - } - if (rectX == 75 || rectX == 25) { - rectX = 40+rand()%10 - 5; - } -} - -void hero() -{///cotrol hero - if (joystick.direction == RIGHT) { - heroX--; - } - else if (joystick.direction == LEFT){ - heroX++; - } else { - heroX = heroX; - } - - if (joystick.direction == UP) { - heroY--; - } - else if (joystick.direction == DOWN) { - heroY++; - } else { - heroY = heroY; - } - - if (joystick.direction == UP_LEFT) { - heroY--; - heroX++; - } - else if (joystick.direction == UP_RIGHT) { - heroY--; - heroX--; - } - else if (joystick.direction == DOWN_RIGHT) { - heroY++; - heroX--; - } - else if (joystick.direction == DOWN_LEFT) { - heroY++; - heroX++; - } - - ///set x-axis boundaries so hero does not go out of screen - if (heroX > 40) { - heroX = -40; - } - if (heroX < -45) { - heroX = 35; - } - if (heroY < -45) { ///if hero has reached the top of the screen - heroY = 0; ///hero goes back to the bottom of the screen - level++; ///level increases by 1 - } - - if (heroY >= 0) {/// hero cannot go to previous level - heroY = 0; - } - ///draw hero - 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); - lcd.drawCircle(44+heroX, 39+heroY,2,0); -} - -void enemyCircle() -{///generate circle shape enemy - lcd.drawCircle(circleX,circleY,4,1); - circleY = circleY + rand() %4 - 2; - - if (circleY <= 10) { - circleY = 20; - }if (circleY >= 35) { - circleY = 35; - } - if (circleX > 84) { - circleX = 0; - } - circleX++; ///enemy moving towards hero -} - -void init_game() -{ - ///initialise game - srand(time(NULL)); /// generate random numbers - rectY = 0; /// init rectX, rectY - rectX = rand() %40 + 20; - circleY = rand() %20 + 10; /// init circleX, circleY - circleX = 0; - - lcd.setBrightness(0.5); // put LED backlight on 50% - lcd.printString("Welcome to",11,1); - lcd.printString("Treasure Hunt!",1,3); - lcd.refresh(); - //timeout.attach(&timeout_isr,3); - //sleep(); - wait(3); - lcd.clear(); - -} -void guidance() -{ /// show arrow to act as guidance towards the treasure - if (level < 7) { ///check level of difficulty - - lcd.drawLine(42,0,42,4,1); - lcd.drawLine(42,0,40,2,1); - lcd.drawLine(42,0,44,2,1); - } - else if (level == 7) { - - lcd.printString("F",42,0); /// print the treasure icon - } - else if (level == 8) { - - ticker.detach(); - lcd.clear(); - lcd.printString("Well done!",0,0); - lcd.refresh(); - wait(2); - lcd.clear(); - lcd.printString("Play again",0,0); - lcd.drawCircle(70,4,2,1); - lcd.refresh(); - g_button_flag = 0; - - while(1) { - if (g_button_flag) { - - g_button_flag = 0; - level = 0; - // play++; - lcd.clear(); - main(); - r_led = 0; - lcd.refresh(); - } - sleep(); - } - } -} - -void obstacles() -{ - /// place obstacles in the screen - /// as level difficulty increases, more obstacles are added - if (level == 1) { - - lcd.drawRect(10,15,2,2,1); - lcd.drawRect(74,15,2,2,1); - } else if (level == 2) { - - lcd.drawRect(10,15,2,2,1); - lcd.drawRect(74,15,2,2,1); - lcd.drawRect(10,28,2,2,1); - lcd.drawRect(74,28,2,2,1); - } else if (level == 3) { - - lcd.drawRect(5,12,2,2,1); - lcd.drawRect(79,12,2,2,1); - lcd.drawRect(5,30,2,2,1); - lcd.drawRect(79,30,2,2,1); - lcd.drawRect(28,12,2,2,1); - lcd.drawRect(52,12,2,2,1); - lcd.drawRect(28,30,2,2,1); - lcd.drawRect(52,30,2,2,1); - } else if (level == 4) { - - lcd.drawRect(5 ,12+ rand() %4 - 2,2,2,1); - lcd.drawRect(79 + rand() %4 - 2,12 + rand() %4 - 2,2,2,1); - lcd.drawRect(5+ rand() %4 - 2,30 ,2,2,1); - lcd.drawRect(79 + rand() %4 - 2,30,2,2,1); - lcd.drawRect(28 + rand() %4 - 2,12+ rand() %4,2,2,1); - lcd.drawRect(52,12 + rand() %4 - 2,2,2,1); - lcd.drawRect(28,30 + rand() %4 - 2,2,2,1); - lcd.drawRect(52 + rand() %4 - 2,30,2,2,1); - } - if (objectX == 0) { ///check position of obstacle - state = 0; ///assign states to the position of the obstacle - } - else if (objectX == 60) { - state = 1; - } else { - state = state; - } - if (state == 0) { ///if state is 0 increase position on x-axis - objectX++; - } else { - objectX--; ///else if state is 1 decrease position on x-axis - } - - if (objectX1 == 68) { - - state1 = 1; - } - else if (objectX1 == 10) { - state1 = 0; - } - if (state1 == 1) { - objectX1--; - } else if (state1 == 0) { - objectX1++; - } - objectY = objectY + rand() %4 - 2; ///set poistion of obstacle on y-axis to be valuable - ///keep moving object within boundaries - if (objectY <= 10) { - objectY = 10; - } - if (objectY >= 37) { - objectY = 37; - } - if ( level == 5) { - - lcd.drawLine(15,10,15,37,1); - lcd.drawLine(71,10,71,37,1); - - lcd.drawRect(11+objectX,objectY,2,2,1); ///draw obstacle - - lcd.drawRect(80,10,2,2,1); - lcd.drawRect(5,10,2,2,1); - lcd.drawRect(80,20,2,2,1); - lcd.drawRect(5,20,2,2,1); - lcd.drawRect(80,30,2,2,1); - lcd.drawRect(5,30,2,2,1); - - } - else if (level == 6) { - - lcd.drawLine(15,10,15,37,1); ///draw boundaries - lcd.drawLine(71,10,71,37,1); - - lcd.drawRect(11+objectX,objectY,2,2,1); /// draw moving obstacles on screen - lcd.drawRect(objectX1,10+objectY,2,2,1); - lcd.drawRect(80,10,2,2,1); ///draw stable obstacles - lcd.drawRect(5,10,2,2,1); - lcd.drawRect(80,20,2,2,1); - lcd.drawRect(5,20,2,2,1); - lcd.drawRect(80,30,2,2,1); - lcd.drawRect(5,30,2,2,1); - } - 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 calibrateJoystick() -{ - // must not move during calibration - joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly) - joystick.y0 = yPot; -} -void updateJoystick() -{ - // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred) - joystick.x = xPot - joystick.x0; - joystick.y = yPot - joystick.y0; - // read button state - joystick.button = button; - - // calculate direction depending on x,y values - // tolerance allows a little lee-way in case joystick not exactly in the stated direction - if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { - joystick.direction = CENTRE; - } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { - joystick.direction = UP; - } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { - joystick.direction = DOWN; - } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { - joystick.direction = RIGHT; - } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { - joystick.direction = LEFT; - } else if (joystick.y > DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) { - joystick.direction = UP_LEFT; - } else if (joystick.y > DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) { - joystick.direction = UP_RIGHT; - } else if (joystick.y < DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) { - joystick.direction = DOWN_LEFT; - } else if (joystick.y < DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) { - joystick.direction = DOWN_RIGHT; - } -} - -int menu() -{ - while(1) { - if (g_game_timer_flag) { - g_game_timer_flag = 0; - - updateJoystick(); - lcd.clear(); - - lcd.printString("Start Game",0,0); ///print the main - lcd.printString("Settings",0,2); - lcd.printString("Exit",0,4); - //lcd.drawCircle(70,4,2,1); - - switch (joystick.direction) { ///check the direction of joystick - case UP: - option--; - break; - case DOWN: - option++; - break; - } - if (option < 0) { - option = 2; - } - if (option > 2) { - option = 0; - } - - if (option == 0) { ///selection in menu depends on the value of int option - lcd.drawCircle(70,4,2,1); - } else if (option == 1) { - lcd.drawCircle(55,20,2,1); - } else if (option == 2) { - lcd.drawCircle(35,35,2,1); - } - - if(g_button_flag) { /// if button is pressed - - g_button_flag = 0; ///reset flag - - if (option == 0) { ///break the while loop, start game - break; - } - - else if (option == 1) { ///enter settings menu - - option = 0; - - while(1) { - if (g_game_timer_flag) { - g_game_timer_flag = 0; - - updateJoystick(); ///update joystick position - lcd.clear(); - if (normal) { - if (sound) { - lcd.printString("Game speed",0,0); ///print settings menu - lcd.printString("Lcd:Inverse",0,1); - lcd.printString("Sound:ON",0,2); - lcd.printString("Back",0,3); - } else { - lcd.printString("Game speed",0,0); ///print settings menu - lcd.printString("Lcd:Inverse",0,1); - lcd.printString("Sound:OFF",0,2); - lcd.printString("Back",0,3); - } - } else { - if (sound) { - lcd.printString("Game speed",0,0); ///print settings menu - lcd.printString("Lcd: Normal",0,1); - lcd.printString("Sound: ON",0,2); - lcd.printString("Back",0,3); - } else { - lcd.printString("Game speed",0,0); ///print settings menu - lcd.printString("Lcd: Normal",0,1); - lcd.printString("Sound: OFF",0,2); - lcd.printString("Back",0,3); - } - } - switch (joystick.direction) { - case UP: - option--; - break; - case DOWN: - option++; - break; - case CENTRE: - option = option; - break; - } - if (option < 0) { ///if selector is on the top of the screen and UP is pressed, selector goes to the bottom - option = 3; - } - if (option > 3) { ///if selector is on the bottom of the screen and DOWN is pressed, selector goes to the top - option = 0; - } - - /// menu selection depends on the position of the Joystick - if (option == 0) { - lcd.drawCircle(70,4,2,1); - } else if (option == 1) { - lcd.drawCircle(70,12,2,1); - } else if (option == 2) { - lcd.drawCircle(70,20,2,1); - } else { - lcd.drawCircle(35,27,2,1); - } - if (g_button_flag) { ///if button is pressed - g_button_flag = 0; ///reset button - - if (option == 0) { /// if user selects to modify speed of the game - - while(1) { ///set speed of the game - - if (g_game_timer_flag) { - g_game_timer_flag = 0; - updateJoystick(); - lcd.clear(); - if (speed == 0) { - lcd.printString("Slow!",0,0); ///print game speed menu - lcd.printString("Normal",0,1); - lcd.printString("Fast",0,2); - lcd.printString("Back",0,3); - } else if (speed == 1) { - lcd.printString("Slow",0,0); ///print game speed menu - lcd.printString("Normal!",0,1); - lcd.printString("Fast",0,2); - lcd.printString("Back",0,3); - } else if (speed == 2) { - lcd.printString("Slow",0,0); ///print game speed menu - lcd.printString("Normal",0,1); - lcd.printString("Fast!",0,2); - lcd.printString("Back",0,3); - } - - switch (joystick.direction) { - case UP: - option--; - break; - case DOWN: - option++; - break; - case CENTRE: - option = option; - break; - } - if (option < 0) { - option = 3; - } - if (option > 3) { - option = 0; - } - - if (option == 0) { - lcd.drawCircle(70,4,2,1); - } else if (option == 1) { - lcd.drawCircle(55,12,2,1); - } else if (option == 2) { - lcd.drawCircle(35,20,2,1); - } else { - lcd.drawCircle(35,27,2,1); - } - - if (g_button_flag) { - g_button_flag = 0; - - if (option == 0) { - game_speed = 0.1; - speed = 0; - } else if (option == 1) { - game_speed = 0.05; - speed = 1; - } else if (option == 2) { - game_speed = 0.04; - speed = 2; - } else if (option == 3) { - break; - } - } - lcd.refresh(); - } - sleep(); - } - } else if (option == 1) { /// Lcd inverse mode - normal =! normal; - if (normal) { - lcd.inverseMode(); - } else { - lcd.normalMode(); - } - } else if (option == 2) { ///select sound or not - - sound =! sound; - - if (sound) - buzzer.write(0.5); - else - buzzer.write(0.0); - // buzzer.period(1/400); - } else if(option == 3) { ///go back to main menu - break; - } - } - lcd.refresh(); - } - sleep(); - } - } else if (option == 2) { ///turn off LED - lcd.clear(); - lcd.turnOff(); - while(1) { - deepsleep(); - } - } - } - lcd.refresh(); - } - sleep(); - } -} - -int intersection(int i, int j) -{ - /// check for overlap between enemies and hero - n=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 - return n; -} - -void checkOverlap() -{ - - for (int i=40+heroX; i<50+heroX; i++) { - for (int j=35+heroY; j<48+heroY; j++) { - - int check = intersection(i,j); - //lcd.setPixel(i,j); - char bit[50]; - sprintf(bit,"Pixels: %d",check); - - - for(int i = 40; i < 45; i++) { - for (int j = -5; i < 5; j++) { - - if (check > 6) { - check = 6; - } - } - } - if (check > 7) { - - tries--; - //if tries - - lcd.printString("BANG!",0,0); - lcd.refresh(); - wait(2); - lcd.clear(); - - if (tries == 2) { - - lcd.printString("Ready.",20,1); - lcd.refresh(); - wait(0.5); - lcd.printString("Ready..",20,1); - lcd.refresh(); - wait(0.5); - lcd.printString("Ready...",20,1); - lcd.refresh(); - wait(1); - lcd.printString("GO!",31,2); - lcd.refresh(); - wait(1); - lcd.clear(); - fsm_state = 1; ///2 lives left - } - else if (tries == 1) { - - lcd.clear(); - lcd.printString("Last Chance!",10,2); - lcd.refresh(); - wait(1); - fsm_state = 2; //1 life left - } - else if (tries == 0) { - - fsm_state = 3; - led_output=fsm[fsm_state]; - lcd.clear(); - lcd.printString("Game Over!",0,0); - lcd.refresh(); - wait(1); - - //ticker.detach(); - lcd.clear(); - lcd.printString("Play again",0,0); - lcd.drawCircle(70,4,2,1); - lcd.refresh(); - g_button_flag = 0; - - while(1) { - if (g_button_flag) { - - g_button_flag = 0; - level = 0; - fsm_state = 0; - led_output=fsm[fsm_state]; - lcd.clear(); - main(); - } - sleep(); - } - - } - heroX = 0; - heroY = 0; - rectY = 0; - circleX = 0; - led_output=fsm[fsm_state]; - } - - } - } -} - -void error() -{ - /// display error message - while (1) { - - lcd.printString("Error!",0,0); - r_led = 0; - wait(0.2); - r_led = 1; - wait(0.2); - } -} - -#endif - - +#endif \ No newline at end of file