From f25b57e018b6dab4e8eca274d668e036329fa6f8 Mon Sep 17 00:00:00 2001 From: Aaron Bulmahn Date: Thu, 17 Apr 2014 21:46:34 +0200 Subject: [PATCH] fix logic: combine tiles on the right side --- 2048_curses.c | 30 ++++++++++++++++++++++++++++-- 2048_no_curses.c | 30 ++++++++++++++++++++++++++++-- 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/2048_curses.c b/2048_curses.c index 9098e7c..34803fa 100644 --- a/2048_curses.c +++ b/2048_curses.c @@ -61,7 +61,7 @@ char *file; /* Merges adjacent squares of the same value together in a certain direction */ void merge(int d) { - if (d == DL || d == DR) { + if (d == DL) { int i, j; for (i = 0; i < SZ; i++) { for (j = 0; j < SZ; j++) { @@ -74,7 +74,7 @@ void merge(int d) } } } - else { + else if (d == DU) { int i, j; for (i = 0; i < SZ; i++) { for (j = 0; j < SZ; j++) { @@ -87,6 +87,32 @@ void merge(int d) } } } + else if (d == DR) { + int i, j; + for (i = SZ - 1; i >= 0; i--) { + for (j = SZ - 1; j >= 0; j--) { + if (j > 0 && g[i][j] && g[i][j] == g[i][j - 1]) { + g[i][j] <<= 1; + sl += g[i][j]; + s += g[i][j]; + g[i][j-- - 1] = 0; + } + } + } + } + else if (d == DD) { + int i, j; + for (i = SZ - 1; i >= 0; i--) { + for (j = SZ - 1; j >= 0; j--) { + if (j > 0 && g[j][i] && g[j][i] == g[j - 1][i]) { + g[j][i] <<= 1; + sl += g[j][i]; + s += g[j][i]; + g[j-- - 1][i] = 0; + } + } + } + } } diff --git a/2048_no_curses.c b/2048_no_curses.c index f936494..73ed6d8 100644 --- a/2048_no_curses.c +++ b/2048_no_curses.c @@ -61,7 +61,7 @@ char *file; /* Merges adjacent squares of the same value together in a certain direction */ void merge(int d) { - if (d == DL || d == DR) { + if (d == DL) { int i, j; for (i = 0; i < SZ; i++) { for (j = 0; j < SZ; j++) { @@ -74,7 +74,7 @@ void merge(int d) } } } - else { + else if (d == DU) { int i, j; for (i = 0; i < SZ; i++) { for (j = 0; j < SZ; j++) { @@ -87,6 +87,32 @@ void merge(int d) } } } + else if (d == DR) { + int i, j; + for (i = SZ - 1; i >= 0; i--) { + for (j = SZ - 1; j >= 0; j--) { + if (j > 0 && g[i][j] && g[i][j] == g[i][j - 1]) { + g[i][j] <<= 1; + sl += g[i][j]; + s += g[i][j]; + g[i][j-- - 1] = 0; + } + } + } + } + else if (d == DD) { + int i, j; + for (i = SZ - 1; i >= 0; i--) { + for (j = SZ - 1; j >= 0; j--) { + if (j > 0 && g[j][i] && g[j][i] == g[j - 1][i]) { + g[j][i] <<= 1; + sl += g[j][i]; + s += g[j][i]; + g[j-- - 1][i] = 0; + } + } + } + } }