
Labyrinth of the Minotaur A simple roguelike/RPG using a nokia 5110 screen
Dependencies: N5110 PowerControl mbed
Revision 0:9200b3c387ed, committed 2015-04-09
- Comitter:
- ThomasBGill
- Date:
- Thu Apr 09 17:29:22 2015 +0000
- Child:
- 1:0f774d41584c
- Commit message:
- Initial room with random corridors
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/N5110.lib Thu Apr 09 17:29:22 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/eencae/code/N5110/#780a542d5f8b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PowerControl.lib Thu Apr 09 17:29:22 2015 +0000 @@ -0,0 +1,1 @@ +PowerControl#d0fa2aeb02a4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Apr 09 17:29:22 2015 +0000 @@ -0,0 +1,212 @@ +#include "mbed.h" +#include "N5110.h" + +// vcc sce rst dc mosi clk led +N5110 lcd (p5, p6, p7, p8, p11, p13, p21); +InterruptIn Act (p22); +InterruptIn Start (p23); +InterruptIn Up (p24); +InterruptIn Down (p25); +InterruptIn Left (p26); +InterruptIn Right (p27); +AnalogIn Noise (p19); + +#define WALL 0 +#define FLOOR 1 +#define ENTER 2 +#define EXIT 3 + +#define RIGHT 0 +#define LEFT 1 +#define UP 2 +#define DOWN 3 + +//Variables +int buttonFlagA = 0; +int buttonFlagS = 0; +int buttonFlagU = 0; +int buttonFlagD = 0; +int buttonFlagL = 0; +int buttonFlagR = 0; + +int map[84][48]; + +//ISR +void ActPressed() +{ + buttonFlagA = 0; +} +void StartPressed() +{ + buttonFlagS = 0; +} +void UpPressed() +{ + buttonFlagU = 0; +} +void DownPressed() +{ + buttonFlagD = 0; +} +void LeftPressed() +{ + buttonFlagL = 0; +} +void RightPressed() +{ + buttonFlagR = 0; +} + +void Walls() +{ + //Fill map with walls + for(int i=0; i<84; i++) { + for (int j=0; j<48; j++) { + map[i][j] = WALL; + } + } +} + +void FirstRoom() +{ + //Create initial room + int si = rand()%25 + 25; + int sj = rand()%15 + 20; + + int sw = rand()%5+5; + int sh = rand()%5+5; + + for(int i = si, w = si + sw; i <w; i++) { + for (int j = sj, h = sj + sh; j <h; j++) { + map[i][j] = FLOOR; + } + } + //Create enterance in room + int ex = rand()%sw + si; + int ey = rand()%sh + sj; + map[ex][ey] = ENTER; +} + +void CorridorBuilder() +{ + //Get start point + int sx; + int sy; + int dir; + + //Find start location + for(int i=0; i<84; i++) { + for (int j=0; j<48; j++) { + + int r = rand()%6; + + if(map[i][j] == FLOOR && map[i+1][j] == WALL && r == 0) { + dir = RIGHT; + sx = i; + sy = j; + break; + } else if(map[i][j] == FLOOR && map[i-1][j] == WALL && r == 0) { + dir = LEFT; + sx = i; + sy = j; + break; + } else if(map[i][j] == FLOOR && map[i][j+1] == WALL && r == 0) { + dir = UP; + sx = i; + sy = j; + break; + } else if(map[i][j] == FLOOR && map[i][j-1] == WALL && r == 0) { + dir = DOWN; + sx = i; + sy = j; + break; + } + } + } + //Get length + int l = rand()%5 + 5; + + //Check direction of corridor + if(dir == RIGHT) { + for(int i = l; i>0; i--) { + if(map[sx+1][sy] == WALL && map[sx+1][sy+1] == WALL && map[sx+1][sy-1] == WALL) { + sx++; + map[sx][sy] = FLOOR; + } else + break; + } + } else if(dir == LEFT) { + for(int i = l; i>0; i--) { + if(map[sx-1][sy] == WALL && map[sx-1][sy+1] == WALL && map[sx-1][sy-1] == WALL){ + sx--; + map[sx][sy] = FLOOR; + }else + break; + } + } else if(dir == UP) { + for(int i = l; i>0; i--){ + if(map[sx][sy+1] == WALL && map[sx-1][sy+1] == WALL && map[sx+1][sy+1] == WALL){ + sy++; + map[sx][sy] = FLOOR; + }else + break; + } + } else if(dir == DOWN) { + for(int i = l; i>0; i--){ + if(map[sx][sy-1] == WALL && map[sx-1][sy-1] == WALL && map[sx+1][sy-1] == WALL){ + sy--; + map[sx][sy] = FLOOR; + }else + break; + } + } + +} + + +void DungeonBuilder() +{ + FirstRoom(); + + int cn = rand()%10 + 15; + + for(int i = cn; i>0; i--) { + CorridorBuilder(); + } + +} + + + +void DrawMap() +{ + //Draw map on screen + for(int i=0; i<84; i++) { + for (int j=0; j<48; j++) { + if(map[i][j] == FLOOR) { + lcd.clearPixel(i, j); + } else { + lcd.setPixel(i, j); + } + } + } + lcd.refresh(); +} + +void Dungeon() +{ + Walls(); + DungeonBuilder(); + DrawMap(); +} + +int main() +{ + srand(Noise*1000000); + lcd.init(); + + while(1) { + Dungeon(); + wait(2.0); + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Apr 09 17:29:22 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/487b796308b0 \ No newline at end of file