handle input
This commit is contained in:
parent
7c62375761
commit
2ac8c05e1d
18
src/Game.cpp
18
src/Game.cpp
@ -8,11 +8,13 @@
|
|||||||
#include "words.hpp"
|
#include "words.hpp"
|
||||||
#include "utils.hpp"
|
#include "utils.hpp"
|
||||||
#include "default_font.hpp"
|
#include "default_font.hpp"
|
||||||
|
#include "State.hpp"
|
||||||
|
|
||||||
const int CHAR_SIZE = 30;
|
const int CHAR_SIZE = 30;
|
||||||
const int STEP_SIZE = CHAR_SIZE + CHAR_SIZE / 2;
|
const int STEP_SIZE = CHAR_SIZE + CHAR_SIZE / 2;
|
||||||
const int UNDERSCORE_DY = 10;
|
const int UNDERSCORE_DY = 10;
|
||||||
const SDL_Color TEXT_COLOR = {255, 255, 255};
|
const SDL_Color TEXT_COLOR = {255, 255, 255};
|
||||||
|
const int MAX_GUESSES = 8;
|
||||||
|
|
||||||
void Game::Run() {
|
void Game::Run() {
|
||||||
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
||||||
@ -67,7 +69,7 @@ void Game::Run() {
|
|||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
Game::Game() {
|
Game::Game() : m_wrong_guesses(0), m_game_state(State::PLAY) {
|
||||||
const char *defaultFontPath = getDefaultFontPath();
|
const char *defaultFontPath = getDefaultFontPath();
|
||||||
if (defaultFontPath == nullptr) {
|
if (defaultFontPath == nullptr) {
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
@ -101,7 +103,19 @@ Game::Game() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Game::handle_key(SDL_Keycode event) {
|
void Game::handle_key(SDL_Keycode event) {
|
||||||
|
if (!isalpha(event))
|
||||||
|
return;
|
||||||
|
bool is_valid = guess_corrector->has_char(event);
|
||||||
|
if (is_valid) {
|
||||||
|
guess_corrector->add(event);
|
||||||
|
if (guess_corrector->is_filled_out())
|
||||||
|
m_game_state = State::WIN;
|
||||||
|
} else {
|
||||||
|
m_wrong_guesses += 1;
|
||||||
|
if (m_wrong_guesses >= MAX_GUESSES) {
|
||||||
|
m_game_state = State::GAME_OVER;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::draw(SDL_Renderer *renderer) {
|
void Game::draw(SDL_Renderer *renderer) {
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "SDL_render.h"
|
#include "SDL_render.h"
|
||||||
#include "SDL_ttf.h"
|
#include "SDL_ttf.h"
|
||||||
#include "GuessCorrector.hpp"
|
#include "GuessCorrector.hpp"
|
||||||
|
#include "State.hpp"
|
||||||
|
|
||||||
const SDL_Point SCREEN_SIZE{800, 800};
|
const SDL_Point SCREEN_SIZE{800, 800};
|
||||||
|
|
||||||
@ -16,6 +17,8 @@ private:
|
|||||||
std::unique_ptr<GuessCorrector> guess_corrector;
|
std::unique_ptr<GuessCorrector> guess_corrector;
|
||||||
const char *word;
|
const char *word;
|
||||||
_TTF_Font *font;
|
_TTF_Font *font;
|
||||||
|
int m_wrong_guesses;
|
||||||
|
State m_game_state;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static void Run();
|
static void Run();
|
||||||
@ -28,5 +31,6 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void draw_guesses(SDL_Renderer *renderer);
|
void draw_guesses(SDL_Renderer *renderer);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user