From 4e1b5e0deaf9c05dabe9fb7a8bb5437a8b60b55b Mon Sep 17 00:00:00 2001 From: Eero Holmala Date: Mon, 24 Apr 2023 14:15:46 +0300 Subject: [PATCH] Render grid via sdl for TTT --- TTT/.vscode/settings.json | 8 ++ TTT/.vscode/tasks.json | 28 +++++ TTT/App.cpp | 221 ++++++++++++++++++++++++++++++++++++++ TTT/App.hh | 47 ++++++++ TTT/BTNPenguin.png | Bin 0 -> 8558 bytes TTT/CMakeLists.txt | 11 +- TTT/SYMBOL_O.png | Bin 0 -> 512 bytes TTT/SYMBOL_X.png | Bin 0 -> 498 bytes TTT/TTT_WALL.png | Bin 0 -> 618 bytes TTT/main.cpp | 14 ++- 10 files changed, 323 insertions(+), 6 deletions(-) create mode 100644 TTT/.vscode/settings.json create mode 100644 TTT/.vscode/tasks.json create mode 100644 TTT/App.cpp create mode 100644 TTT/App.hh create mode 100644 TTT/BTNPenguin.png create mode 100644 TTT/SYMBOL_O.png create mode 100644 TTT/SYMBOL_X.png create mode 100644 TTT/TTT_WALL.png diff --git a/TTT/.vscode/settings.json b/TTT/.vscode/settings.json new file mode 100644 index 0000000..1568bed --- /dev/null +++ b/TTT/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "files.associations": { + "xstring": "cpp", + "xutility": "cpp", + "map": "cpp", + "vector": "cpp" + } +} \ No newline at end of file diff --git a/TTT/.vscode/tasks.json b/TTT/.vscode/tasks.json new file mode 100644 index 0000000..6532339 --- /dev/null +++ b/TTT/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: cl.exe build active file", + "command": "cl.exe", + "args": [ + "/Zi", + "/EHsc", + "/nologo", + "/Fe${fileDirname}\\${fileBasenameNoExtension}.exe", + "${file}" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$msCompile" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/TTT/App.cpp b/TTT/App.cpp new file mode 100644 index 0000000..835bb31 --- /dev/null +++ b/TTT/App.cpp @@ -0,0 +1,221 @@ +#include "App.hh" + +namespace TTT +{ + +App::App(int width, int height) : + m_WindowHeight(height), m_WindowWidth(width), m_Close(0), m_GridHeight(5), m_GridWidth(5) +{ + // returns zero on success else non-zero + if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { + SDL_LogCritical(0,"error initializing SDL: %s\n", SDL_GetError()); + } + m_Window = SDL_CreateWindow("Tic-Tac-Toe", // creates a window + SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, + m_WindowHeight, m_WindowHeight, 0); + + // Initialize grid. Look at this transposed. + auto pair = std::pair(); + pair.second = WALL; + m_Grid = { + { pair, pair, pair, pair, pair }, + { pair, pair, pair, pair, pair }, + { pair, pair, pair, pair, pair }, + { pair, pair, pair, pair, pair }, + { pair, pair, pair, pair, pair } + }; + + m_Grid[0][0].second = NONE; + + + // triggers the program that controls + // your graphics hardware and sets flags + Uint32 render_flags = SDL_RENDERER_ACCELERATED; + + // creates a renderer to render our images + m_Renderer = SDL_CreateRenderer(m_Window, -1, render_flags); + + // please provide a path for your image + SDL_Surface* wall_surface = IMG_Load("./res/TTT_WALL.png"); + SDL_Surface* symbol_x_surface = IMG_Load("./res/SYMBOL_X.png"); + SDL_Surface* symbol_o_surface = IMG_Load("./res/SYMBOL_O.png"); + + // loads image to our graphics hardware memory. + m_Textures[TTT::WALL] = SDL_CreateTextureFromSurface(m_Renderer, wall_surface); + m_Textures[TTT::SYMBOL_X] = SDL_CreateTextureFromSurface(m_Renderer, symbol_x_surface); + m_Textures[TTT::SYMBOL_O] = SDL_CreateTextureFromSurface(m_Renderer, symbol_o_surface); + + // clears surfaces from main-memory. + SDL_FreeSurface(wall_surface); + SDL_FreeSurface(symbol_x_surface); + SDL_FreeSurface(symbol_o_surface); + + // let us control our image position + // so that we can move it with our keyboard. + SDL_Rect dest; + SDL_Rect dest2; + // connects our texture with dest to control position + SDL_QueryTexture(m_Textures[TTT::WALL], NULL, NULL, &dest.w, &dest.h); + SDL_QueryTexture(m_Textures[TTT::SYMBOL_O], NULL, NULL, &dest2.w, &dest2.h); + + // adjust height and width of our image box. + // dest.w /= 6; + // dest.h /= 6; + + // sets initial x-position of object + dest.x = (m_WindowWidth - dest.w) / 2; + dest2.x = (m_WindowWidth - dest2.w) / 2; + // sets initial y-position of object + dest.y = (m_WindowHeight - dest.h) / 2; + dest2.y = (m_WindowHeight - dest2.h) / 2; + + DrawGrid(); + + // speed of box + int speed = 300; + + // animation loop + while (!m_Close) { + SDL_Event event; + + // Events management + while (SDL_PollEvent(&event)) { + switch (event.type) { + + case SDL_QUIT: + // handling of close button + m_Close = 1; + break; + case SDL_MOUSEBUTTONDOWN: + switch (event.button.button) + { + case SDL_BUTTON(SDL_BUTTON_LEFT): + SDL_LogInfo(0, "LEFT CLICK (%d, %d)\n", event.motion.x, event.motion.y); + break; + default: + break; + } + break; + case SDL_KEYDOWN: + // keyboard API for key pressed + switch (event.key.keysym.scancode) { + case SDL_SCANCODE_ESCAPE: + m_Close = 1; + break; + case SDL_SCANCODE_W: + case SDL_SCANCODE_UP: + dest.y -= speed / 30; + break; + case SDL_SCANCODE_A: + case SDL_SCANCODE_LEFT: + dest.x -= speed / 30; + break; + case SDL_SCANCODE_S: + case SDL_SCANCODE_DOWN: + dest.y += speed / 30; + break; + case SDL_SCANCODE_D: + case SDL_SCANCODE_RIGHT: + dest.x += speed / 30; + break; + default: + break; + } + } + } + + // right boundary + if (dest.x + dest.w > 1000) + dest.x = 1000 - dest.w; + + // left boundary + if (dest.x < 0) + dest.x = 0; + + // bottom boundary + if (dest.y + dest.h > 1000) + dest.y = 1000 - dest.h; + + // upper boundary + if (dest.y < 0) + dest.y = 0; + + // clears the screen + SDL_RenderClear(m_Renderer); + SDL_RenderCopy(m_Renderer, m_Textures[TTT::WALL], NULL, &dest); + SDL_RenderCopy(m_Renderer, m_Textures[TTT::SYMBOL_O], NULL, &dest2); + GridRenderCopy(); + + // triggers the double buffers + // for multiple rendering + SDL_RenderPresent(m_Renderer); + + // calculates to 60 fps + SDL_Delay(1000 / 60); + } + + // destroy texture + SDL_DestroyTexture(m_Textures[TTT::SYMBOL_O]); +} + +void App::DrawToGridCell(TEXTURE textureId, int x, int y) +{ + +} + +void App::DrawGrid() +{ + int CELL_WIDTH = 64; + int CELL_HEIGHT = 64; + + + for (int i = 0; i <= m_GridWidth - 1; ++i) + { + for (int j = 0; j <= m_GridHeight - 1; ++j) + { + // connects our texture with dest to control position + SDL_QueryTexture( + m_Textures[m_Grid[i][j].second], NULL, NULL, + &m_Grid[i][j].first.w, &m_Grid[i][j].first.h); + + // m_Grid[i][j].first.x = (m_WindowWidth - m_Grid[i][j].first.w) / 2; + // m_Grid[i][j].first.y = (m_WindowHeight - m_Grid[i][j].first.h) / 2; + + m_Grid[i][j].first.w = CELL_WIDTH; + m_Grid[i][j].first.h = CELL_HEIGHT; + m_Grid[i][j].first.x = m_Grid[i][j].first.w * i; + m_Grid[i][j].first.y = m_Grid[i][j].first.h * j; + } + } + +} + +void App::UpdateGridHover(int x, int y) +{ +} + +void App::GridRenderCopy() +{ + for (int i = 0; i <= m_GridWidth - 1; ++i) + { + for (int j = 0; j <= m_GridHeight - 1; ++j) + { + SDL_RenderCopy(m_Renderer, m_Textures[m_Grid[i][j].second], NULL, &m_Grid[i][j].first); + } + } +} + +App::~App() +{ + + // destroy renderer + SDL_DestroyRenderer(m_Renderer); + // destroy window + SDL_DestroyWindow(m_Window); + // close SDL + SDL_Quit(); +} + + +} // namespace TTT \ No newline at end of file diff --git a/TTT/App.hh b/TTT/App.hh new file mode 100644 index 0000000..a315487 --- /dev/null +++ b/TTT/App.hh @@ -0,0 +1,47 @@ +#pragma once + +#include +#include +#include +#include + +#include +#include + +namespace TTT +{ + +enum TEXTURE { + NONE, + WALL, + SYMBOL_X, + SYMBOL_O +}; + +class App +{ +private: + int m_WindowWidth; + int m_WindowHeight; + int m_Close; + int m_GridHeight; + int m_GridWidth; + SDL_Window* m_Window; + SDL_Renderer* m_Renderer; + SDL_Surface* m_Surface; + std::map m_Textures; + std::vector>> m_Grid; + +public: + App(int width, int height); + void DrawToGridCell(TEXTURE textureId, int x, int y); + void DrawGrid(); + void UpdateGridHover(int x, int y); + void GridRenderCopy(); + ~App(); +}; + +} // namespace TTT + + + diff --git a/TTT/BTNPenguin.png b/TTT/BTNPenguin.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd622ee44c7e8070b58c2de3ee19b2291f12a1e GIT binary patch literal 8558 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 $,SDL2::SDL2,SDL2::SDL2-static> ) +target_link_libraries(Tic-Tac-Toe + PRIVATE + $,SDL2_image::SDL2_image,SDL2_image::SDL2_image-static> +) +target_link_libraries(Tic-Tac-Toe PRIVATE SDL2::SDL2_gfx) set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) diff --git a/TTT/SYMBOL_O.png b/TTT/SYMBOL_O.png new file mode 100644 index 0000000000000000000000000000000000000000..0506f356e3ddf12951c5c894dee89afab30c26a3 GIT binary patch literal 512 zcmV+b0{{JqP)Px$x=BPqRCt{2n#*;7u%Qu}NEdXGCejESU`Y@3fV1&9{*A|xo@Sim zcX!xWpC@T-#)uF?2qAP}q+@i% zaEsH+uqp8&oA|M5rOy1DG(J?}bfD&LXd8-dk z+YkXp0Xi&NwTQ^~;m|vHx?asb%+>J-DyP3UV?h5NOQmvG-^DMi12QEqB2qQJAZP^` zRiPwJEU6z^lR!EkWAy{DF4+7cs1aaQ?H|yNfw=<;w0{6H1{{IX0hERUln$UY6u@f0 z@)TwSay!-t0DTrmp}ifyYaKpcFYTo;5HUd3fUo^tB<~p1jZZUL0jkgY9TEV7CYG}M z0U5ghR(%n`p5QPTOEpUP+x&9?WLx~a+w~5d9}lE`k!G|aeu{332Sy@@U;=cujeRvX z6R5`5WYs%1SM_QvFe!paPl!3c?Oh~cXO%BU15ptI12KM&FS~Blug3$?_SN99sJ3MJ zi;PwX&&1sg4@k~-dw$tk0b}!jlOu!>LI@#*Y?B|rOs(1i-U!(M0000Px$tVu*cRCt{2n$4}kFc5^7R}nRErw0l_91w-j19xhmBfrBVXyGL&*`HZUneW8K z>z$Du;&DU>A%qY@2q9}^V;Iu{YDD7d=f^th?sAjePx%BuPX;RCt`_+r3f4KoExE*9;A~0xEDuy+Dxd^N zydEJ-*8S}6oun_)D7yEV%QRX5zsz{I^6>QXQ}P_{+wYbD+yFd2f1h8>Vf)>Z`-gYn z1OW3vXvRYW0H%-7j)xWiOc$Xm9y$PEdI){-&;tO|LAVwVR{&uA2t)BO0084f2#JRP z02m)aXgmZ0z<3a1;voV6>PLu;he!aZ7a=7c5&)n+gw%LQ1b})Fa^fKa0Lmle#zQ6m zlta*n2L%A|N6?A~B>?b4(2NH~0I)~Ujt6A`utTtj2Lk}mN3e07Bzso(SduvGFo51XF<2c$o)+89;8l%o@Q2Kr3EmiJ%Uk9WS#&PzA7xmsudF z0a(Y&v=LMQyy9h=2-yJM@iHxhEPzt+G7W@efYR}@T!bWmTH<9n2+;tw#miC=q5x`* zm!%*C1JoWbi$w?m7)!h?24N6jZ1J*CgsT8!jhBTW^a6}MUN(f#2{4s-*)@aVL#dc3TSu;BFf_#EP!`}%wZ8US&~aZvX%Q07*qoM6N<$ Ef`%*c1poj5 literal 0 HcmV?d00001 diff --git a/TTT/main.cpp b/TTT/main.cpp index c4a394d..b6308f0 100644 --- a/TTT/main.cpp +++ b/TTT/main.cpp @@ -1,5 +1,11 @@ -#include +#include "App.hh" -int main(int, char**) { - std::cout << "Hello, world!\n"; -} +using namespace TTT; + +int main(int argc, char *argv[]) +{ + + App app = App(1000, 1000); + + return 0; +} \ No newline at end of file