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

Dependencies:   N5110 PowerControl mbed

Revision:
28:b3a597b38b60
Parent:
27:1ad2408ba702
Child:
29:89bc8c8aa8ac
--- a/Game.cpp	Fri May 08 11:51:23 2015 +0000
+++ b/Game.cpp	Fri May 08 22:24:44 2015 +0000
@@ -67,17 +67,39 @@
     writeDataToFile();
 }
 
-//Game functions
+//Graphic functions
 
-void DrawGraphic(int p, int x, int y)
+void DrawGraphic(int p, int y, int x)
 {
-    if(p == 0) {
-        for(int i = 0; i < 38; i++) {
-            for(int j = 0; j < 34; j++) {
+
+    for(int i = 0; i < 38; i++) {
+        for(int j = 0; j < 38; j++) {
 
-
+            if(p == 0 ) {
                 if(HugeRat[i][j] == 1) {
-
+                    lcd.setPixel(y+i, x+j);
+                }
+            } else if(p == 1 ) {
+                if(Goblin[i][j] == 1) {
+                    lcd.setPixel(y+i, x+j);
+                }
+            } else if(p == 2 ) {
+                if(Skeleton[i][j] == 1) {
+                    lcd.setPixel(y+i, x+j);
+                }
+            } else if(p == 3 ) {
+                if(Wraith[i][j] == 1) {
+                    lcd.setPixel(y+i, x+j);
+                }
+                if(rand()%4 == 1) {
+                    lcd.setPixel(y+i, x+j);
+                }
+            } else if(p == 4 ) {
+                if(Ogre[i][j] == 1) {
+                    lcd.setPixel(y+i, x+j);
+                }
+            } else if(p == 5 ) {
+                if(Minotaur[i][j] == 1) {
                     lcd.setPixel(y+i, x+j);
                 }
             }
@@ -85,9 +107,23 @@
     }
 }
 
+void FlashScreen(int n)
+{
+    for (int i = 0; i<n; i++) {
+        lcd.inverseMode();
+        lcd.refresh();
+        wait(0.2);
+        lcd.normalMode();
+        lcd.refresh();
+        wait(0.2);
+    }
+}
+
+//Game functions
+
 void Intro()
 {
-    
+
     lcd.clear();
     lcd.printString("Labyrinth", 15, 1);
     lcd.printString("of the", 24, 2);
@@ -216,9 +252,7 @@
 {
     while (1) {
 
-        //level++;
-
-        level = 5;
+        level++;
 
         score = score + 100;
 
@@ -226,10 +260,12 @@
 
         LevelScreen();
 
-        RevealMap(); //Uncomment for debugging to view map
+        //RevealMap(); //Uncomment for debugging to view map
 
         while (1) {
 
+            srand(Noise * 1000000);
+
             ActFlag = 0;
             StartFlag = 0;
             DirFlag = 0;
@@ -348,7 +384,7 @@
 void Fight()
 {
     int m;
-    
+
     lcd.clear();
 
     if(BossFight) {
@@ -363,29 +399,26 @@
 
         if (mr > 4) {
             mr = 4;
-            lcd.printString("FIGHT!", 24, 2);
         }
 
+        lcd.printString("FIGHT!", 24, 2);
+
         m = rand() % mr;
     }
 
     int mh = EnemyList[m].EHealth;
 
-    for (int i = 0; i<5; i++) {
-        lcd.inverseMode();
-        lcd.refresh();
-        wait(0.2);
-        lcd.normalMode();
-        lcd.refresh();
-        wait(0.2);
-    }
+    FlashScreen(5);
+
+    char buffer1[14];
+    int write = sprintf(buffer1, "%d/%d", mh, EnemyList[m].EHealth); // print formatted data to buffer
 
-    if(m==0) {
-        lcd.clear();
-        DrawGraphic(m, 1, 1);
-        lcd.refresh();
-        wait(2.0);
-    }
+    lcd.clear();
+    lcd.printString(EnemyList[m].EName, 0, 0);
+    lcd.printString(buffer1, 54, 0);
+    DrawGraphic(m, 23, 6);
+    lcd.refresh();
+    wait(2.0);
 
     bool menu = 1;
 
@@ -397,8 +430,7 @@
         lcd.clear();
 
         lcd.printString(EnemyList[m].EName, 0, 0);
-        char buffer1[14];
-        int write = sprintf(buffer1, "%d/%d", mh, EnemyList[m].EHealth); // print formatted data to buffer
+        write = sprintf(buffer1, "%d/%d", mh, EnemyList[m].EHealth); // print formatted data to buffer
         lcd.printString(buffer1, 54, 0);
 
         lcd.printString("You", 0, 2);
@@ -432,6 +464,15 @@
                     }
                     mh = mh - damage; //Apply damage and calculate the monster's health
 
+                    char damBuffer[14];
+                    write = sprintf(damBuffer,"-%d", damage);
+
+                    lcd.clear();
+                    DrawGraphic(m, 23, 6);
+                    lcd.printString(damBuffer, 62, 2);
+                    FlashScreen(3);
+
+
                     char buffer3[14];
                     write = sprintf(buffer3, "for %d damage", damage); // print formatted data to buffer