![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Adam Baker 201166301
Dependencies: mbed Gamepad N5110
Levels/Levels.cpp
- Committer:
- adambakerwa
- Date:
- 2019-05-09
- Revision:
- 50:9fc8edf722a8
File content as of revision 50:9fc8edf722a8:
#include "mbed.h" #include "Gamepad.h" #include "N5110.h" #include "Levels.h" // nothing doing in the constructor and destructor Levels::Levels() { } Levels::~Levels() { } //initializes all variables and pos struct. Pos Levels::init(Pos pos) { pos = init_hoz1(pos); //initialises hoz1 part of struct pos = init_hoz2(pos); //initialises hoz2 part of struct pos = init_ver1(pos); //initialises ver1 part of struct pos = init_ver2(pos); //initialises ver2 part of struct pos = init_spike(pos); //initialises spike part of struct init_counter1(); //initialises counter1 init_counter2(); //initialises counter2 return pos; } //initializes data for horizontal moving platform 1 Pos Levels::init_hoz1(Pos pos) { pos.x = 0; //x cord pos.y = 0; //y cord pos.d = 0; //dircection pos.c = 0; //counter pos.l = 0; //length pos.h = 0; //height return pos; } //initializes data for horizontal moving platform 2 Pos Levels::init_hoz2(Pos pos) { pos.x2 = 0; //x cord pos.y2 = 0; //y cord pos.d2 = 0; //dircection pos.c2 = 0; //counter pos.l2 = 0; //length pos.h2 = 0; //height return pos; } //initializes data for vertical moving platform 1 Pos Levels::init_ver1(Pos pos) { pos.vx = 0; //x cord pos.vy = 0; //y cord pos.vd = 0; //dircection pos.vc = 0; //counter pos.vl = 0; //length pos.vh = 0; //height return pos; } //initializes data for vertical moving platform 1 Pos Levels::init_ver2(Pos pos) { pos.vx2 = 0; //x cord pos.vy2 = 0; //y cprd pos.vd2 = 0; //dircection pos.vc2 = 0; //counter pos.vl2 = 0; //length pos.vh2 = 0; //heighht return pos; } //initializes data for spikes Pos Levels::init_spike(Pos pos) { pos.sx = 0; pos.sy = 0; pos.sl = 0; return pos; } //initializes counter 1 void Levels::init_counter1() { _counter1 = 0; } //initializes counter 2 void Levels::init_counter2() { _counter2 = 0; } //Creates a horizontal moving platform, and returns cordinates to pos struct Pos Levels::moving_platform_hoz(N5110 &lcd, Pos pos, int x, int y, int w, int h, int dx, int s) //x cord, y cord, width, hight, move too point, initial starting point. { if (pos.c == 0) { //sets counter to start point on first run, pos.c = s; //pos.c never returns to 0, so it only happens when the level loads } if (pos.d == 0) { //if direction is 0, move right pos.c++; } else { //if direction is 1, move left pos.c--; } if (pos.c == dx || pos.c == 1 ) { //when moving platform meets dx (move to point) direction pivots, pos.d = !pos.d; //same again, when moving platform reaches 1 } pos.x = x + pos.c; //pass x cord + counter to pos struct pos.y = y; //pass y cord to pos struct pos.l = w; //pass width to pos struct lcd.drawLine(pos.x, pos.y, pos.x + w, pos.y, 1); //draw the moving platform using specified width and height parameters lcd.drawLine(pos.x, pos.y+h, pos.x + w, pos.y+h, 1); lcd.drawLine(pos.x, pos.y, pos.x, pos.y+h, 1); lcd.drawLine(pos.x+w, pos.y, pos.x +w, pos.y+h, 1); return pos; //return pos (the position and state of the moving platform) } //Creates a vertical moving platform, and returns cordinates to pos struct Pos Levels::moving_platform_ver(N5110 &lcd, Pos pos, int x, int y, int h, int w, int dx, int s) //x cord, y cord, width, hight, move too point, initial starting point. { if (pos.c == 0) { //sets counter to start point on first run, pos.c = s; //pos.c never returns to 0, so it only happens when the level loads } if (pos.d == 0) { //if direction is 0, move down pos.c++; } else { //if direction is 1, move up pos.c--; } if (pos.c == dx || pos.c == 1 ) { //when moving platform meets dx (move to point) direction pivots, pos.d = !pos.d; //same again, when moving platform reaches 1 } pos.x = x; //pass x cord to pos struct pos.y = y + pos.c; //pass y cord + counter to pos struct pos.l = w; //pass width to pos struct pos.h = h; //pass height to pos struct lcd.drawLine(pos.x, pos.y, pos.x, pos.y+h, 1); //draw the moving platform using specified width and height parameters lcd.drawLine(pos.x, pos.y, pos.x+w, pos.y, 1); lcd.drawLine(pos.x+w, pos.y, pos.x+w, pos.y+h, 1); lcd.drawLine(pos.x, pos.y+h, pos.x+w, pos.y+h, 1); return pos; //return pos (the position and state of the moving platform) } //print a singular spike at x, y void Levels::spike_up(N5110 &lcd, int x, int y) { lcd.setPixel(x, y, true); lcd.setPixel(x+1, y-1, true); lcd.setPixel(x+1, y-2, true); lcd.setPixel(x+2, y, true); } //print a row of spikes of 'n' length, at x y Pos Levels::spike_row_up(N5110 &lcd, Pos pos, int x, int y, int n) { for (int i = 0; i < n; i++) { //for n times, spike_up(lcd, x+i*2, y); //draw a spike } pos.sx = x; //pass cordinatres to pos struct pos.sy = y; //pass cordinates to pos struct pos.sl = n*2 +1; //pass cordinates to pos struct return pos; } //depending on input, print following levels Pos Levels::what_level(N5110 &lcd, int level) { switch (level) { case 0: _pos = level_zero(lcd); break; case 1: _pos = level_one(lcd); break; case 2: _pos = level_two(lcd); break; case 3: _pos = level_three(lcd); break; case 4: _pos = level_four(lcd); break; case 5: _pos = level_five(lcd); break; case 6: _pos = level_six(lcd); break; case 7: _pos = level_seven(lcd); break; case 8: _pos = level_eight(lcd); break; case 9: _pos = level_nine(lcd); break; case 10: _pos = level_ten(lcd); break; default: exit(1); break; } return _pos; } //transfer hoz1 into spare variables of original pos struct. Pos Levels::pass_data_hoz1(Pos pos, Pos hoz) { pos.x = hoz.x; pos.y = hoz.y; pos.d = hoz.d; pos.c = hoz.c; pos.l = hoz.l; pos.h = hoz.h; return pos; } //transfer hoz2 into spare variables of original pos struct. Pos Levels::pass_data_hoz2(Pos pos, Pos hoz2) { pos.x2 = hoz2.x; pos.y2 = hoz2.y; pos.d2 = hoz2.d; pos.c2 = hoz2.c; pos.l2 = hoz2.l; pos.h2 = hoz2.h; return pos; } //transfer ver into spare variables of original pos struct. Pos Levels::pass_data_ver1(Pos pos, Pos ver) { pos.vx = ver.x; pos.vy = ver.y; pos.vd = ver.d; pos.vc = ver.c; pos.vl = ver.l; pos.vh = ver.h; return pos; } //transfer ver2 into spare variables of original pos struct. Pos Levels::pass_data_ver2(Pos pos, Pos ver2) { pos.vx2 = ver2.x; pos.vy2 = ver2.y; pos.vd2 = ver2.d; pos.vc2 = ver2.c; pos.vl2 = ver2.l; pos.vh2 = ver2.h; return pos; } //increment counter1 void Levels::speech_counter1() { _counter1++; } //inrement counter2 void Levels::speech_counter2() { _counter2++; } //print string 'why hello there' word by word void Levels::speech_one(N5110 &lcd) { if (_counter1 > 5 && _counter1 < 15) { lcd.printString(" Why,",0,0); } if (_counter1 > 8 && _counter1 < 11) { lcd.printString(" Hello",0,1); } if (_counter1 > 10 && _counter1 < 16) { lcd.printString(" Hello there...",0,1); } if (_counter1 > 15 && _counter1 < 17) { lcd.printString(" there...",0,1); } } //print string 'you must be ' word by word void Levels::speech_two(N5110 &lcd) { if (_counter1 >= 20 && _counter1 < 22) { lcd.printString(" You ",0,0); } if (_counter1 >= 22 && _counter1 < 23) { lcd.printString(" You must ",0,0); } if (_counter1 >= 23 && _counter1 < 29) { lcd.printString(" You must be",0,0); } if (_counter1 >= 29 && _counter1 < 30) { lcd.printString(" must be",0,0); } if (_counter1 >= 30 && _counter1 < 31) { lcd.printString(" be",0,0); } } //print string 'the new guy' word by word void Levels::speech_three(N5110 &lcd) { if (_counter1 >= 24 && _counter1 < 25) { lcd.printString(" The ",0,1); } if (_counter1 >= 25 && _counter1 < 26) { lcd.printString(" The new",0,1); } if (_counter1 >= 26 && _counter1 < 32) { lcd.printString(" The new guy.,",0,1); } if (_counter1 >= 32 && _counter1 < 33) { lcd.printString(" new guy.,",0,1); } if (_counter1 >= 33 && _counter1 < 34) { lcd.printString(" guy.,",0,1); } } //print string 'use joy stick to move-go right' word by word void Levels::speech_four(N5110 &lcd) { if (_counter1 >= 40) { lcd.printString(" Use jystck to",0,0); lcd.printString("move-GO RIGHT!",0,1); } } //print string 'shame what' word by word void Levels::speech_five(N5110 &lcd) { if (_counter2 >= 5 && _counter2 < 6) { lcd.printString(" Shame ",0,0); } if (_counter2 >= 6 && _counter2 < 10) { lcd.printString(" Shame what",0,0); } if (_counter2 >= 10 && _counter2 < 11) { lcd.printString(" what",0,0); } } //print string 'happened to' word by word void Levels::speech_six(N5110 &lcd) { if (_counter2 >= 7 && _counter2 < 8) { lcd.printString(" happened ",0,1); } if (_counter2 >= 8 && _counter2 < 12) { lcd.printString(" happened to ",0,1); } if (_counter2 >= 12 && _counter2 < 13) { lcd.printString(" to ",0,1); } } //print string 'the last lad...' word by word void Levels::speech_seven(N5110 &lcd) { if (_counter2 >= 13 && _counter2 < 14) { lcd.printString(" the ",0,0); } if (_counter2 >= 14 && _counter2 < 20) { lcd.printString(" the last",0,0); } if (_counter2 >= 20 && _counter2 < 21) { lcd.printString(" last",0,0); } if (_counter2 >= 16 && _counter2 < 23) { lcd.printString(" lad...",0,1); } } //print string 'press button a to jump' word by word void Levels::speech_eight(N5110 &lcd) { if (_counter2 >= 26) { lcd.printString(" Press button",0,0); lcd.printString(" A to jump",0,1); } } //print string 'I was just' word by word void Levels::speech_nine(N5110 &lcd) { if (_counter1 >= 5 && _counter1 < 6) { lcd.printString(" I ",0,0); } if (_counter1 >= 6 && _counter1 < 7) { lcd.printString(" I was",0,0); } if (_counter1 >= 7 && _counter1 < 10) { lcd.printString(" I was just",0,0); } if (_counter1 >= 10 && _counter1 < 11) { lcd.printString(" was just",0,0); } if (_counter1 >= 11 && _counter1 < 12) { lcd.printString(" just",0,0); } } //print string 'starting to' word by word void Levels::speech_ten(N5110 &lcd) { if (_counter1 >= 8 && _counter1 < 13) { lcd.printString("starting ",0,1); } if (_counter1 >= 9 && _counter1 < 14) { lcd.printString("starting to ",0,1); } if (_counter1 >= 14 && _counter1 < 15) { lcd.printString(" to",0,1); } } //print string 'like him' word by word void Levels::speech_elleven(N5110 &lcd) { if (_counter1 >= 14 && _counter1 < 15) { lcd.printString(" like ",0,0); } if (_counter1 >= 15 && _counter1 < 25) { lcd.printString(" like him",0,0); } if (_counter1 >= 25 && _counter1 < 26) { lcd.printString(" him",0,0); } } //print string 'as well!' word by word void Levels::speech_twelve(N5110 &lcd) { if (_counter1 >= 16 && _counter1 < 17) { lcd.printString(" as ",0,1); } if (_counter1 >= 17 && _counter1 < 27) { lcd.printString(" as well! ",0,1); } if (_counter1 >= 27 && _counter1 < 28) { lcd.printString(" well! ",0,1); } } //print string 'Here's an idea..' word by word void Levels::speech_thirteen(N5110 &lcd) { if (_counter2 >= 5 && _counter2 < 12) { lcd.printString("Here's", 55, 3); } if (_counter2 >= 6 && _counter2 < 13) { lcd.printString("an", 42, 4); } if (_counter2 >= 7 && _counter2 < 14) { lcd.printString("idea..", 45, 5); } } //print string 'try a wall jump' word by word void Levels::speech_forteen(N5110 &lcd) { if (_counter2 >= 13 && _counter2 < 22) { lcd.printString("try", 60, 3); } if (_counter2 >= 14 && _counter2 < 23) { lcd.printString("a", 45, 4); } if (_counter2 >= 14 && _counter2 < 23) { lcd.printString("a wall", 45, 4); } if (_counter2 >= 14 && _counter2 < 23) { lcd.printString("a wall", 45, 4); } if (_counter2 >= 16 && _counter2 < 25) { lcd.printString("jump!", 50, 5); } } //run level one Pos Levels::level_one(N5110 &lcd) { lcd.drawLine(0,40,84,40,1); //draw lines for level speech_level_one(lcd); //display speech for level _pos = init_hoz1(_pos); //intialise all variables not being used in level return _pos; //return postions of moving platforms if any. } //run level one speech void Levels::speech_level_one(N5110 &lcd) { speech_counter1(); //counter increments speech_one(lcd); //speech appears according to counter speech_two(lcd); speech_three(lcd); speech_four(lcd); } Pos Levels::init_level_one(Pos pos) { _pos = init_hoz1(_pos); //intialise all variables not being used in level _pos = init_hoz2(_pos); _pos = init_ver1(_pos); _pos = init_ver2(_pos); _pos = init_spike(_pos); init_counter2(); return _pos; } //run level two Pos Levels::level_two(N5110 &lcd) { lcd.drawLine(0,40,35,40,1); //draw lines for level lcd.drawLine(35,40,35,48,1); lcd.drawLine(50,40,84,40,1); lcd.drawLine(50,40,50,48,1); speech_level_two(lcd); //display speech for level _pos = init_level_two(_pos); return _pos; //return postions of moving platforms if any. } //intialises all platform variables not being used in level 2 Pos Levels::init_level_two(Pos pos) { _pos = init_hoz1(_pos); //intialise all variables not being used in level _pos = init_hoz2(_pos); _pos = init_ver1(_pos); _pos = init_ver2(_pos); _pos = init_spike(_pos); init_counter1(); return _pos; } //run level two speech void Levels::speech_level_two(N5110 &lcd) { speech_counter2(); //counter increments speech_five(lcd); //speech appears according to counter speech_six(lcd); speech_seven(lcd); speech_eight(lcd); } //run level three Pos Levels::level_three(N5110 &lcd) { lcd.drawLine(0,40,15,40,1); //draw lines for level lcd.drawLine(15,40,15,48,1); lcd.drawLine(70,40,84,40,1); lcd.drawLine(70,40,70,48,1); lcd.drawLine(74,14,74,0,1); lcd.drawLine(74,14,84,14,1); _hoz1 = moving_platform_hoz(lcd, _hoz1, 25, 40, 10, 3, 25, 1); //set parameters for horizontal moving platform _pos = pass_data_hoz1(_pos, _hoz1); speech_level_three(lcd); //display speech for level _pos = init_level_three(_pos); return _pos; } //intialises all platform variables not being used in level 3 Pos Levels::init_level_three(Pos pos) { //intialise all variables not being used in level _pos = init_hoz2(_pos); _pos = init_ver1(_pos); _pos = init_ver2(_pos); _pos = init_spike(_pos); init_counter2(); return _pos; } //run level three speech void Levels::speech_level_three(N5110 &lcd) { speech_counter1(); //counter increments speech_nine(lcd); //speech appears according to counter speech_ten(lcd); speech_elleven(lcd); speech_twelve(lcd); } //run level four Pos Levels::level_four(N5110 &lcd) { lcd.drawLine(0,40,84,40,1); //draw lines for level lcd.drawLine(0,14,10,14,1); lcd.drawLine(10,0,10,14,1); lcd.drawLine(74,14,74,0,1); lcd.drawLine(74,14,84,14,1); _ver1 = moving_platform_ver(lcd, _ver1, 11, 0, 18, 30, 21, 10); //set parameters for vertical moving platform _pos = pass_data_ver1(_pos, _ver1); _ver2 = moving_platform_ver(lcd, _ver2, 42, 0, 18, 31, 21, 1); //set parameters for vertical 2 moving platform _pos = pass_data_ver2(_pos, _ver2); _pos = init_level_four(_pos); return _pos; } //intialises all platform variables not being used in level 4 Pos Levels::init_level_four(Pos pos) { _pos = init_hoz1(_pos); //intialise all variables not being used in level _pos = init_hoz2(_pos); _pos = init_spike(_pos); init_counter2(); init_counter1(); return _pos; } //run level five Pos Levels::level_five(N5110 &lcd) { lcd.drawLine(0,40,40,40,1); //draw lines for level lcd.drawLine(40,40,40,20,1); lcd.drawLine(40,20,84,20,1); lcd.drawLine(0,14,10,14,1); lcd.drawLine(10,14,10,25,1); lcd.drawLine(10,25,20,25,1); lcd.drawLine(20,0,20,25,1); speech_counter2(); //run speech for level speech_thirteen(lcd); speech_forteen(lcd); _pos = spike_row_up(lcd, _pos, 55, 19, 5); //set parameters for spikes _pos = init_level_five(_pos); return _pos; } //intialises all platform variables not being used in level 4 Pos Levels::init_level_five(Pos pos) { _pos = init_hoz1(_pos); //intialise all variables not being used in level _pos = init_hoz2(_pos); _pos = init_ver1(_pos); _pos = init_ver2(_pos); init_counter1(); return _pos; } //run level six Pos Levels::level_six(N5110 &lcd) { lcd.drawLine(0,20,10,20,1); //draw lines for level lcd.drawLine(10,20,10,48,1); lcd.drawLine(74,48,74,20,1); lcd.drawLine(74,20,84,20,1); _ver1 = moving_platform_ver(lcd, _ver1, 23, 10, 3, 5, 20, 1); //set parameters for vertical moving platform _pos = pass_data_ver1(_pos, _ver1); _ver2 = moving_platform_ver(lcd, _ver2, 56, 10, 3, 5, 20, 19); //set parameters for vertical 2 moving platform _pos = pass_data_ver2(_pos, _ver2); _pos = init_level_six(_pos); return _pos; } //intialises all platform variables not being used in level 6 Pos Levels::init_level_six(Pos pos) { _pos = init_hoz1(_pos); //intialise all variables not being used in level _pos = init_hoz2(_pos); init_counter2(); init_counter1(); _pos = init_spike(_pos); return _pos; } //run level seven Pos Levels::level_seven(N5110 &lcd) { lcd.drawLine(0,20,10,20,1); //draw lines for level lcd.drawLine(10,20,10,48,1); lcd.drawLine(50,39,56,39,1); lcd.drawLine(50,39,50,37,1); lcd.drawLine(56,37,56,39,1); lcd.drawLine(70,40,84,40,1); lcd.drawLine(70,40,70,48,1); _hoz1 = moving_platform_hoz(lcd, _hoz1, 20, 40, 20, 3, 25, 1); //set parameters for horizontal moving platform _pos = pass_data_hoz1(_pos, _hoz1); _pos = spike_row_up(lcd, _pos, 50, 37, 3); //set parameters for spikes _pos = init_level_seven(_pos); //intialise all variables not being used in level return _pos; } //intialises all platform variables not being used in level 7 Pos Levels::init_level_seven(Pos pos) { _pos = init_hoz2(_pos); _pos = init_ver1(_pos); _pos = init_ver2(_pos); init_counter2(); return _pos; } //run level eight Pos Levels::level_eight(N5110 &lcd) { lcd.drawLine(0,40,10,40,1); //draw lines for level lcd.drawLine(10,40,10,48,1); lcd.drawLine(22,48,22,32,1); lcd.drawLine(62,48,62,32,1); lcd.drawLine(22,32,62,32,1); lcd.drawLine(74,10,84,10,1); lcd.drawLine(74,10,74,48,1); _ver1 = moving_platform_ver(lcd, _ver1, 11, 10, 40, 10, 25, 1); //set parameters for vertical moving platform _pos = pass_data_ver1(_pos, _ver1); _ver2 = moving_platform_ver(lcd, _ver2, 63, 15, 40, 10, 25, 24); //set parameters for vertical moving platform 2 _pos = pass_data_ver2(_pos, _ver2); _pos = spike_row_up(lcd, _pos, 24, 31, 18); //set parameters for spikes _pos = init_level_eight(_pos); return _pos; } //intialises all platform variables not being used in level 8 Pos Levels::init_level_eight(Pos pos) { _pos = init_hoz1(_pos); //intialise all variables not being used in level _pos = init_hoz2(_pos); init_counter2(); return _pos; } //run level nine Pos Levels::level_nine(N5110 &lcd) { lcd.drawLine(0,10,25,10,1); lcd.drawLine(25,12,25,10,1); lcd.drawLine(25,12,5,12,1); lcd.drawLine(5,12,5,48,1); lcd.drawLine(45,0,45,25,1); lcd.drawLine(45,25,20,25,1); lcd.drawLine(20,25,20,28,1); lcd.drawLine(20,28,55,28,1); lcd.drawLine(55,28,65,0,1); lcd.drawLine(30,46,70,46,1); lcd.drawLine(70,46,70,40,1); lcd.drawLine(70,40,84,40,1); lcd.drawLine(30,46,30,48,1); _pos = init(_pos); return _pos; } //run level ten Pos Levels::level_ten(N5110 &lcd) { _pos = init(_pos); lcd.drawLine(0,40,70,40,1); lcd.drawLine(70,40,70,0,1); lcd.printString(" ..the end,", 0, 0); lcd.printString("now what??", 0, 1); return _pos; } //run level zero Pos Levels::level_zero(N5110 &lcd) { lcd.printString(" I said the ", 0, 0); lcd.printString(" other Way.. ", 0, 1); lcd.drawLine(84,40,10,40,1); lcd.drawLine(10,40,10,0,1); return _pos; }