Final Submission. I have read and agreed with Statement of Academic Integrity.

Dependencies:   mbed Gamepad N5110 Joystick

Committer:
el16dlc
Date:
Thu May 09 11:36:21 2019 +0000
Revision:
9:a7ea33e6bd82
Parent:
8:264398d3c610
Child:
10:aedca0082855
10

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el16dlc 1:b9f3b7d869d8 1 /*
el16dlc 1:b9f3b7d869d8 2 ELEC2645 Embedded Systems Project
el16dlc 1:b9f3b7d869d8 3 School of Electronic & Electrical Engineering
el16dlc 1:b9f3b7d869d8 4 University of Leeds
el16dlc 1:b9f3b7d869d8 5
el16dlc 1:b9f3b7d869d8 6 Name: DANIEL CROCKFORD
el16dlc 1:b9f3b7d869d8 7 Username: el16dlc
el16dlc 1:b9f3b7d869d8 8 Student ID Number: 201039580
el16dlc 1:b9f3b7d869d8 9 Date: 07/05/2019
el16dlc 1:b9f3b7d869d8 10 */
el16dlc 1:b9f3b7d869d8 11
el16dlc 1:b9f3b7d869d8 12
el16dlc 1:b9f3b7d869d8 13 #include "main.h"
el16dlc 1:b9f3b7d869d8 14 #include "Snake.h"
el16dlc 1:b9f3b7d869d8 15 #include "Game_engine.h"
el16dlc 1:b9f3b7d869d8 16
el16dlc 1:b9f3b7d869d8 17 // Gamepad Peripherals
el16dlc 1:b9f3b7d869d8 18 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
el16dlc 1:b9f3b7d869d8 19
el16dlc 1:b9f3b7d869d8 20 Gamepad gamepad;
el16dlc 1:b9f3b7d869d8 21
el16dlc 1:b9f3b7d869d8 22 // Instances
el16dlc 1:b9f3b7d869d8 23 GameEngine engine;
el16dlc 1:b9f3b7d869d8 24
el16dlc 5:23a85b16ee54 25 bool game_cont = false;
el16dlc 8:264398d3c610 26 float speed = 0.0;
el16dlc 9:a7ea33e6bd82 27 int game_speed = 0;
el16dlc 9:a7ea33e6bd82 28 //int score = 0;
el16dlc 5:23a85b16ee54 29
el16dlc 3:660de4311976 30
el16dlc 1:b9f3b7d869d8 31 int main() {
el16dlc 1:b9f3b7d869d8 32 Init();
el16dlc 1:b9f3b7d869d8 33 Welcome();
el16dlc 8:264398d3c610 34 while(1) {
el16dlc 8:264398d3c610 35 engine.direction_reset();
el16dlc 8:264398d3c610 36 Menu();
el16dlc 8:264398d3c610 37 engine.init();
el16dlc 1:b9f3b7d869d8 38
el16dlc 8:264398d3c610 39 while(engine.get_game_cont() == true) {
el16dlc 8:264398d3c610 40 render();
el16dlc 8:264398d3c610 41 update();
el16dlc 8:264398d3c610 42 }
el16dlc 9:a7ea33e6bd82 43 game_over();
el16dlc 1:b9f3b7d869d8 44 }
el16dlc 1:b9f3b7d869d8 45 }
el16dlc 1:b9f3b7d869d8 46
el16dlc 1:b9f3b7d869d8 47
el16dlc 1:b9f3b7d869d8 48 // Initialise gamepad
el16dlc 1:b9f3b7d869d8 49 void Init() {
el16dlc 1:b9f3b7d869d8 50 lcd.init();
el16dlc 1:b9f3b7d869d8 51 gamepad.init();
el16dlc 1:b9f3b7d869d8 52 lcd.setContrast(0.5);
el16dlc 1:b9f3b7d869d8 53 lcd.setBrightness(0.5);
el16dlc 1:b9f3b7d869d8 54 gamepad.leds_off();
el16dlc 1:b9f3b7d869d8 55 gamepad.check_event(Gamepad::A_PRESSED);
el16dlc 1:b9f3b7d869d8 56 gamepad.check_event(Gamepad::B_PRESSED);
el16dlc 1:b9f3b7d869d8 57 gamepad.check_event(Gamepad::X_PRESSED);
el16dlc 1:b9f3b7d869d8 58 gamepad.check_event(Gamepad::Y_PRESSED);
el16dlc 1:b9f3b7d869d8 59 gamepad.check_event(Gamepad::L_PRESSED);
el16dlc 1:b9f3b7d869d8 60 gamepad.check_event(Gamepad::R_PRESSED);
el16dlc 1:b9f3b7d869d8 61 gamepad.check_event(Gamepad::BACK_PRESSED);
el16dlc 5:23a85b16ee54 62 gamepad.check_event(Gamepad::START_PRESSED);
el16dlc 1:b9f3b7d869d8 63 }
el16dlc 1:b9f3b7d869d8 64
el16dlc 1:b9f3b7d869d8 65 // Prototype welcome screen
el16dlc 1:b9f3b7d869d8 66 void Welcome() {
el16dlc 1:b9f3b7d869d8 67 lcd.clear();
el16dlc 9:a7ea33e6bd82 68 lcd.printString("ELEC2645",0,0);
el16dlc 9:a7ea33e6bd82 69 lcd.printString("PROJECT",0,1);
el16dlc 9:a7ea33e6bd82 70 lcd.printString("201039580",0,2);
el16dlc 1:b9f3b7d869d8 71 lcd.refresh();
el16dlc 1:b9f3b7d869d8 72 wait(2.0);
el16dlc 1:b9f3b7d869d8 73 }
el16dlc 1:b9f3b7d869d8 74
el16dlc 8:264398d3c610 75 // Protoype menu
el16dlc 8:264398d3c610 76 void Menu() {
el16dlc 8:264398d3c610 77 //engine.get_dir(gamepad);
el16dlc 9:a7ea33e6bd82 78 game_speed = 0;
el16dlc 8:264398d3c610 79 lcd.clear();
el16dlc 8:264398d3c610 80 lcd.printString("Select speed",0,0);
el16dlc 8:264398d3c610 81 lcd.printString("Slowest: X",0,2);
el16dlc 8:264398d3c610 82 lcd.printString("Fastest: B",0,3);
el16dlc 8:264398d3c610 83 lcd.refresh();
el16dlc 8:264398d3c610 84
el16dlc 8:264398d3c610 85 while(game_speed == 0) {
el16dlc 8:264398d3c610 86 engine.get_dir(gamepad);
el16dlc 8:264398d3c610 87 if (engine.get_direction() == 2) {
el16dlc 8:264398d3c610 88 game_speed = 1;
el16dlc 8:264398d3c610 89 } else if (engine.get_direction() == 3) {
el16dlc 8:264398d3c610 90 game_speed = 2;
el16dlc 8:264398d3c610 91 }
el16dlc 8:264398d3c610 92 }
el16dlc 8:264398d3c610 93
el16dlc 8:264398d3c610 94 if (game_speed == 1) {
el16dlc 8:264398d3c610 95 speed = 0.5;
el16dlc 8:264398d3c610 96 } else if (game_speed == 2) {
el16dlc 8:264398d3c610 97 speed = 0.2;
el16dlc 8:264398d3c610 98 }
el16dlc 8:264398d3c610 99 }
el16dlc 8:264398d3c610 100
el16dlc 1:b9f3b7d869d8 101 // Draws each frame on screen
el16dlc 1:b9f3b7d869d8 102 void render() {
el16dlc 1:b9f3b7d869d8 103 lcd.clear();
el16dlc 2:0bd6711eae26 104 engine.draw(lcd);
el16dlc 1:b9f3b7d869d8 105 lcd.refresh();
el16dlc 4:0fc3441556e1 106 }
el16dlc 4:0fc3441556e1 107 void update() {
el16dlc 5:23a85b16ee54 108 engine.check_wall_collision();
el16dlc 5:23a85b16ee54 109 engine.check_snake_collision();
el16dlc 4:0fc3441556e1 110 engine.get_dir(gamepad);
el16dlc 4:0fc3441556e1 111 engine.snake_move();
el16dlc 4:0fc3441556e1 112 engine.food_move();
el16dlc 4:0fc3441556e1 113 engine.snake_body(lcd);
el16dlc 4:0fc3441556e1 114 lcd.refresh();
el16dlc 8:264398d3c610 115 wait(speed);
el16dlc 9:a7ea33e6bd82 116 }
el16dlc 9:a7ea33e6bd82 117
el16dlc 9:a7ea33e6bd82 118 void game_over() {
el16dlc 9:a7ea33e6bd82 119 int score = engine.get_score();
el16dlc 9:a7ea33e6bd82 120 score = score * game_speed;
el16dlc 9:a7ea33e6bd82 121 lcd.clear();
el16dlc 9:a7ea33e6bd82 122 lcd.printString("Your score is:",0,0);
el16dlc 9:a7ea33e6bd82 123 char buffer[14];
el16dlc 9:a7ea33e6bd82 124 sprintf(buffer,"%2d",score);
el16dlc 9:a7ea33e6bd82 125 lcd.printString(buffer,0,1);
el16dlc 9:a7ea33e6bd82 126 lcd.refresh();
el16dlc 9:a7ea33e6bd82 127 wait(2.0);
el16dlc 1:b9f3b7d869d8 128 }