Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp@1:ded7ddd826ce, 2019-03-11 (annotated)
- Committer:
- lewisgw
- Date:
- Mon Mar 11 20:27:12 2019 +0000
- Revision:
- 1:ded7ddd826ce
- Parent:
- 0:d74302f8f847
- Child:
- 2:16ae940b0aee
Simple first implementation of game mechanics: move skateboarder left and right, jump. Has not been organised into classes and functions yet, or formatted.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lewisgw | 0:d74302f8f847 | 1 | /* |
lewisgw | 0:d74302f8f847 | 2 | ELEC2645 Embedded Systems Project |
lewisgw | 0:d74302f8f847 | 3 | School of Electronic & Electrical Engineering University of Leeds |
lewisgw | 0:d74302f8f847 | 4 | Name: Lewis Wooltorton |
lewisgw | 0:d74302f8f847 | 5 | Username: el17lw |
lewisgw | 0:d74302f8f847 | 6 | Student ID Number: 201122085 Date: March 2019 |
lewisgw | 1:ded7ddd826ce | 7 | */ |
lewisgw | 1:ded7ddd826ce | 8 | |
lewisgw | 1:ded7ddd826ce | 9 | #include "N5110.h" |
lewisgw | 1:ded7ddd826ce | 10 | #include "Gamepad.h" |
lewisgw | 1:ded7ddd826ce | 11 | #include <cmath> |
lewisgw | 1:ded7ddd826ce | 12 | |
lewisgw | 1:ded7ddd826ce | 13 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
lewisgw | 1:ded7ddd826ce | 14 | Gamepad gamepad; |
lewisgw | 1:ded7ddd826ce | 15 | |
lewisgw | 1:ded7ddd826ce | 16 | |
lewisgw | 1:ded7ddd826ce | 17 | // Sprites for Skateboarder moving right, moving left, standing left and standing right. These will be included in a Skateboarder class next. |
lewisgw | 1:ded7ddd826ce | 18 | int skate_right[17][12] = { |
lewisgw | 1:ded7ddd826ce | 19 | |
lewisgw | 1:ded7ddd826ce | 20 | { 0,0,0,0,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 21 | { 0,0,0,0,1,1,1,1,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 22 | { 0,0,1,1,1,1,1,1,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 23 | { 0,0,0,0,1,0,1,1,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 24 | { 0,0,0,0,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 25 | { 0,0,0,0,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 26 | { 0,0,0,0,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 27 | { 0,0,1,1,1,1,1,1,1,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 28 | { 0,1,1,0,1,1,0,0,1,1,0,0 }, |
lewisgw | 1:ded7ddd826ce | 29 | { 0,1,0,0,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 30 | { 0,0,0,0,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 31 | { 0,0,0,0,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 32 | { 0,0,0,0,1,0,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 33 | { 0,0,0,0,1,0,0,1,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 34 | { 0,1,0,0,1,0,0,0,1,0,1,0 }, |
lewisgw | 1:ded7ddd826ce | 35 | { 0,0,1,1,1,1,1,1,1,1,0,0 }, |
lewisgw | 1:ded7ddd826ce | 36 | { 0,0,0,1,0,0,0,0,1,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 37 | |
lewisgw | 1:ded7ddd826ce | 38 | |
lewisgw | 1:ded7ddd826ce | 39 | }; |
lewisgw | 1:ded7ddd826ce | 40 | |
lewisgw | 1:ded7ddd826ce | 41 | int skate_left[17][12] = { |
lewisgw | 1:ded7ddd826ce | 42 | |
lewisgw | 1:ded7ddd826ce | 43 | { 0,0,0,0,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 44 | { 0,0,0,1,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 45 | { 0,0,0,1,1,1,1,1,1,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 46 | { 0,0,0,1,1,0,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 47 | { 0,0,0,0,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 48 | { 0,0,0,0,0,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 49 | { 0,0,0,0,0,1,1,1,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 50 | { 0,1,1,1,1,1,1,1,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 51 | { 0,0,0,1,1,1,1,1,1,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 52 | { 0,0,0,0,1,1,0,0,1,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 53 | { 0,0,0,0,1,1,0,0,0,1,0,0 }, |
lewisgw | 1:ded7ddd826ce | 54 | { 0,0,0,0,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 55 | { 0,0,0,1,0,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 56 | { 0,0,1,0,0,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 57 | { 1,1,0,0,0,1,0,0,0,1,0,0 }, |
lewisgw | 1:ded7ddd826ce | 58 | { 0,1,1,1,1,1,1,1,1,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 59 | { 0,0,0,1,0,0,0,0,1,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 60 | |
lewisgw | 1:ded7ddd826ce | 61 | |
lewisgw | 1:ded7ddd826ce | 62 | }; |
lewisgw | 1:ded7ddd826ce | 63 | |
lewisgw | 1:ded7ddd826ce | 64 | int skate_standing_left[17][12] = { |
lewisgw | 1:ded7ddd826ce | 65 | |
lewisgw | 1:ded7ddd826ce | 66 | { 0,0,0,0,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 67 | { 0,0,0,1,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 68 | { 0,0,0,1,1,1,1,1,1,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 69 | { 0,0,0,1,0,0,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 70 | { 0,0,0,1,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 71 | { 0,0,0,0,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 72 | { 0,0,0,1,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 73 | { 0,0,1,1,1,1,0,1,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 74 | { 1,1,0,1,1,1,0,1,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 75 | { 0,0,0,1,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 76 | { 0,0,1,1,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 77 | { 1,0,1,0,0,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 78 | { 1,1,0,0,0,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 79 | { 0,1,0,0,0,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 80 | { 1,0,1,0,0,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 81 | { 0,0,0,1,0,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 82 | { 0,0,1,0,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 83 | |
lewisgw | 1:ded7ddd826ce | 84 | |
lewisgw | 1:ded7ddd826ce | 85 | }; |
lewisgw | 1:ded7ddd826ce | 86 | |
lewisgw | 1:ded7ddd826ce | 87 | int skate_standing_right[17][12] = { |
lewisgw | 1:ded7ddd826ce | 88 | |
lewisgw | 1:ded7ddd826ce | 89 | { 0,0,0,0,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 90 | { 0,0,0,1,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 91 | { 0,1,1,1,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 92 | { 0,0,0,1,0,0,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 93 | { 0,0,0,1,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 94 | { 0,0,0,0,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 95 | { 0,0,0,1,1,1,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 96 | { 0,0,1,1,1,1,0,1,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 97 | { 0,1,0,1,1,1,0,0,1,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 98 | { 0,1,0,1,1,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 99 | { 0,0,0,1,1,1,1,1,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 100 | { 0,0,0,1,0,0,0,1,0,1,0,0 }, |
lewisgw | 1:ded7ddd826ce | 101 | { 0,0,0,1,0,0,0,1,1,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 102 | { 0,0,0,1,0,0,0,1,0,1,0,0 }, |
lewisgw | 1:ded7ddd826ce | 103 | { 0,0,0,1,0,0,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 104 | { 0,0,0,1,0,1,0,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 105 | { 0,0,1,1,1,0,1,0,0,0,0,0 }, |
lewisgw | 1:ded7ddd826ce | 106 | |
lewisgw | 1:ded7ddd826ce | 107 | |
lewisgw | 1:ded7ddd826ce | 108 | }; |
lewisgw | 1:ded7ddd826ce | 109 | // intialise game function. Process input and refresh LCD function will be implemented next along with the classes. |
lewisgw | 1:ded7ddd826ce | 110 | void init_game(); |
lewisgw | 1:ded7ddd826ce | 111 | |
lewisgw | 1:ded7ddd826ce | 112 | // main function. Note: code has not been properly formatted yet - the purpose is to get simple game mechanics to work. |
lewisgw | 1:ded7ddd826ce | 113 | int main(){ |
lewisgw | 1:ded7ddd826ce | 114 | |
lewisgw | 1:ded7ddd826ce | 115 | init_game(); |
lewisgw | 1:ded7ddd826ce | 116 | |
lewisgw | 1:ded7ddd826ce | 117 | //intialise variables for the game loop. These will be implemented more concisely in functions and classes next. |
lewisgw | 1:ded7ddd826ce | 118 | int moving_counter = 0; |
lewisgw | 1:ded7ddd826ce | 119 | int direction_state = 0; // integer to keep track of where the skater is facing. 0 for last moving direction was right, 1 if last moving direction was left. |
lewisgw | 1:ded7ddd826ce | 120 | int x; // x position of the skater |
lewisgw | 1:ded7ddd826ce | 121 | int y; // y position of the skater |
lewisgw | 1:ded7ddd826ce | 122 | int jump_counter = 0; // counter for jumping |
lewisgw | 1:ded7ddd826ce | 123 | |
lewisgw | 1:ded7ddd826ce | 124 | while(1){ |
lewisgw | 1:ded7ddd826ce | 125 | lcd.clear(); |
lewisgw | 1:ded7ddd826ce | 126 | lcd.drawLine(5,40,80,40,FILL_BLACK); // line for staker to move along |
lewisgw | 1:ded7ddd826ce | 127 | Vector2D coord = gamepad.get_mapped_coord(); // get mapped coordinates of joystick |
lewisgw | 1:ded7ddd826ce | 128 | |
lewisgw | 1:ded7ddd826ce | 129 | // first we manipulate the y postion of the skater. |
lewisgw | 1:ded7ddd826ce | 130 | //check if innterupt button A has occured. This means a jump (translation in y position) must take place. |
lewisgw | 1:ded7ddd826ce | 131 | if( gamepad.check_event(Gamepad::A_PRESSED) ){ |
lewisgw | 1:ded7ddd826ce | 132 | jump_counter = 40; |
lewisgw | 1:ded7ddd826ce | 133 | } |
lewisgw | 1:ded7ddd826ce | 134 | // if the jump counter is non zero (e.g. if an interupt has occured) deincriment it every main loop iteration until it is 0 again. |
lewisgw | 1:ded7ddd826ce | 135 | // This means that initally y postion is increased by a lot, and every loop iteration the y postion falls until it is back to its default state. This is a jump of the skater. |
lewisgw | 1:ded7ddd826ce | 136 | if(jump_counter !=0){ |
lewisgw | 1:ded7ddd826ce | 137 | jump_counter--; |
lewisgw | 1:ded7ddd826ce | 138 | } |
lewisgw | 1:ded7ddd826ce | 139 | y = 23 - 0.5*jump_counter; // Using 0.5*jump_counter to scale the fall time. 23 is the y postion when the skater is on the line. |
lewisgw | 1:ded7ddd826ce | 140 | |
lewisgw | 1:ded7ddd826ce | 141 | // now we manipulate the x postion of the skater |
lewisgw | 1:ded7ddd826ce | 142 | |
lewisgw | 1:ded7ddd826ce | 143 | //if the joystick is pushed in the horizontal right or left direction, increment or deincriment the moving counter respectivly, and add a scaled version of this onto the x postion. |
lewisgw | 1:ded7ddd826ce | 144 | //set the direction_state to 0 or 1 to indicate that the last moving postion was right or left respectivly. |
lewisgw | 1:ded7ddd826ce | 145 | //print the correct sprite depending on the postion of the joystick ( ie left, right or centered). |
lewisgw | 1:ded7ddd826ce | 146 | //first two conditions are for joystick moving right or left, the second two are for joystick centered with pervious postion being left or right. |
lewisgw | 1:ded7ddd826ce | 147 | if(coord.x > float(0.1)){ |
lewisgw | 1:ded7ddd826ce | 148 | moving_counter++; |
lewisgw | 1:ded7ddd826ce | 149 | x = 40 + 0.4*moving_counter; |
lewisgw | 1:ded7ddd826ce | 150 | direction_state = 0; |
lewisgw | 1:ded7ddd826ce | 151 | lcd.drawSprite(x,y,17,12,(int *)skate_right); |
lewisgw | 1:ded7ddd826ce | 152 | } else if(coord.x < float(-0.1)) { |
lewisgw | 1:ded7ddd826ce | 153 | moving_counter--; |
lewisgw | 1:ded7ddd826ce | 154 | x = 40 + 0.4*moving_counter; |
lewisgw | 1:ded7ddd826ce | 155 | direction_state = 1; |
lewisgw | 1:ded7ddd826ce | 156 | lcd.drawSprite(x,y,17,12,(int *)skate_left); |
lewisgw | 1:ded7ddd826ce | 157 | } else if(direction_state==1) { |
lewisgw | 1:ded7ddd826ce | 158 | x = 40 + 0.4*moving_counter; |
lewisgw | 1:ded7ddd826ce | 159 | lcd.drawSprite(x,y,17,12,(int *)skate_standing_left); |
lewisgw | 1:ded7ddd826ce | 160 | } else { |
lewisgw | 1:ded7ddd826ce | 161 | x = 40 + 0.4*moving_counter; |
lewisgw | 1:ded7ddd826ce | 162 | lcd.drawSprite(x,y,17,12,(int *)skate_standing_right); |
lewisgw | 1:ded7ddd826ce | 163 | } |
lewisgw | 1:ded7ddd826ce | 164 | lcd.refresh(); |
lewisgw | 1:ded7ddd826ce | 165 | |
lewisgw | 1:ded7ddd826ce | 166 | wait(0.01); |
lewisgw | 1:ded7ddd826ce | 167 | |
lewisgw | 1:ded7ddd826ce | 168 | } |
lewisgw | 1:ded7ddd826ce | 169 | } |
lewisgw | 1:ded7ddd826ce | 170 | |
lewisgw | 1:ded7ddd826ce | 171 | void init_game() { |
lewisgw | 1:ded7ddd826ce | 172 | |
lewisgw | 1:ded7ddd826ce | 173 | gamepad.init();// initalise gamepad |
lewisgw | 1:ded7ddd826ce | 174 | lcd.init(); // initialise LCD |
lewisgw | 1:ded7ddd826ce | 175 | lcd.setContrast(0.5); // set contrast of LCD |
lewisgw | 1:ded7ddd826ce | 176 | lcd.normalMode(); // use normal colour mode |
lewisgw | 1:ded7ddd826ce | 177 | lcd.setBrightness(0.5); //set brightness of LCD |
lewisgw | 1:ded7ddd826ce | 178 | } |
lewisgw | 1:ded7ddd826ce | 179 | |
lewisgw | 1:ded7ddd826ce | 180 |