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