Как сделать чтоб перснаж не мог проходить через стены?

Для того чтобы персонаж не мог проходить через стены в игре, необходимо реализовать коллизии, то есть проверку на пересечение объектов. В данном случае объектами будут являться персонаж и стены.

Ниже представлен пример того, как можно реализовать проверку коллизий в C++ с использованием библиотеки SFML:

#include <SFML/Graphics.hpp>

sf::RectangleShape player(sf::Vector2f(50.0f, 50.0f));
sf::RectangleShape wall(sf::Vector2f(200.0f, 200.0f));

bool checkCollision(sf::RectangleShape object1, sf::RectangleShape object2) {
    sf::FloatRect rect1 = object1.getGlobalBounds();
    sf::FloatRect rect2 = object2.getGlobalBounds();
    return rect1.intersects(rect2);
}

int main() {
    sf::RenderWindow window(sf::VideoMode(800, 600), "Collision Detection");

    player.setFillColor(sf::Color::Green);
    player.setPosition(100.0f, 100.0f);

    wall.setFillColor(sf::Color::Red);
    wall.setPosition(400.0f, 300.0f);

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

        // Движение персонажа с помощью клавиш
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
            player.move(-1.0f, 0.0f);
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
            player.move(1.0f, 0.0f);
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) {
            player.move(0.0f, -1.0f);
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) {
            player.move(0.0f, 1.0f);
        }

        // Проверка на коллизию персонажа со стеной
        if (checkCollision(player, wall)) {
            player.move(-player.getPosition().x, -player.getPosition().y);
        }

        window.clear();
        window.draw(player);
        window.draw(wall);
        window.display();
    }

    return 0;
}

В данном примере используется библиотека SFML для создания окна и отрисовки объектов. Персонаж и стена представлены в виде прямоугольников, но вы можете использовать свои собственные текстуры или спрайты.

Функция checkCollision проверяет наличие пересечения между двумя объектами object1 и object2. Она использует метод getGlobalBounds(), который возвращает прямоугольник, описывающий границы объекта, и метод intersects(), который проверяет пересечение двух таких прямоугольников.

В основном цикле программы происходит обработка событий, движение персонажа с помощью клавиш и проверка на коллизию. Если коллизия обнаружена, то персонажу запрещается двигаться в сторону стены путем отмены его последнего движения (player.move(-player.getPosition().x, -player.getPosition().y)).

Это всего лишь пример реализации коллизий в игре на C++ с использованием библиотеки SFML. В реальных проектах вы можете использовать различные алгоритмы или библиотеки для проверки коллизий, в зависимости от ваших потребностей и требований игры.