ELEC2645 (2019/20)
/
ELEC2645_Project_el17oc1
Owen Cavender 201159294
main.cpp@17:eddcd4d21fd7, 2020-05-30 (annotated)
- Committer:
- el17oc
- Date:
- Sat May 30 20:20:10 2020 +0000
- Revision:
- 17:eddcd4d21fd7
- Parent:
- 16:9500059ad5d8
Final Submission. I have read and agreed with Statement of Academic Integrity
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el17oc | 1:897160a1a3ae | 1 | /* |
eencae | 0:b7f1f47bb26a | 2 | ELEC2645 Embedded Systems Project |
el17oc | 6:bf90044188d0 | 3 | School of Electronic & Electrical appleering |
eencae | 0:b7f1f47bb26a | 4 | University of Leeds |
eencae | 0:b7f1f47bb26a | 5 | 2019/20 |
eencae | 0:b7f1f47bb26a | 6 | |
el17oc | 16:9500059ad5d8 | 7 | /////////////SNAKE /////////// |
el17oc | 1:897160a1a3ae | 8 | Name: Owen Cavender |
el17oc | 1:897160a1a3ae | 9 | Username: el17oc |
el17oc | 1:897160a1a3ae | 10 | Student ID Number: 201159294 |
el17oc | 1:897160a1a3ae | 11 | Date: 20/04/2020 |
eencae | 0:b7f1f47bb26a | 12 | */ |
eencae | 0:b7f1f47bb26a | 13 | |
el17oc | 16:9500059ad5d8 | 14 | ////////////////////////////// |
el17oc | 16:9500059ad5d8 | 15 | |
el17oc | 16:9500059ad5d8 | 16 | //includes |
el17oc | 16:9500059ad5d8 | 17 | #include "mbed.h" //addresses each header file of external classes being used in the programme |
eencae | 0:b7f1f47bb26a | 18 | #include "Gamepad.h" |
eencae | 0:b7f1f47bb26a | 19 | #include "N5110.h" |
el17oc | 1:897160a1a3ae | 20 | #include "snake.h" |
el17oc | 8:997f90c88246 | 21 | #include "GameEngine.h" |
el17oc | 8:997f90c88246 | 22 | |
el17oc | 1:897160a1a3ae | 23 | |
el17oc | 1:897160a1a3ae | 24 | //objects |
el17oc | 1:897160a1a3ae | 25 | Gamepad pad; |
el17oc | 1:897160a1a3ae | 26 | Snake snake; |
el17oc | 1:897160a1a3ae | 27 | N5110 lcd; |
el17oc | 8:997f90c88246 | 28 | GameEngine engine; |
el17oc | 14:7fb3c93343b6 | 29 | |
el17oc | 1:897160a1a3ae | 30 | //functions |
el17oc | 1:897160a1a3ae | 31 | void welcome(); |
el17oc | 1:897160a1a3ae | 32 | void render(); |
el17oc | 1:897160a1a3ae | 33 | void init(); |
el17oc | 14:7fb3c93343b6 | 34 | void update_snake(); |
el17oc | 12:60c856354406 | 35 | |
el17oc | 1:897160a1a3ae | 36 | |
el17oc | 6:bf90044188d0 | 37 | //Serial pc(USBTX, USBRX); |
el17oc | 6:bf90044188d0 | 38 | |
el17oc | 6:bf90044188d0 | 39 | int main() |
el17oc | 1:897160a1a3ae | 40 | { |
el17oc | 10:ee781d18e0f6 | 41 | |
el17oc | 16:9500059ad5d8 | 42 | init(); //initialises game objects |
el17oc | 16:9500059ad5d8 | 43 | welcome(); //displays welcome screen before entering game loop |
el17oc | 14:7fb3c93343b6 | 44 | |
el17oc | 16:9500059ad5d8 | 45 | |
el17oc | 12:60c856354406 | 46 | |
el17oc | 1:897160a1a3ae | 47 | while (1) { |
el17oc | 12:60c856354406 | 48 | |
el17oc | 12:60c856354406 | 49 | |
el17oc | 16:9500059ad5d8 | 50 | update_snake(); //reads input from gamepad and updates the position of the snake - this is the function influences how the other functions behave |
el17oc | 16:9500059ad5d8 | 51 | snake.check_gameover(lcd); //checking if any one of the three game over conditions is true |
el17oc | 16:9500059ad5d8 | 52 | // snake.gameover_true(lcd, pad); //checking if an apple has been collected - increases the score and generates new apple position if apple has been collected |
el17oc | 12:60c856354406 | 53 | snake.apple_collected(lcd, pad); |
el17oc | 12:60c856354406 | 54 | snake.get_Apple_position(lcd); |
el17oc | 16:9500059ad5d8 | 55 | engine.get_LEDs(pad, snake); |
el17oc | 14:7fb3c93343b6 | 56 | |
el17oc | 16:9500059ad5d8 | 57 | engine.print_countdown(lcd, snake); //prints the value of the countdown counter - it will have incremented by 25 if an apple has been collected and would have decreased by 1 if not |
el17oc | 16:9500059ad5d8 | 58 | snake.render(lcd, pad); //prints the snake, the apple, the score and the border |
el17oc | 14:7fb3c93343b6 | 59 | // snake.print_display_time(lcd); |
el17oc | 6:bf90044188d0 | 60 | |
el17oc | 6:bf90044188d0 | 61 | |
el17oc | 14:7fb3c93343b6 | 62 | wait(0.01); |
el17oc | 1:897160a1a3ae | 63 | } |
el17oc | 1:897160a1a3ae | 64 | |
el17oc | 1:897160a1a3ae | 65 | } |
el17oc | 1:897160a1a3ae | 66 | |
el17oc | 1:897160a1a3ae | 67 | void init() |
el17oc | 1:897160a1a3ae | 68 | { |
el17oc | 16:9500059ad5d8 | 69 | lcd.init(); //initialises the lcd |
el17oc | 16:9500059ad5d8 | 70 | pad.init(); //initialises the gamepad |
el17oc | 16:9500059ad5d8 | 71 | snake.init(); //initialises snake class |
el17oc | 14:7fb3c93343b6 | 72 | |
el17oc | 14:7fb3c93343b6 | 73 | |
eencae | 0:b7f1f47bb26a | 74 | } |
eencae | 0:b7f1f47bb26a | 75 | |
el17oc | 14:7fb3c93343b6 | 76 | void update_snake() |
el17oc | 12:60c856354406 | 77 | { |
el17oc | 14:7fb3c93343b6 | 78 | snake.get_direction(pad); //sets the direction based on buttons pressed on the Gamepad |
el17oc | 14:7fb3c93343b6 | 79 | snake.render_clear_tail(lcd); //clears the trailing pixel of the snake before updating position to avoid the snake growing with each move - the trailing pixel would be locked and fixed as 1 in its initial position without this |
el17oc | 12:60c856354406 | 80 | // =needs to be cleared before _x3, _y3 is updated |
el17oc | 14:7fb3c93343b6 | 81 | snake.move_snake(); //alters the coordinate of each snake bit in accordance with the Gamepad instruction |
el17oc | 14:7fb3c93343b6 | 82 | engine.get_LEDs(pad, snake); //Turns on on LEDS based on where the snake is in the box |
el17oc | 12:60c856354406 | 83 | } |
el17oc | 6:bf90044188d0 | 84 | |
el17oc | 1:897160a1a3ae | 85 | void welcome() |
el17oc | 1:897160a1a3ae | 86 | { |
el17oc | 14:7fb3c93343b6 | 87 | |
el17oc | 1:897160a1a3ae | 88 | |
el17oc | 16:9500059ad5d8 | 89 | while ( pad.start_pressed() == false) { //main menu - wont enter game loop until start is pressed |
el17oc | 16:9500059ad5d8 | 90 | lcd.printString(" SNAKE ",0,1); // |
el17oc | 16:9500059ad5d8 | 91 | lcd.printString("COLLECT APPLES",0,3); //game task |
el17oc | 16:9500059ad5d8 | 92 | lcd.printString(" Press Start ",0,5); //instruction |
el17oc | 16:9500059ad5d8 | 93 | lcd.setContrast( pad.read_pot1()); //adjust contrast |
el17oc | 1:897160a1a3ae | 94 | |
el17oc | 1:897160a1a3ae | 95 | |
el17oc | 14:7fb3c93343b6 | 96 | pad.leds_off(); |
el17oc | 14:7fb3c93343b6 | 97 | pad.led(1,1); |
el17oc | 14:7fb3c93343b6 | 98 | wait(0.2); |
el17oc | 14:7fb3c93343b6 | 99 | pad.led(1,0); //turning on the LEDS in a sequence which reflects the snakes movement |
el17oc | 14:7fb3c93343b6 | 100 | pad.led(2,1); |
el17oc | 14:7fb3c93343b6 | 101 | wait (0.2); |
el17oc | 14:7fb3c93343b6 | 102 | pad.led(2,0); |
el17oc | 14:7fb3c93343b6 | 103 | pad.led(3,1); |
el17oc | 14:7fb3c93343b6 | 104 | wait(0.2); |
el17oc | 14:7fb3c93343b6 | 105 | pad.led(3,0); |
el17oc | 14:7fb3c93343b6 | 106 | wait(0.1); |
el17oc | 14:7fb3c93343b6 | 107 | pad.led(6,1); |
el17oc | 14:7fb3c93343b6 | 108 | wait (0.2); |
el17oc | 14:7fb3c93343b6 | 109 | pad.led(6,0); |
el17oc | 14:7fb3c93343b6 | 110 | pad.led(5,1); |
el17oc | 14:7fb3c93343b6 | 111 | wait (0.2); |
el17oc | 14:7fb3c93343b6 | 112 | pad.led(5,0); |
el17oc | 14:7fb3c93343b6 | 113 | pad.led(4,1); |
el17oc | 14:7fb3c93343b6 | 114 | wait(0.2); |
el17oc | 14:7fb3c93343b6 | 115 | |
el17oc | 16:9500059ad5d8 | 116 | lcd.refresh(); //updates screen |
el17oc | 14:7fb3c93343b6 | 117 | } |
el17oc | 12:60c856354406 | 118 | |
el17oc | 1:897160a1a3ae | 119 | } |
el17oc | 1:897160a1a3ae | 120 |