проблемы с отображением, при создании сапера c++ sfml

Итак, я рисую двумерный массив (19 на 19) карты сапера, если рисовать весь двумерный массив, то приходится выводить каждый элемент массива. Но это слишком медленно и из-за этого событие мыши происходит не сразу (т.е ячейка открывается с маленькой задержкой). Есть еще один вариант - это рисовать определенную ячейку, но он у меня тоже не получился т.к при рисовании определенной ячейки другие пропадают и остается только эта ячейка, (пропадают все кроме тех на которые я нажал), но после второго нажатия ячейки появляются итак по кругу.

все ячейки

все ячейки

первый клик

первый клик

второй клик

второй клик

третий клик

третий клик

сам код

sf::Texture draw_grid_element(char element)
{
    sf::Texture texture;    

    switch (element)
    {
    case 'p':
        texture.loadFromFile("images/plite.jpg");
        return texture;
    case '0':
        texture.loadFromFile("images/pass.jpg");        
        return texture;
    case 'b':           
        texture.loadFromFile("images/bomb.jpg");        
        return texture;
    case '1':
        texture.loadFromFile("images/one.jpg");
        return texture;
    case '2':
        texture.loadFromFile("images/two.jpg");
        return texture;
    case '3':
        texture.loadFromFile("images/three.jpg");
        return texture;
    case '4':
        texture.loadFromFile("images/four.jpg");
        return texture;
    case '5':
        texture.loadFromFile("images/five.jpg");
        return texture;
    case '6':
        texture.loadFromFile("images/six.jpg");
        return texture;
    case '7':
        texture.loadFromFile("images/seven.jpg");
        return texture;
    case '8':
        texture.loadFromFile("images/eight.jpg");
        return texture;
    default:
        break;
    }
}

void draw_game_grid(sf::RenderWindow &window)
{       
    sf::Sprite tile;
    for (int i = 1; i < TILE_HEIGHT_COUNT; i++)
    {
        for (int j = 1; j < TILE_WIDTH_COUNT; j++)
        {           
            sf::Texture texture = draw_grid_element(draw_grid[i][j]);
            tile.setTexture(texture);           

            tile.setPosition((i * TILE_SIZE) - TILE_SIZE, (j * TILE_SIZE) - TILE_SIZE);
            window.draw(tile);          
        }       
    }
}

window.display();
while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();     

        if (event.type == sf::Event::MouseButtonPressed)
        {
            if (event.mouseButton.button == sf::Mouse::Left)
            {
                int mouse_x = event.mouseButton.x / TILE_SIZE + 1;
                int mouse_y = event.mouseButton.y / TILE_SIZE + 1;
                
                draw_grid[mouse_x][mouse_y] = game_grid[mouse_x][mouse_y];
                draw_element(window, mouse_x, mouse_y);
                window.display();
            }
        }
            
    }   
    
    
}

Ответы (0 шт):