ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

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?

UserRevisionLine numberNew 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