aboutsummaryrefslogtreecommitdiff
path: root/src/graphics.cpp
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-03-20 10:29:56 +0100
committerCharles <sircharlesaze@gmail.com>2020-03-20 10:29:56 +0100
commit64f6f1eaa2ecc188292cfe4a7223606b8bcb3bf2 (patch)
tree01717af5c690c66fa3b3a467d98a691de37763f0 /src/graphics.cpp
parent19ae4e74aedbbfde9aaed9241f616decc3ec9059 (diff)
download2048-64f6f1eaa2ecc188292cfe4a7223606b8bcb3bf2.tar.gz
2048-64f6f1eaa2ecc188292cfe4a7223606b8bcb3bf2.tar.bz2
2048-64f6f1eaa2ecc188292cfe4a7223606b8bcb3bf2.zip
refactoring to more cplusplusy version of classes
Diffstat (limited to 'src/graphics.cpp')
-rw-r--r--src/graphics.cpp161
1 files changed, 78 insertions, 83 deletions
diff --git a/src/graphics.cpp b/src/graphics.cpp
index 7732bd2..0d9a054 100644
--- a/src/graphics.cpp
+++ b/src/graphics.cpp
@@ -2,81 +2,76 @@
#define CELL_GAP 5
#define GRID_BORDER 10
+#define UPDATE_DELAY 3
#define AI_TIME_STEP 100
-Graphics::Graphics(Game *g, std::string t, int w, int h, AI *a)
+Graphics::Graphics(Game &game, std::string title, int width, int height, AI *ai):
+ m_running(true), m_game(game), m_title(title), m_width(width), m_height(height), m_ai(ai), m_aiTimeStep(AI_TIME_STEP)
{
- running = true;
- game = g;
- title = t;
- width = w;
- height = h;
- gridSize = std::min(width, height);
- ai = a;
- aiTimeStep = AI_TIME_STEP;
- aiNextTime = SDL_GetTicks();
+ m_gridSize = std::min(m_width, m_height);
+ m_aiNextTime = SDL_GetTicks();
if (SDL_Init(SDL_INIT_VIDEO) < 0)
error();
- if ((window = SDL_CreateWindow(title.c_str(), 0, 0, width, height, 0)) == NULL)
+ if ((m_window = SDL_CreateWindow(m_title.c_str(), 0, 0, m_width, m_height, 0)) == NULL)
error();
- if ((renderer = SDL_CreateRenderer(window, -1, 0)) == NULL)
+ if ((m_renderer = SDL_CreateRenderer(m_window, -1, 0)) == NULL)
error();
if (TTF_Init() < 0)
error();
- if ((font = TTF_OpenFont("./font/noto_mono_regular.ttf", 16)) == NULL)
+ if ((m_font = TTF_OpenFont("./font/noto_mono_regular.ttf", 16)) == NULL)
error();
- scoreText = newTextTex("score", {255, 255, 255, 255});
- palette[0] = {10, 10, 10, 255};
- palette[2] = {100, 100, 100, 255};
- palette[4] = {65, 65, 65, 255};
- palette[8] = {40, 40, 40, 255};
- palette[16] = {150, 50, 20, 255};
- palette[32] = {160, 70, 20, 255};
- palette[64] = {190, 80, 30, 255};
- palette[128] = {200, 100, 40, 255};
- palette[256] = {220, 120, 40, 255};
- palette[512] = {230, 180, 30, 255};
- palette[1024] = {230, 190, 20, 255};
- palette[2048] = {230, 200, 10, 255};
+ m_scoreText = newTextTex("score", {255, 255, 255, 255});
+ m_palette[0] = {10, 10, 10, 255};
+ m_palette[2] = {100, 100, 100, 255};
+ m_palette[4] = {65, 65, 65, 255};
+ m_palette[8] = {40, 40, 40, 255};
+ m_palette[16] = {150, 50, 20, 255};
+ m_palette[32] = {160, 70, 20, 255};
+ m_palette[64] = {190, 80, 30, 255};
+ m_palette[128] = {200, 100, 40, 255};
+ m_palette[256] = {220, 120, 40, 255};
+ m_palette[512] = {230, 180, 30, 255};
+ m_palette[1024] = {230, 190, 20, 255};
+ m_palette[2048] = {230, 200, 10, 255};
}
Graphics::~Graphics()
{
- for (size_t i = 0; i < numberTexBuf.size(); i++)
- SDL_DestroyTexture(numberTexBuf[i].second);
- TTF_CloseFont(font);
+ for (size_t i = 0; i < m_numberTexBuf.size(); i++)
+ SDL_DestroyTexture(m_numberTexBuf[i].second);
+ TTF_CloseFont(m_font);
TTF_Quit();
- SDL_DestroyRenderer(renderer);
- SDL_DestroyWindow(window);
+ SDL_DestroyRenderer(m_renderer);
+ SDL_DestroyWindow(m_window);
SDL_Quit();
}
void Graphics::update()
{
- if (game->lost())
- running = false;
- SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
- SDL_RenderClear(renderer);
+ if (m_game.lost())
+ m_running = false;
+ SDL_SetRenderDrawColor(m_renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
+ SDL_RenderClear(m_renderer);
handleEvent();
drawGame();
drawScore();
- SDL_RenderPresent(renderer);
- if (ai != NULL)
+ SDL_RenderPresent(m_renderer);
+ if (m_ai != NULL)
{
- if (SDL_TICKS_PASSED(SDL_GetTicks(), aiNextTime))
+ if (SDL_TICKS_PASSED(SDL_GetTicks(), m_aiNextTime))
{
- aiNextTime = SDL_GetTicks() + aiTimeStep;
- game->move(ai->move());
+ m_aiNextTime = SDL_GetTicks() + m_aiTimeStep;
+ m_game.move(m_ai->move());
}
}
- SDL_Delay(3);
+ SDL_Delay(UPDATE_DELAY);
}
void Graphics::drawGame()
{
- for (int i = 0; i < game->getSize(); i++)
- for (int j = 0; j < game->getSize(); j++)
+ for (int i = 0; i < m_game.getSize(); i++)
+ for (int j = 0; j < m_game.getSize(); j++)
drawCell(i, j);
}
@@ -86,60 +81,60 @@ void Graphics::drawCell(int x, int y)
SDL_Texture *tex;
SDL_Color c;
- if ((tex = getNumberTex(game->at(x, y))) == NULL)
- tex = addNumberTex(game->at(x, y));
- if (palette.find(game->at(x, y)) == palette.end())
+ if ((tex = getNumberTex(m_game.get(y, x))) == NULL)
+ tex = addNumberTex(m_game.get(y, x));
+ if (m_palette.find(m_game.get(y, x)) == m_palette.end())
c = {30, 30, 30, 255};
else
- c = palette[game->at(x, y)];
- r.x = 2 + x * (gridSize / game->getSize());
- r.y = 2 + y * (gridSize / game->getSize());
- r.w = gridSize / game->getSize() - 5;
- r.h = gridSize / game->getSize() - 5;
- SDL_SetRenderDrawColor(renderer, c.r, c.g, c.b, SDL_ALPHA_OPAQUE);
- SDL_RenderFillRect(renderer, &r);
- if (game->at(x, y) != 0)
+ c = m_palette[m_game.get(y, x)];
+ r.x = 2 + x * (m_gridSize / m_game.getSize());
+ r.y = 2 + y * (m_gridSize / m_game.getSize());
+ r.w = m_gridSize / m_game.getSize() - 5;
+ r.h = m_gridSize / m_game.getSize() - 5;
+ SDL_SetRenderDrawColor(m_renderer, c.r, c.g, c.b, SDL_ALPHA_OPAQUE);
+ SDL_RenderFillRect(m_renderer, &r);
+ if (m_game.get(y, x) != 0)
{
SDL_QueryTexture(tex, NULL, NULL, &r.w, &r.h);
- r.x += gridSize / game->getSize() / 2 - r.w / 2;
- r.y += gridSize / game->getSize() / 2 - r.h / 2;
- SDL_RenderCopy(renderer, tex, NULL, &r);
+ r.x += m_gridSize / m_game.getSize() / 2 - r.w / 2;
+ r.y += m_gridSize / m_game.getSize() / 2 - r.h / 2;
+ SDL_RenderCopy(m_renderer, tex, NULL, &r);
}
}
void Graphics::drawScore()
{
SDL_Rect r;
- int dist = std::abs(width - height);
+ int dist = std::abs(m_width - m_height);
if (dist < 50)
return;
- SDL_QueryTexture(scoreText, NULL, NULL, &r.w, &r.h);
- if (width > height)
+ SDL_QueryTexture(m_scoreText, NULL, NULL, &r.w, &r.h);
+ if (m_width > m_height)
{
- r.x = width - dist / 2 - r.w / 2;
- r.y = height / 2;
+ r.x = m_width - dist / 2 - r.w / 2;
+ r.y = m_height / 2;
}
else
{
- r.x = width / 2;
- r.y = height - dist / 2 - r.h / 2;
+ r.x = m_width / 2;
+ r.y = m_height - dist / 2 - r.h / 2;
}
- SDL_RenderCopy(renderer, scoreText, NULL, &r);
+ SDL_RenderCopy(m_renderer, m_scoreText, NULL, &r);
- SDL_Texture *scoreNumTex = newTextTex(std::to_string(game->getScore()), {255, 255, 255, 255});
+ SDL_Texture *scoreNumTex = newTextTex(std::to_string(m_game.getScore()), {255, 255, 255, 255});
SDL_QueryTexture(scoreNumTex, NULL, NULL, &r.w, &r.h);
- if (width > height)
+ if (m_width > m_height)
r.y += 20;
else
r.x += 20;
- SDL_RenderCopy(renderer, scoreNumTex, NULL, &r);
+ SDL_RenderCopy(m_renderer, scoreNumTex, NULL, &r);
SDL_DestroyTexture(scoreNumTex);
}
-bool Graphics::isRunning()
+bool Graphics::isRunning() const
{
- return running;
+ return m_running;
}
void Graphics::handleEvent()
@@ -151,22 +146,22 @@ void Graphics::handleEvent()
switch (e.type)
{
case SDL_QUIT:
- running = false;
+ m_running = false;
break;
case SDL_KEYDOWN:
switch (e.key.keysym.sym)
{
case SDLK_LEFT:
- game->move(DIRECTION_LEFT);
+ m_game.move(DIRECTION_LEFT);
break;
case SDLK_RIGHT:
- game->move(DIRECTION_RIGHT);
+ m_game.move(DIRECTION_RIGHT);
break;
case SDLK_DOWN:
- game->move(DIRECTION_DOWN);
+ m_game.move(DIRECTION_DOWN);
break;
case SDLK_UP:
- game->move(DIRECTION_UP);
+ m_game.move(DIRECTION_UP);
break;
}
}
@@ -178,15 +173,15 @@ SDL_Texture *Graphics::addNumberTex(int n)
SDL_Texture *tex;
SDL_Color c = {255, 255, 255, 255};
tex = newTextTex(std::to_string(n), c);
- numberTexBuf.push_back(std::make_pair(n, tex));
+ m_numberTexBuf.push_back(std::make_pair(n, tex));
return tex;
}
-SDL_Texture *Graphics::getNumberTex(int n)
+SDL_Texture *Graphics::getNumberTex(int n) const
{
- for (size_t i = 0; i < numberTexBuf.size(); i++)
- if (numberTexBuf[i].first == n)
- return numberTexBuf[i].second;
+ for (size_t i = 0; i < m_numberTexBuf.size(); i++)
+ if (m_numberTexBuf[i].first == n)
+ return m_numberTexBuf[i].second;
return NULL;
}
@@ -195,15 +190,15 @@ SDL_Texture *Graphics::newTextTex(std::string s, SDL_Color c)
SDL_Surface *surface;
SDL_Texture *tex;
- if ((surface = TTF_RenderText_Solid(font, s.c_str(), c)) == NULL)
+ if ((surface = TTF_RenderText_Solid(m_font, s.c_str(), c)) == NULL)
error();
- if ((tex = SDL_CreateTextureFromSurface(renderer, surface)) == NULL)
+ if ((tex = SDL_CreateTextureFromSurface(m_renderer, surface)) == NULL)
error();
SDL_FreeSurface(surface);
return (tex);
}
-void Graphics::error()
+void Graphics::error() const
{
std::cout << SDL_GetError() << std::endl;
exit(1);