handle input
This commit is contained in:
		
							
								
								
									
										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); | ||||||
|  |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user