]> git.lizzy.rs Git - ttfe.git/blobdiff - main.c
Colored numbers
[ttfe.git] / main.c
diff --git a/main.c b/main.c
index 963d9e4f7aaa3e8254660e5cad989c106b4f78ef..335acf954ec883bd2683bd6e4bef12c00000d6d8 100644 (file)
--- a/main.c
+++ b/main.c
@@ -386,7 +386,7 @@ void merge_east(board *b) {
        }
 }
 
-void merge_west(board *b) {    
+void merge_west(board *b) {
        for(int i = 1; i < 4; ++i) {
                for(int j = 0; j < 4; ++j) {
                        if(b->x[i][j] != 0 && b->x[i-1][j] == b->x[i][j]) {
@@ -399,11 +399,27 @@ void merge_west(board *b) {
        }
 }
 
+void center_print(uint n, int width)
+{
+    char s[20] = {'\0'};
+    int len;
+    sprintf(s, "%u", n);
+    len = strlen(s);
+    if (len >= width)  {
+        printf("%s", s);
+    } else {
+        int remaining = width - len;
+        int spaces_right = remaining / 2;
+        int spaces_left = remaining - spaces_right;
+        printf("%*s%s%*s", spaces_left, "", s, spaces_right, "");
+    }
+}
+
 void print_sep(const char *left, const char *right, const char *cross, const char *line)
 {
        printf("%s", left);
        for(int i = 0; i < 4; i++) {
-               for(int j = 0; j < 4; j++)
+               for(int j = 0; j < 6; j++)
                        printf("%s", line);
                if(i == 3)
                        printf("%s", right);
@@ -413,16 +429,35 @@ void print_sep(const char *left, const char *right, const char *cross, const cha
        printf("\n");
 }
 
+uint mylog2(uint n) {
+       uint i;
+
+       for (i = 0; ! (n & 1); i++)
+               n >>= 1;
+
+       return i;
+}
+
 void print_board_line(board *b, int l) {
        printf("\u2503");
 
        for(int i = 0; i < 4; i++) {
                uint n = b->x[i][l];
 
-               if(n == 0)
-                       printf("    ");
-               else
-                       printf("%4u", n);
+               if(n == 0) {
+                       printf("      ");
+               } else {
+                       uint c = mylog2(n);
+
+                       if (c > 6) {
+                               c -= 6;
+                               printf("\e[1m");
+                       }
+
+                       printf("\e[3%1um", c);
+                       center_print(n, 6);
+                       printf("\e[0m");
+               }
 
                if(i == 3)
                        printf("\u2503");
@@ -431,6 +466,7 @@ void print_board_line(board *b, int l) {
        }
 
        printf("\n");
+       print_sep("\u2503", "\u2503", "\u2502", " ");
 
        if(l == 3)
                print_sep("\u2517", "\u251B", "\u2537", "\u2501");
@@ -440,7 +476,7 @@ void print_board_line(board *b, int l) {
 
 void print_board(board *b) {
        printf("\e[2J\e[0;0H");
-       printf("Score: %u\n", b->points);
+       printf("\e[1mScore: \e[0m%u\n", b->points);
        print_sep("\u250F", "\u2513", "\u252F", "\u2501");
        for(int i = 0; i < 4; ++i) {
                print_board_line(b, i);