diff --git a/2048.c b/2048.c index 8ef90e8..d887066 100644 --- a/2048.c +++ b/2048.c @@ -1,4 +1,19 @@ #include "2048.h" +#include +#include + +void game_add_block(Game game) { + start: + size_t x, y; + int value; + x = rand() % game.field_size; + y = rand() % game.field_size; + value = (rand() % 2) + 1; + if(game.field[x][y] != 0) + game.field[x][y] = value * 2; + else + goto start; +} Game game_init(size_t field_size) { Game game; @@ -8,6 +23,10 @@ Game game_init(size_t field_size) { for (size_t i = 0; i < field_size; i++) { game.field[i] = calloc(field_size, sizeof(uint16_t) * field_size); } + + time_t t; + srand((unsigned) time(&t)); + game_add_block(game); return game; } diff --git a/2048.h b/2048.h index f47057a..fc01302 100644 --- a/2048.h +++ b/2048.h @@ -5,10 +5,11 @@ #define HEADER_2048 typedef enum Direction { - up, - down, - right, - left + NoDirection, + Up, + Down, + Right, + Left } Direction; typedef struct Game diff --git a/tui.c b/tui.c index a5c1946..838f711 100644 --- a/tui.c +++ b/tui.c @@ -2,6 +2,9 @@ #include #include +const space_between_cells_x = 6; +const space_between_cells_y = 2; + // entering and leaving screen using ANSI escape sequence void tui_init() { initscr(); @@ -16,10 +19,39 @@ void tui_destroy() {} void tui_loop(Game *game) { while(true){ char input = getch(); - // up - 3, 107, 56 - // down - 2, 106, 50 - // left - 4, 104, 52 - // right - 5, 108, 54 - // fprintf(stderr, "%d", input); + Direction dir = NoDirection; + // these are not magic numbers + // these are just codes for arrows, + // numpad and Vim bindings + switch (input) { + case 3: + case 107: + case 56: + dir = Up; + break; + case 2: + case 106: + case 50: + dir = Down; + break; + case 4: + case 104: + case 52: + dir = Left; + break; + case 5: + case 108: + case 54: + dir = Right; + break; + } + game_move(game, dir); + + // printing the game state is fun + for (size_t i = 0; i < game->field_size; i++) { + for (size_t j = 0; j < game->field_size; j++) { + mvprintw(i * space_between_cells_y, j * space_between_cells_x, "%d", game->field[i][j]); + } + } } } \ No newline at end of file