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
Revision 31:ed5f7f15a1ed, committed 2019-04-10
- Comitter:
- el17arm
- Date:
- Wed Apr 10 16:20:28 2019 +0000
- Parent:
- 30:6d6b48fe3679
- Commit message:
- back up
Changed in this revision
--- a/Gameengine/Gameengine.cpp Wed Apr 10 14:29:14 2019 +0000
+++ b/Gameengine/Gameengine.cpp Wed Apr 10 16:20:28 2019 +0000
@@ -4,6 +4,7 @@
{
_turn_flag = 0;
_counter =0;
+
}
Gameengine::~Gameengine()
@@ -13,19 +14,19 @@
void Gameengine::game_init()
{
_level_select = 1;
- _miner.miner_init(3, 33);
- _miner.enemy_init(1, 22, 42, 40);
- _miner.enemy_init(0, 22, 20, 40);
+ _sprites.miner_init(3, 33);
+ _sprites.enemy_init(1, 22, 42, 40);
+ _sprites.enemy_init(0, 22, 20, 40);
_lives = 3;
}
-/*void Levelobjects::get_miner_pos()
+void Gameengine::get_miner_pos()
{
- Vector2D p = _miner.get_pos();
+ Vector2D p = _sprites.get_pos();
- printf("miner x %f \n", p.x);
- printf("miner y %f \n", p.y);
-}*/
+ //printf("miner x %f \n", p.x);
+ //printf("miner y %f \n", p.y);
+}
void Gameengine::read_direction(Gamepad &pad)
{
@@ -37,37 +38,36 @@
t.start();
read_direction(pad);
//get_miner_pos();
- _miner.miner_move(_d, lcd);
- _miner.miner_gravity(lcd);
- _miner.miner_jump(lcd, pad);
- _miner.miner_land(lcd);
+ _sprites.miner_move(_d, lcd);
+ _sprites.miner_gravity(lcd);
+ _sprites.miner_jump(lcd, pad);
+ _sprites.miner_land(lcd);
lose_life(lcd);
game_over();
next_level(lcd);
-
- _miner.enemy_move(0, 0.5, lcd);
- _miner.enemy_move(1, 1, lcd);
-
+ _sprites.enemy_collision(0);
+ _sprites.enemy_collision(1);
+ _sprites.enemy_move(0, 0.5, lcd);
+ _sprites.enemy_move(1, 1, lcd);
+
}
void Gameengine::draw(Key _k, N5110 &lcd, Gamepad &pad)
{
if (_level_select == 1) {
-
- _miner.enemy_collision(0);
- _miner.enemy_collision(1);
- _miner.miner_draw(lcd);
+
+ _sprites.miner_draw(lcd);
_l1.level_platforms(lcd);
_l1.soft_blocks(lcd);
_l1.solid_blocks(lcd);
- _l1.keys(lcd, pad);
- _l1.keys_collected();
+ keys(lcd, pad);
+ keys_collected();
_l1.traps(lcd);
}
if(_level_select == 2) {
- _miner.miner_draw(lcd);
+ _sprites.miner_draw(lcd);
lcd.drawLine(0,47,83,47,1);
//printf("level 2 time = %f \n", t.read());
}
@@ -75,13 +75,63 @@
void Gameengine::lose_life(N5110 &lcd)
{
- if (_l1.traps(lcd) == 1 || _miner.enemy_collision(0) == true) {
+ if (_l1.traps(lcd) == 1 || enemy_death() == true) {
_lives--;
- _miner.miner_init(3, 33);
+ _sprites.miner_init(3, 33);
wait(1);
}
}
+bool Gameengine::enemy_death()
+{
+ if(_sprites.enemy_collision(0) || _sprites.enemy_collision(1) ||
+ _sprites.enemy_collision(2) || _sprites.enemy_collision(3))
+
+ return true;
+ else {
+ return false;
+ }
+}
+
+bool Gameengine::exit_level(int x, int y, N5110 &lcd)
+{
+ lcd.drawSprite(x,y,6,5,(int *)door);
+
+ if(_keys == 5 && lcd.getPixel(x-1, y+5)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void Gameengine::next_level(N5110 &lcd)
+{
+ if(_game.level1_exit(lcd) == true) {
+ t.stop();
+ _level_select = 2;
+ _sprites.miner_init(3,0);
+ printf("Final score is %f \n ",_lives * (60 - t.read())+ (10 * _l1.keys_collected()));
+ }
+}
+
+bool Game::level1_exit(N5110 &lcd)
+{
+ if(_level.exit_level(78,41,lcd) == true) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+bool Level1::level1_exit(N5110 &lcd)
+{
+ if(_level.exit_level(78,41,lcd) == true) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
bool Gameengine::game_over()
{
if(_lives == 0 || t.read() > 60) {
@@ -90,14 +140,4 @@
} else {
return false;
}
-}
-
-void Gameengine::next_level(N5110 &lcd)
-{
- if(_l1.level1_exit(lcd) == true) {
- t.stop();
- _level_select = 2;
- _miner.miner_init(3,0);
- printf("Final score is %f \n ",_lives * (60 - t.read())+ (10 * _l1.keys_collected()));
- }
}
\ No newline at end of file
--- a/Gameengine/Gameengine.h Wed Apr 10 14:29:14 2019 +0000
+++ b/Gameengine/Gameengine.h Wed Apr 10 16:20:28 2019 +0000
@@ -4,10 +4,14 @@
#include "mbed.h"
#include "N5110.h"
#include "Gamepad.h"
-#include "Miner.h"
+#include "Sprites.h"
#include "Level1.h"
#include "Levelengine.h"
+struct Key{
+ bool key[5];
+};
+
class Gameengine
{
@@ -15,14 +19,17 @@
Gameengine();
~Gameengine();
- //void get_miner_pos();
+ void get_miner_pos();
void read_direction(Gamepad &pad);
void update(N5110 &lcd, Gamepad &pad);
void game_init();
void draw(Key _k, N5110 &lcd, Gamepad &pad);
void lose_life(N5110 &lcd);
bool game_over();
- void next_level(N5110 &lcd);
+ void next_level(N5110 &lcd);
+ bool enemy_death();
+
+ bool exit_level(int x, int y, N5110 &lcd);
private:
@@ -34,7 +41,7 @@
int _turn_flag;
int _counter;
- Miner _miner;
+ Sprites _sprites;
Direction _d;
Level1 _l1;
Timer t;
--- a/Level1/Level1.cpp Wed Apr 10 14:29:14 2019 +0000
+++ b/Level1/Level1.cpp Wed Apr 10 16:20:28 2019 +0000
@@ -42,13 +42,18 @@
void Level1::keys(N5110 &lcd, Gamepad &pad)
{
+ _sprites.key_collect(0, 79, 12, lcd, pad);
+ _sprites.key_collect(1, 36, 22, lcd, pad);
+ _sprites.key_collect(2, 40, 6, lcd, pad);
+ _sprites.key_collect(3, 62, 6, lcd, pad);
+ _sprites.key_collect(4, 75, 0, lcd, pad);
- _level.key_collect(0, 79, 12, lcd, pad);
- _level.key_collect(1, 36, 22, lcd, pad);
- _level.key_collect(2, 40, 6, lcd, pad);
- _level.key_collect(3, 62, 6, lcd, pad);
- _level.key_collect(4, 75, 0, lcd, pad);
+}
+int Sprites::keys_collected()
+{
+ int k = _keys;
+ return k;
}
int Level1::traps(N5110 &lcd)
@@ -61,11 +66,13 @@
}
}
-int Level1::keys_collected()
+bool Level1::level1_exit(N5110 &lcd)
{
-
- int k =_level.keys_collected();
- return k;
+ if(_level.exit_level(78,41,lcd) == true) {
+ return true;
+ } else {
+ return false;
+ }
}
bool Level1::level1_exit(N5110 &lcd)
--- a/Level1/Level1.h Wed Apr 10 14:29:14 2019 +0000
+++ b/Level1/Level1.h Wed Apr 10 16:20:28 2019 +0000
@@ -5,7 +5,7 @@
#include "N5110.h"
#include "Gamepad.h"
#include "Levelengine.h"
-#include "Miner.h"
+#include "Sprites.h"
class Level1
{
@@ -23,7 +23,7 @@
private:
- Miner _miner;
+ Sprites _sprites;
Levelengine _level;
Key _k;
--- a/Levelengine/Levelengine.h Wed Apr 10 14:29:14 2019 +0000
+++ b/Levelengine/Levelengine.h Wed Apr 10 16:20:28 2019 +0000
@@ -4,44 +4,7 @@
#include "mbed.h"
#include "N5110.h"
#include "Gamepad.h"
-#include "Miner.h"
-
-const int solid_block[9] = {
-
- 1,1,1,
- 1,0,1,
- 1,1,1,
- };
-
-const int key[12] = {
- 1,1,0,0,
- 1,0,1,1,
- 1,1,0,1,
- };
-
-const int key_collected[12] = {
-
- 0,0,0,0,
- 0,0,0,0,
- 0,0,0,0,
- };
-
-const int spike[9] = {
-
- 1,1,1,
- 0,1,0,
- 1,1,1,
- };
-
-const int door[30] = {
-
- 1,1,1,1,1,
- 1,0,1,0,1,
- 1,1,0,1,1,
- 1,0,1,0,1,
- 1,1,0,1,1,
- 1,0,1,0,1,
-};
+#include "Sprites.h"
struct Key{
bool key[5];
@@ -64,7 +27,7 @@
int _collision;
int _keys;
- Miner _miner;
+ Sprites _sprites;
Direction _d;
Key _k;
--- a/Miner/Miner.cpp Wed Apr 10 14:29:14 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,125 +0,0 @@
-#include "Miner.h"
-
-Miner::Miner()
-{
- _enem.eflag[0] = false;
- _j_flag = false;
-}
-
-Miner::~Miner()
-{
-}
-
-void Miner::miner_init(int x, int y)
-{
- _x = x;
- _y = y;
-}
-
-Vector2D Miner::get_pos()
-{
- Vector2D p = {_x,_y};
- return p;
-}
-
-void Miner::miner_draw(N5110 &lcd)
-{
- if (_direction == 1) {
- lcd.drawSprite(_x,_y,8,3,(int *)miner_right);
- }
- if (_direction == 0) {
- lcd.drawSprite(_x,_y,8,3,(int *)miner_left);
- }
-}
-void Miner::miner_land(N5110 &lcd)
-{
- _jump = (lcd.getPixel(_x+4,_y+8) || lcd.getPixel(_x-1,_y+8));
-
- _gravity = !lcd.getPixel(_x,_y+8) && !lcd.getPixel(_x+2, _y+8);
-}
-
-void Miner::miner_move(Direction d, N5110 &lcd)
-{
- if (d==E || d==NE) {
- _x++;
- _direction = 1; //chooses right facing sprite
- }
- if (d==W || d==NW) {
- _x--;
- _direction = 0; //chooses left facing sprite
- }
- if(_x > 81) {
- _x=WIDTH-3;
- }
- if(_x < 0) {
- _x=0;
- }
-}
-
-void Miner::miner_jump(N5110 &lcd, Gamepad &pad)
-{
- if(pad.check_event(Gamepad::A_PRESSED) && _jump == true) {
- _j_flag = true;
- }
- if(_j_flag == true) {
- _y--;
- _j_counter++;
- }
- if(_j_counter > 7) {
- _j_flag = false;
- }
- if(_j_flag == false) {
- _j_counter = 0;
- }
- //printf("counter %i \n", _j_counter);
- //printf("flag %d \n", _j_flag);
- //printf("jumo %d \n", _jump);
-
-}
-
-void Miner::miner_gravity(N5110 &lcd)
-{
- if(_gravity == 1) {
- _y++;
- }
-}
-
-
-void Miner::enemy_init(int i, int x, int y, int d)
-{
- _enem.ex[i] = x;
- _enem.ey[i] = y;
- _enem.distance[i] = d;
-}
-
-void Miner::enemy_move(int i, double v, N5110 &lcd)
-{
- lcd.drawSprite(_enem.ex[i],_enem.ey[i],5,3, (int *) enemy);
-
- if (_enem.eflag[i] == false) {
- _enem.ex[i] = _enem.ex[i] + v;
- _enem.counter[i]++;
- }
- if(_enem.counter[i] == _enem.distance[i]) {
- _enem.eflag[i] = true;
- }
- if (_enem.eflag[i] == true) {
- _enem.ex[i] = _enem.ex[i] - v;
- _enem.counter[i]--;
- }
- if (_enem.counter[i] == 0) {
- _enem.eflag[i] = false;
- }
-}
-
-bool Miner::enemy_collision(int i)
-{
- Vector2D p = get_pos();
-
- if (p.x < _enem.ex[i] + 2 && p.x + 2 > _enem.ex[i] && p.y < _enem.ey[i] + 4
- && p.y + 9 > _enem.ey[i]) {
- return true;
- } else {
- return false;
- }
-}
\ No newline at end of file
--- a/Miner/Miner.h Wed Apr 10 14:29:14 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-#ifndef MINER_H
-#define MINER_H
-
-#include "mbed.h"
-#include "N5110.h"
-#include "Gamepad.h"
-
-
-const int miner_right[24] = {
- 1,1,1,
- 1,1,0,
- 1,1,1,
- 0,1,0,
- 1,1,1,
- 1,1,1,
- 0,1,0,
- 0,1,1,
-
- };
-
- const int miner_left[24] = {
- 1,1,1,
- 0,1,1,
- 1,1,1,
- 0,1,0,
- 1,1,1,
- 1,1,1,
- 0,1,0,
- 1,1,0,
- };
-
-const int enemy[15] = {
-
- 1,1,1,
- 1,0,1,
- 1,1,1,
- 0,1,0,
- 1,1,1,
- };
-
-struct enemies {
- bool eflag[5];
- double ex[5];
- double ey[5];
- int counter[5];
- int distance[5];
-};
-
-class Miner
-{
-
-public:
-
- Miner();
- ~Miner();
-
- void miner_init(int x, int y);
- void miner_move(Direction d, N5110 &lcd);
- void miner_draw(N5110 &lcd);
- void miner_gravity(N5110 &lcd);
- void miner_jump(N5110 &lcd, Gamepad &pad);
- void miner_land(N5110 &lcd);
-
- void enemy_init(int i, int x, int y, int d);
- void enemy_move(int i, double v, N5110 &lcd);
- bool enemy_collision(int i);
-
- Vector2D get_pos();
-
-private:
-
- int _direction;
- int _gravity;
- bool _jump;
- int _y;
- int _x;
- bool _j_flag;
- int _j_counter;
-
- enemies _enem;
-
-};
-#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Miner/Sprites.cpp Wed Apr 10 16:20:28 2019 +0000
@@ -0,0 +1,144 @@
+#include "Sprites.h"
+
+Sprites::Sprites()
+{
+ _enem.eflag[0] = false;
+ _j_flag = false;
+ _k.key[0] = false;
+ _k.key[1] = false;
+ _k.key[2] = false;
+ _k.key[3] = false;
+ _k.key[4] = false;
+}
+
+Sprites::~Sprites()
+{
+}
+
+void Sprites::miner_init(int x, int y)
+{
+ _x = x;
+ _y = y;
+}
+
+Vector2D Sprites::get_pos()
+{
+ Vector2D p = {_x,_y};
+ return p;
+}
+
+void Sprites::miner_draw(N5110 &lcd)
+{
+ if (_direction == 1) {
+ lcd.drawSprite(_x,_y,8,3,(int *)miner_right);
+ }
+ if (_direction == 0) {
+ lcd.drawSprite(_x,_y,8,3,(int *)miner_left);
+ }
+}
+void Sprites::miner_land(N5110 &lcd)
+{
+ _jump = (lcd.getPixel(_x+4,_y+8) || lcd.getPixel(_x-1,_y+8));
+
+ _gravity = !lcd.getPixel(_x,_y+8) && !lcd.getPixel(_x+2, _y+8);
+}
+
+void Sprites::miner_move(Direction d, N5110 &lcd)
+{
+ if (d==E || d==NE) {
+ _x++;
+ _direction = 1; //chooses right facing sprite
+ }
+ if (d==W || d==NW) {
+ _x--;
+ _direction = 0; //chooses left facing sprite
+ }
+ if(_x > 81) {
+ _x=WIDTH-3;
+ }
+ if(_x < 0) {
+ _x=0;
+ }
+}
+
+void Sprites::miner_jump(N5110 &lcd, Gamepad &pad)
+{
+ if(pad.check_event(Gamepad::A_PRESSED) && _jump == true) {
+ _j_flag = true;
+ }
+ if(_j_flag == true) {
+ _y--;
+ _j_counter++;
+ }
+ if(_j_counter > 7) {
+ _j_flag = false;
+ }
+ if(_j_flag == false) {
+ _j_counter = 0;
+ }
+ //printf("counter %i \n", _j_counter);
+ //printf("flag %d \n", _j_flag);
+ //printf("jumo %d \n", _jump);
+
+}
+
+void Sprites::miner_gravity(N5110 &lcd)
+{
+ if(_gravity == true) {
+ _y++;
+ }
+}
+
+void Sprites::enemy_init(int i, int x, int y, int d)
+{
+ _enem.ex[i] = x;
+ _enem.ey[i] = y;
+ _enem.distance[i] = d;
+}
+
+void Sprites::enemy_move(int i, double v, N5110 &lcd)
+{
+ lcd.drawSprite(_enem.ex[i],_enem.ey[i],5,3, (int *) enemy);
+
+ if (_enem.eflag[i] == false) {
+ _enem.ex[i] = _enem.ex[i] + v;
+ _enem.counter[i]++;
+ }
+ if(_enem.counter[i] == _enem.distance[i]) {
+ _enem.eflag[i] = true;
+ }
+ if (_enem.eflag[i] == true) {
+ _enem.ex[i] = _enem.ex[i] - v;
+ _enem.counter[i]--;
+ }
+ if (_enem.counter[i] == 0) {
+ _enem.eflag[i] = false;
+ }
+}
+
+bool Sprites::enemy_collision(int i)
+{
+ Vector2D p = get_pos();
+
+ if (p.x < _enem.ex[i] + 2 && p.x + 2 > _enem.ex[i] && p.y < _enem.ey[i] + 4
+ && p.y + 9 > _enem.ey[i]) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void Sprites::key_collect(int k, int x, int y, N5110 &lcd, Gamepad &pad)
+{
+ if(_k.key[k] == false) {
+ lcd.drawSprite(x,y,3,4,(int *)key);
+ }
+
+ if ((lcd.getPixel(x-1,y+2) || lcd.getPixel(x+2,y-1) || lcd.getPixel(x+4,y+1)) &&
+ _k.key[k] == false) {
+ _keys++;
+ pad.tone(850,0.1);
+ lcd.drawSprite(x,y,3,4,(int *)key_collected);
+ _k.key[k]= true;
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Miner/Sprites.h Wed Apr 10 16:20:28 2019 +0000
@@ -0,0 +1,125 @@
+#ifndef SPRITES_H
+#define SPRITES_H
+
+#include "mbed.h"
+#include "N5110.h"
+#include "Gamepad.h"
+
+
+const int miner_right[24] = {
+ 1,1,1,
+ 1,1,0,
+ 1,1,1,
+ 0,1,0,
+ 1,1,1,
+ 1,1,1,
+ 0,1,0,
+ 0,1,1,
+
+ };
+
+ const int miner_left[24] = {
+ 1,1,1,
+ 0,1,1,
+ 1,1,1,
+ 0,1,0,
+ 1,1,1,
+ 1,1,1,
+ 0,1,0,
+ 1,1,0,
+ };
+
+const int enemy[15] = {
+
+ 1,1,1,
+ 1,0,1,
+ 1,1,1,
+ 0,1,0,
+ 1,1,1,
+ };
+
+const int key[12] = {
+ 1,1,0,0,
+ 1,0,1,1,
+ 1,1,0,1,
+ };
+
+const int key_collected[12] = {
+
+ 0,0,0,0,
+ 0,0,0,0,
+ 0,0,0,0,
+ };
+
+const int spike[9] = {
+
+ 1,1,1,
+ 0,1,0,
+ 1,1,1,
+ };
+
+const int door[30] = {
+
+ 1,1,1,1,1,
+ 1,0,1,0,1,
+ 1,1,0,1,1,
+ 1,0,1,0,1,
+ 1,1,0,1,1,
+ 1,0,1,0,1,
+};
+
+const int solid_block[9] = {
+
+ 1,1,1,
+ 1,0,1,
+ 1,1,1,
+ };
+
+struct enemies {
+ bool eflag[5];
+ double ex[5];
+ double ey[5];
+ int counter[5];
+ int distance[5];
+};
+
+class Sprites
+{
+
+public:
+
+ Sprites();
+ ~Sprites();
+
+ void miner_init(int x, int y);
+ void miner_move(Direction d, N5110 &lcd);
+ void miner_draw(N5110 &lcd);
+ void miner_gravity(N5110 &lcd);
+ void miner_jump(N5110 &lcd, Gamepad &pad);
+ void miner_land(N5110 &lcd);
+
+ void enemy_init(int i, int x, int y, int d);
+ void enemy_move(int i, double v, N5110 &lcd);
+ bool enemy_collision(int i);
+
+ void key_collect(int k, int x, int y, N5110 &lcd, Gamepad &pad);
+ int keys_collected();
+
+ Vector2D get_pos();
+
+
+private:
+
+ int _direction;
+ bool _gravity;
+ bool _jump;
+ int _y;
+ int _x;
+ bool _j_flag;
+ int _j_counter;
+
+ Key _key
+ enemies _enem;
+
+};
+#endif
\ No newline at end of file