Labyrinth of the Minotaur A simple roguelike/RPG using a nokia 5110 screen

Dependencies:   N5110 PowerControl mbed

Files at this revision

API Documentation at this revision

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

N5110.lib Show annotated file Show diff for this revision Revisions of this file
PowerControl.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /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