ELEC2645 (2018/19) / Mbed 2 deprecated el17arm

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
el17arm
Date:
Wed Apr 10 16:20:28 2019 +0000
Parent:
30:6d6b48fe3679
Commit message:
back up

Changed in this revision

Gameengine/Gameengine.cpp Show annotated file Show diff for this revision Revisions of this file
Gameengine/Gameengine.h Show annotated file Show diff for this revision Revisions of this file
Level1/Level1.cpp Show annotated file Show diff for this revision Revisions of this file
Level1/Level1.h Show annotated file Show diff for this revision Revisions of this file
Levelengine/Levelengine.h Show annotated file Show diff for this revision Revisions of this file
Miner/Miner.cpp Show diff for this revision Revisions of this file
Miner/Miner.h Show diff for this revision Revisions of this file
Miner/Sprites.cpp Show annotated file Show diff for this revision Revisions of this file
Miner/Sprites.h Show annotated file Show diff for this revision Revisions of this file
--- 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