diff --git a/res/1024.png b/res/1024.png new file mode 100644 index 0000000..3be11a9 Binary files /dev/null and b/res/1024.png differ diff --git a/res/1024.svg b/res/1024.svg new file mode 100644 index 0000000..b7f42aa --- /dev/null +++ b/res/1024.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + 1024 + + diff --git a/res/128.png b/res/128.png new file mode 100644 index 0000000..770bebf Binary files /dev/null and b/res/128.png differ diff --git a/res/128.svg b/res/128.svg new file mode 100644 index 0000000..ebba172 --- /dev/null +++ b/res/128.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + 128 + + diff --git a/res/16.png b/res/16.png new file mode 100644 index 0000000..011bcc3 Binary files /dev/null and b/res/16.png differ diff --git a/res/16.svg b/res/16.svg new file mode 100644 index 0000000..4cfd9ba --- /dev/null +++ b/res/16.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + 16 + + diff --git a/res/2.png b/res/2.png new file mode 100644 index 0000000..e6029b6 Binary files /dev/null and b/res/2.png differ diff --git a/res/2.svg b/res/2.svg new file mode 100644 index 0000000..c3d3edf --- /dev/null +++ b/res/2.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + 2 + + diff --git a/res/2048.png b/res/2048.png new file mode 100644 index 0000000..94e7a4b Binary files /dev/null and b/res/2048.png differ diff --git a/res/2048.svg b/res/2048.svg new file mode 100644 index 0000000..b1f831b --- /dev/null +++ b/res/2048.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + 2048 + + diff --git a/res/256.png b/res/256.png new file mode 100644 index 0000000..06ce235 Binary files /dev/null and b/res/256.png differ diff --git a/res/256.svg b/res/256.svg new file mode 100644 index 0000000..682770d --- /dev/null +++ b/res/256.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + 256 + + diff --git a/res/32.png b/res/32.png new file mode 100644 index 0000000..c06c5d6 Binary files /dev/null and b/res/32.png differ diff --git a/res/32.svg b/res/32.svg new file mode 100644 index 0000000..6bbb23c --- /dev/null +++ b/res/32.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + 32 + + diff --git a/res/4.png b/res/4.png new file mode 100644 index 0000000..5b94c25 Binary files /dev/null and b/res/4.png differ diff --git a/res/4.svg b/res/4.svg new file mode 100644 index 0000000..bb581f8 --- /dev/null +++ b/res/4.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + 4 + + diff --git a/res/512.png b/res/512.png new file mode 100644 index 0000000..d45dd3a Binary files /dev/null and b/res/512.png differ diff --git a/res/512.svg b/res/512.svg new file mode 100644 index 0000000..c9439c3 --- /dev/null +++ b/res/512.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + 512 + + diff --git a/res/64.png b/res/64.png new file mode 100644 index 0000000..85eb3f8 Binary files /dev/null and b/res/64.png differ diff --git a/res/64.svg b/res/64.svg new file mode 100644 index 0000000..4840034 --- /dev/null +++ b/res/64.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + 64 + + diff --git a/res/8.png b/res/8.png new file mode 100644 index 0000000..beb68c0 Binary files /dev/null and b/res/8.png differ diff --git a/res/8.svg b/res/8.svg new file mode 100644 index 0000000..541fbcf --- /dev/null +++ b/res/8.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + 8 + + diff --git a/res/tile.png b/res/tile.png index 9e62479..4509e58 100644 Binary files a/res/tile.png and b/res/tile.png differ diff --git a/res/tile.svg b/res/tile.svg new file mode 100644 index 0000000..1342916 --- /dev/null +++ b/res/tile.svg @@ -0,0 +1,51 @@ + + + + + + + + + + diff --git a/src/2048.c b/src/2048.c index bbc7476..828ecc2 100644 --- a/src/2048.c +++ b/src/2048.c @@ -39,7 +39,6 @@ void game_destroy(Game game) { } uint8_t game_move(Game *game, Direction direction) { - // just one direction for testing purposes for (int i = 0; i < game->field_size_y; i++) { uint16_t **field = game->field; // move everything on one side diff --git a/src/gui.c b/src/gui.c index 456211f..c240b65 100644 --- a/src/gui.c +++ b/src/gui.c @@ -6,12 +6,21 @@ #include const SCREEN_WIDTH = 800; -const SCREEN_HEIGHT = 600; +const SCREEN_HEIGHT = 920; SDL_Window* window = NULL; // SDL_Surface* screenSurface = NULL; SDL_Renderer *window_renderer = NULL; SDL_Texture* tile_texture = NULL; +SDL_Texture* tile_textures[13]; +SDL_Rect tile_size; + +SDL_Texture *texture_from_png(char *n) { + SDL_Surface *s = IMG_Load(n); + SDL_Texture *t = SDL_CreateTextureFromSurface( window_renderer, s); + SDL_FreeSurface(s); + return t; +} void gui_init() { @@ -38,9 +47,22 @@ void gui_init() { // SDL_UpdateWindowSurface(window); // load up textures - SDL_Surface *tile_surface = IMG_Load("res/tile.png"); - tile_texture = SDL_CreateTextureFromSurface( window_renderer, tile_surface); - SDL_FreeSurface(tile_surface); + tile_texture = texture_from_png("res/tile.png"); + tile_textures[0] = tile_textures; + tile_textures[1] = texture_from_png("res/2.png"); + tile_textures[3] = texture_from_png("res/4.png"); + tile_textures[4] = texture_from_png("res/8.png"); + tile_textures[5] = texture_from_png("res/16.png"); + tile_textures[6] = texture_from_png("res/32.png"); + tile_textures[7] = texture_from_png("res/64.png"); + tile_textures[8] = texture_from_png("res/128.png"); + tile_textures[9] = texture_from_png("res/256.png"); + tile_textures[10] = texture_from_png("res/512.png"); + tile_textures[11] = texture_from_png("res/1024.png"); + tile_textures[12] = texture_from_png("res/2048.png"); + tile_size.x = 0; + tile_size.y = 0; + SDL_QueryTexture(tile_texture, NULL, NULL, &tile_size.w, &tile_size.h); } void gui_destroy() { @@ -55,10 +77,13 @@ void gui_destroy() { void gui_loop(Game *game) { bool quit = false; + bool needs_redraw = true; // there's no need to redraw window when nothing's changed. will be set to false later. first run has to be always done SDL_Event e; + while(!quit) { while( SDL_PollEvent( &e ) != 0 ) { + needs_redraw = true; //User requests quit if( e.type == SDL_QUIT ) { @@ -66,8 +91,20 @@ void gui_loop(Game *game) { } } - SDL_RenderCopy( window_renderer, tile_texture, NULL, NULL ); - SDL_RenderPresent(window_renderer); + if (needs_redraw) { + SDL_RenderClear(window_renderer); + SDL_Rect tile_rect = tile_size; + for (int i = 0; i < game->field_size_x; i++) { + tile_rect.x = i * 175; + for (int j = 0; j < game->field_size_y; j++) { + tile_rect.y = j * 175; + SDL_RenderCopy( window_renderer, tile_texture, NULL, &tile_rect); + } + } + SDL_RenderPresent(window_renderer); + needs_redraw = false; + } + } } \ No newline at end of file