}
}
-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]) {
}
}
+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);
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");
}
printf("\n");
+ print_sep("\u2503", "\u2503", "\u2502", " ");
if(l == 3)
print_sep("\u2517", "\u251B", "\u2537", "\u2501");
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);