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 MotionSensor
Diff: Room/Room.cpp
- Revision:
- 28:98848e6a77a2
- Parent:
- 27:a1b41626f57c
- Child:
- 29:6b8411bb040a
diff -r a1b41626f57c -r 98848e6a77a2 Room/Room.cpp
--- a/Room/Room.cpp Mon Apr 29 10:39:09 2019 +0000
+++ b/Room/Room.cpp Thu May 02 21:30:49 2019 +0000
@@ -1,38 +1,32 @@
#include "Room.h"
// Constructor
-Room::Room()
+Room::Room(int no_of_enemies)
{
for (int i = 0; i < MAX_ENEMIES; i++)
{
- valid_enemies[i] = false;
+ valid_enemies[i] = i < no_of_enemies;
+ if (i < no_of_enemies) {
+ enemies_type[i] = rand() % 2;
+ }
}
- enemies[0] = new Headless(20, 20);
- valid_enemies[0] = true;
- enemies[1] = new Snake(20, 30);
- valid_enemies[1] = true;
- enemies[2] = new Snake(60, 30);
- valid_enemies[2] = true;
- _type = 0;
+ _room_type = 0;
for (int layer = 0; layer < 3; layer++) {
for (int i = 0; i < screen_width; i++) {
for (int j = 0; j < screen_height; j++) {
- _current_map[layer][j][i] = level_map[_type][layer][j][i];
+ _current_map[layer][j][i] = level_map[_room_type][layer][j][i];
}
}
}
- for(int n = 0; n < 4; n++){
- _doorways[n] = true;
- };
+ _doorways[0] = true;
+ _doorways[1] = true;
+ _doorways[2] = true;
+ _doorways[3] = true;
}
Room::~Room()
{
- for (int i = 0; i < MAX_ENEMIES; i++) {
- if (valid_enemies[i]) {
- delete enemies[i];
- }
- };
+ terminate();
}
// Accessors
@@ -41,24 +35,34 @@
}
// Functions
-void Room::init()
+void Room::load()
{
- if(_doorways[0]){ // N
- overlap(36, 0, 12, 10, (int *)wall_n[0], (int *)_current_map[0]);
- overlap(36, 0, 12, 10, (int *)wall_n[1], (int *)_current_map[1]);
+ for (int i = 0; i<4; i++) {
+ if (!_doorways[i]){
+ overlap_wall(i); // Drawing walls on current map
+ }
}
- if(_doorways[1]){ // E
- overlap(81, 22, 3, 11, (int *)wall_x[0], (int *)_current_map[0]);
- overlap(81, 22, 3, 11, (int *)wall_x[0], (int *)_current_map[1]);
+ for (int i = 0; i < MAX_ENEMIES; i++) {
+ if (valid_enemies[i]) {
+ switch(enemies_type[i]){
+ case 0 :
+ enemies[i] = new Headless(20, 20);
+ break;
+ case 1 :
+ enemies[i] = new Snake(20, 30);
+ break;
+ }
+ }
}
- if(_doorways[2]){ // S
- overlap(36, 45, 12, 3, (int *)wall_s[0], (int *)_current_map[0]);
- overlap(36, 45, 12, 3, (int *)wall_s[1], (int *)_current_map[1]);
- }
- if(_doorways[3]){ // W
- overlap(0, 22, 3, 11, (int *)wall_x[1], (int *)_current_map[0]);
- overlap(0, 22, 3, 11, (int *)wall_x[1], (int *)_current_map[1]);
- }
+}
+
+void Room::unload()
+{
+ for (int i = 0; i < MAX_ENEMIES; i++) {
+ if (valid_enemies[i]) {
+ delete enemies[i];
+ }
+ };
}
void Room::draw_room(N5110 &lcd)
@@ -68,7 +72,7 @@
void Room::draw_room_overlay(N5110 &lcd)
{
- lcd.drawSprite(0, 0, screen_height, screen_width, (int *)_current_map[2]);
+ lcd.drawSpriteTransparent(0, 0, screen_height, screen_width, (int *)_current_map[2]);
}
void Room::overlap(int x, int y, int width, int height, int * object, int * map)
@@ -78,4 +82,30 @@
*((map+(y+j)*screen_width)+(x+i)) = *((object+j*width)+i);
}
}
+}
+
+void Room::overlap_wall(int side)
+{
+ switch(side) {
+ case 0 : // N
+ overlap(36, 0, 12, 10, (int *)wall_n[0], (int *)_current_map[0]);
+ overlap(36, 0, 12, 10, (int *)wall_n[1], (int *)_current_map[1]);
+ overlap(36, 0, 12, 10, (int *)wall_n[1], (int *)_current_map[2]);
+ break;
+ case 1 : // E
+ overlap(81, 22, 3, 11, (int *)wall_x[0], (int *)_current_map[0]);
+ overlap(81, 15, 3, 11, (int *)wall_x[0], (int *)_current_map[1]);
+ overlap(81, 15, 3, 11, (int *)wall_x[0], (int *)_current_map[2]);
+ break;
+ case 2: // S
+ overlap(36, 45, 12, 3, (int *)wall_s[0], (int *)_current_map[0]);
+ overlap(36, 45, 12, 3, (int *)wall_s[1], (int *)_current_map[1]);
+ overlap(36, 45, 12, 3, (int *)wall_s[1], (int *)_current_map[2]);
+ break;
+ case 4 : // W
+ overlap(0, 22, 3, 11, (int *)wall_x[1], (int *)_current_map[0]);
+ overlap(0, 15, 3, 11, (int *)wall_x[1], (int *)_current_map[1]);
+ overlap(0, 15, 3, 11, (int *)wall_x[1], (int *)_current_map[2]);
+ break;
+ }
}
\ No newline at end of file