diff --git a/2048.c b/2048.c index 8be82a9..bbc7476 100644 --- a/2048.c +++ b/2048.c @@ -55,14 +55,29 @@ uint8_t game_move(Game *game, Direction direction) { // make it so it can work with different directions int directionality = b; // TODO: rename ugly name + if (direction == Down) { + directionality = a; + } int movement = 1; if (direction == Left || direction == Up) { - directionality = game->field_size_x - b - 1; + if(direction == Left) { + directionality = game->field_size_x - b - 1; + } else { + directionality = game->field_size_y - a - 1; + } movement = -1; } - if(field[a][directionality + movement] == 0) { - field[a][directionality+movement] = field[a][directionality]; - field[a][directionality] = 0; + + if(direction == Left || direction == Right) { + if(field[a][directionality + movement] == 0) { + field[a][directionality+movement] = field[a][directionality]; + field[a][directionality] = 0; + } + } else { + if(field[directionality + movement][b] == 0) { + field[directionality + movement][b] = field[directionality][b]; + field[directionality][b] = 0; + } } } @@ -74,16 +89,33 @@ uint8_t game_move(Game *game, Direction direction) { a = j; b = i; } - int directionality = b; + int directionality = b; // TODO: rename ugly name + if (direction == Down) { + directionality = a; + + } int movement = 1; - if (direction == Left) { - directionality = game->field_size_x - b - 1; + if (direction == Left || direction == Up) { + if(direction == Left) { + directionality = game->field_size_x - b - 1; + } else { + directionality = game->field_size_y - a - 1; + } movement = -1; } - if(field[a][directionality + movement] == field[a][directionality]) { - field[a][directionality+movement] = field[a][directionality]*2; - field[a][directionality] = 0; - j++; + // TODO: fix 444 <- 48, should be 84 + if (direction == Left || direction == Right) { + if(field[a][directionality + movement] == field[a][directionality]) { + field[a][directionality+movement] = field[a][directionality]*2; + field[a][directionality] = 0; + j++; + } + } else { + if(field[directionality + movement][b] == field[directionality][b]) { + field[directionality + movement][b] = field[directionality][b]*2; + field[directionality][b] = 0; + j++; + } } } @@ -95,15 +127,29 @@ uint8_t game_move(Game *game, Direction direction) { a = j; b = i; } - int directionality = b; + int directionality = b; // TODO: rename ugly name + if (direction == Down) { + directionality = a; + } int movement = 1; - if (direction == Left) { - directionality = game->field_size_x - b - 1; + if (direction == Left || direction == Up) { + if(direction == Left) { + directionality = game->field_size_x - b - 1; + } else { + directionality = game->field_size_y - a - 1; + } movement = -1; } - if(field[a][directionality + movement] == 0) { - field[a][directionality+movement] = field[a][directionality]; - field[a][directionality] = 0; + if(direction == Left || direction == Right) { + if(field[a][directionality + movement] == 0) { + field[a][directionality+movement] = field[a][directionality]; + field[a][directionality] = 0; + } + } else { + if(field[directionality + movement][b] == 0) { + field[directionality + movement][b] = field[directionality][b]; + field[directionality][b] = 0; + } } } }