Classic 15 puzzle

Dependencies:   PokittoLib

Revision:
2:6d5ef2d31e52
Parent:
0:b0c9d3b227f6
--- a/main.c	Tue May 08 17:40:58 2018 +0000
+++ b/main.c	Tue May 15 19:25:51 2018 +0000
@@ -1,5 +1,5 @@
 
-#include "Pokitto.h" // include Pokitto library
+#include "Pokitto.h"
 #include <cstddef>
 #include "gfx.h"
 #include "math.h"
@@ -8,7 +8,7 @@
 #define GRID_ROWS 4
 #define TILE_SIZE 40
 #define SHUFFLE_MOVES 20
-#define MAX_LEVEL 6
+#define MAX_LEVEL 7
 
 Pokitto::Core g;
 
@@ -19,6 +19,8 @@
 bool HighlightNumbers=false;
 uint16_t FrameCount=0;
 
+char *AuthorActive;
+
 uint16_t Score=0;
 
 typedef enum
@@ -57,8 +59,9 @@
 
 const char * Info =
 {
-    "Pok15 is the remake of the classic 15-puzzle. \r\n"
-    "Purpose of the game, is to slide all the tiles to put them in order.\r\n"
+    "Pok15 is the remake of the classic 15-puzzle.\r\n"
+    "Purpose of the game:slide all tiles in order.\r\n"
+    "Press B to highlight.\r\n"
     "\r\n"
     "Have fun."
 };
@@ -216,7 +219,6 @@
     //During shuffle win is not valid
     if(ShuffleCount>0) return false;
 
-    bool sequenceOk=true;
     int8_t index=0;
     for (int8_t r=0; r<GRID_ROWS; r++)
     {
@@ -287,38 +289,49 @@
     }
 }
 
-
 void DrawLevel(int level,bool drawBorder,bool drawNumbers,bool highlightNumbers,bool drawFull)
 {
     switch(level)
     {
     case 0:
-        DrawTiles(City_pal,City,drawBorder,drawNumbers,highlightNumbers,drawFull);
+        DrawTiles(jonne_pal,jonne,drawBorder,drawNumbers,highlightNumbers,drawFull);
         TextColor=7;
+        AuthorActive="Art by @jonne";
         break;
     case 1:
-        DrawTiles(Forest_pal,Forest,drawBorder,drawNumbers,highlightNumbers,drawFull);
+        DrawTiles(Vampirics_pal,Vampirics,drawBorder,drawNumbers,highlightNumbers,drawFull);
         TextColor=7;
+        AuthorActive="by Vampirics";
         break;
     case 2:
-        DrawTiles(StarWars_pal,StarWars,drawBorder,drawNumbers,highlightNumbers,drawFull);
+        DrawTiles(adekto_pal,adekto,drawBorder,drawNumbers,highlightNumbers,drawFull);
         TextColor=7;
+        AuthorActive="by @adekto";
         break;
     case 3:
-        DrawTiles(Mage_pal,Mage,drawBorder,drawNumbers,highlightNumbers,drawFull);
+        DrawTiles(JAP_pal,JAP,drawBorder,drawNumbers,highlightNumbers,drawFull);
         TextColor=7;
+        AuthorActive="by JAP";
         break;
     case 4:
-        DrawTiles(Gnome_pal,Gnome,drawBorder,drawNumbers,highlightNumbers,drawFull);
+        DrawTiles(lancelot_gao_pal,lancelot_gao,drawBorder,drawNumbers,highlightNumbers,drawFull);
         TextColor=7;
+        AuthorActive="by lancelot_gao";
         break;
     case 5:
-        DrawTiles(Kid_pal,Kid,drawBorder,drawNumbers,highlightNumbers,drawFull);
+        DrawTiles(jonne2_pal,jonne2,drawBorder,drawNumbers,highlightNumbers,drawFull);
         TextColor=7;
+        AuthorActive="by @jonne";
         break;
     case 6:
-        DrawTiles(Sword_pal,Sword,drawBorder,drawNumbers,highlightNumbers,drawFull);
+        DrawTiles(buch_pal,buch,drawBorder,drawNumbers,highlightNumbers,drawFull);
         TextColor=7;
+        AuthorActive="by Buch";
+        break;
+    case 7:
+        DrawTiles(jonne3_pal,jonne3,drawBorder,drawNumbers,highlightNumbers,drawFull);
+        TextColor=7;
+        AuthorActive="by @jonne";
         break;
     default:
         break;
@@ -346,6 +359,7 @@
     g.display.print(LevelActive+1);
 }
 
+
 void PrintCenter(uint8_t x,uint8_t y,char text[],int lenght)
 {
     g.display.print(x-((lenght*g.display.fontWidth)/2),
@@ -464,17 +478,32 @@
             break;
         }
     }
+}
 
+uint16_t StringLenght(char *s)
+{
+    uint16_t l=0;
+    while(true)
+    {
+        if(s[l]==NULL)
+            return l;
+        l++;
+    }
 }
 
 void StateVictory()
 {
     g.display.clear();
     DrawLevel(LevelActive,false,false,false,true);
+
+    //Draw author
     g.display.color=random(15);
-    g.display.drawRect(10,1,g.display.width-20,g.display.height-2);
+    g.display.print((g.display.width - strlen(AuthorActive)*g.display.fontWidth)/2 ,0,AuthorActive);
 
-    if(A_B_Pressed() || FrameCount>40)
+    g.display.color=random(15);
+    g.display.drawRect(g.display.width/2-80,10,160,160);
+
+    if(A_B_Pressed() || FrameCount>600)
     {
         Score+=(LevelActive+1)*1000/(PlayerMoves+1);
         ssm=SSM::Outro;
@@ -540,7 +569,7 @@
     g.display.color=random(0,15);
     g.display.print((g.display.width-(g.display.fontWidth*7))/2,
                     (g.display.height-g.display.fontHeight)/2,
-                    " YOU WIN!");
+                    "WELL DONE");
     //g.display.color=random(0,15);
     g.display.setCursor((g.display.width-(g.display.fontWidth*8))/2,
                         (g.display.height-g.display.fontHeight)/2+10);