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
Diff: main.cpp
- Revision:
- 1:ded7ddd826ce
- Parent:
- 0:d74302f8f847
- Child:
- 2:16ae940b0aee
--- a/main.cpp Sun Mar 10 14:20:56 2019 +0000 +++ b/main.cpp Mon Mar 11 20:27:12 2019 +0000 @@ -4,4 +4,177 @@ Name: Lewis Wooltorton Username: el17lw Student ID Number: 201122085 Date: March 2019 -*/ \ No newline at end of file +*/ + +#include "N5110.h" +#include "Gamepad.h" +#include <cmath> + +N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); +Gamepad gamepad; + + +// Sprites for Skateboarder moving right, moving left, standing left and standing right. These will be included in a Skateboarder class next. +int skate_right[17][12] = { + + { 0,0,0,0,1,1,1,0,0,0,0,0 }, + { 0,0,0,0,1,1,1,1,0,0,0,0 }, + { 0,0,1,1,1,1,1,1,0,0,0,0 }, + { 0,0,0,0,1,0,1,1,0,0,0,0 }, + { 0,0,0,0,1,1,1,0,0,0,0,0 }, + { 0,0,0,0,1,1,0,0,0,0,0,0 }, + { 0,0,0,0,1,1,0,0,0,0,0,0 }, + { 0,0,1,1,1,1,1,1,1,0,0,0 }, + { 0,1,1,0,1,1,0,0,1,1,0,0 }, + { 0,1,0,0,1,1,0,0,0,0,0,0 }, + { 0,0,0,0,1,1,0,0,0,0,0,0 }, + { 0,0,0,0,1,1,0,0,0,0,0,0 }, + { 0,0,0,0,1,0,1,0,0,0,0,0 }, + { 0,0,0,0,1,0,0,1,0,0,0,0 }, + { 0,1,0,0,1,0,0,0,1,0,1,0 }, + { 0,0,1,1,1,1,1,1,1,1,0,0 }, + { 0,0,0,1,0,0,0,0,1,0,0,0 }, + + +}; + +int skate_left[17][12] = { + + { 0,0,0,0,1,1,1,0,0,0,0,0 }, + { 0,0,0,1,1,1,1,0,0,0,0,0 }, + { 0,0,0,1,1,1,1,1,1,0,0,0 }, + { 0,0,0,1,1,0,1,0,0,0,0,0 }, + { 0,0,0,0,1,1,1,0,0,0,0,0 }, + { 0,0,0,0,0,1,1,0,0,0,0,0 }, + { 0,0,0,0,0,1,1,1,0,0,0,0 }, + { 0,1,1,1,1,1,1,1,0,0,0,0 }, + { 0,0,0,1,1,1,1,1,1,0,0,0 }, + { 0,0,0,0,1,1,0,0,1,0,0,0 }, + { 0,0,0,0,1,1,0,0,0,1,0,0 }, + { 0,0,0,0,1,1,0,0,0,0,0,0 }, + { 0,0,0,1,0,1,0,0,0,0,0,0 }, + { 0,0,1,0,0,1,0,0,0,0,0,0 }, + { 1,1,0,0,0,1,0,0,0,1,0,0 }, + { 0,1,1,1,1,1,1,1,1,0,0,0 }, + { 0,0,0,1,0,0,0,0,1,0,0,0 }, + + +}; + +int skate_standing_left[17][12] = { + + { 0,0,0,0,1,1,0,0,0,0,0,0 }, + { 0,0,0,1,1,1,1,0,0,0,0,0 }, + { 0,0,0,1,1,1,1,1,1,0,0,0 }, + { 0,0,0,1,0,0,1,0,0,0,0,0 }, + { 0,0,0,1,1,1,1,0,0,0,0,0 }, + { 0,0,0,0,1,1,0,0,0,0,0,0 }, + { 0,0,0,1,1,1,1,0,0,0,0,0 }, + { 0,0,1,1,1,1,0,1,0,0,0,0 }, + { 1,1,0,1,1,1,0,1,0,0,0,0 }, + { 0,0,0,1,1,1,0,0,0,0,0,0 }, + { 0,0,1,1,1,1,0,0,0,0,0,0 }, + { 1,0,1,0,0,1,0,0,0,0,0,0 }, + { 1,1,0,0,0,1,0,0,0,0,0,0 }, + { 0,1,0,0,0,1,0,0,0,0,0,0 }, + { 1,0,1,0,0,1,0,0,0,0,0,0 }, + { 0,0,0,1,0,1,0,0,0,0,0,0 }, + { 0,0,1,0,1,1,1,0,0,0,0,0 }, + + +}; + +int skate_standing_right[17][12] = { + + { 0,0,0,0,1,1,0,0,0,0,0,0 }, + { 0,0,0,1,1,1,1,0,0,0,0,0 }, + { 0,1,1,1,1,1,1,0,0,0,0,0 }, + { 0,0,0,1,0,0,1,0,0,0,0,0 }, + { 0,0,0,1,1,1,1,0,0,0,0,0 }, + { 0,0,0,0,1,1,0,0,0,0,0,0 }, + { 0,0,0,1,1,1,1,0,0,0,0,0 }, + { 0,0,1,1,1,1,0,1,0,0,0,0 }, + { 0,1,0,1,1,1,0,0,1,0,0,0 }, + { 0,1,0,1,1,1,0,0,0,0,0,0 }, + { 0,0,0,1,1,1,1,1,0,0,0,0 }, + { 0,0,0,1,0,0,0,1,0,1,0,0 }, + { 0,0,0,1,0,0,0,1,1,0,0,0 }, + { 0,0,0,1,0,0,0,1,0,1,0,0 }, + { 0,0,0,1,0,0,1,0,0,0,0,0 }, + { 0,0,0,1,0,1,0,0,0,0,0,0 }, + { 0,0,1,1,1,0,1,0,0,0,0,0 }, + + +}; +// intialise game function. Process input and refresh LCD function will be implemented next along with the classes. +void init_game(); + +// main function. Note: code has not been properly formatted yet - the purpose is to get simple game mechanics to work. +int main(){ + + init_game(); + + //intialise variables for the game loop. These will be implemented more concisely in functions and classes next. + int moving_counter = 0; + 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. + int x; // x position of the skater + int y; // y position of the skater + int jump_counter = 0; // counter for jumping + + while(1){ + lcd.clear(); + lcd.drawLine(5,40,80,40,FILL_BLACK); // line for staker to move along + Vector2D coord = gamepad.get_mapped_coord(); // get mapped coordinates of joystick + + // first we manipulate the y postion of the skater. + //check if innterupt button A has occured. This means a jump (translation in y position) must take place. + if( gamepad.check_event(Gamepad::A_PRESSED) ){ + jump_counter = 40; + } + // 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. + // 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. + if(jump_counter !=0){ + jump_counter--; + } + 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. + + // now we manipulate the x postion of the skater + + //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. + //set the direction_state to 0 or 1 to indicate that the last moving postion was right or left respectivly. + //print the correct sprite depending on the postion of the joystick ( ie left, right or centered). + //first two conditions are for joystick moving right or left, the second two are for joystick centered with pervious postion being left or right. + if(coord.x > float(0.1)){ + moving_counter++; + x = 40 + 0.4*moving_counter; + direction_state = 0; + lcd.drawSprite(x,y,17,12,(int *)skate_right); + } else if(coord.x < float(-0.1)) { + moving_counter--; + x = 40 + 0.4*moving_counter; + direction_state = 1; + lcd.drawSprite(x,y,17,12,(int *)skate_left); + } else if(direction_state==1) { + x = 40 + 0.4*moving_counter; + lcd.drawSprite(x,y,17,12,(int *)skate_standing_left); + } else { + x = 40 + 0.4*moving_counter; + lcd.drawSprite(x,y,17,12,(int *)skate_standing_right); + } + lcd.refresh(); + + wait(0.01); + + } + } + + void init_game() { + + gamepad.init();// initalise gamepad + lcd.init(); // initialise LCD + lcd.setContrast(0.5); // set contrast of LCD + lcd.normalMode(); // use normal colour mode + lcd.setBrightness(0.5); //set brightness of LCD + } + +