首页 > 解决方案 > 房间在 SFML(地牢爬行者)中不断重叠

问题描述

请帮助我无法解决我的代码有什么问题。我正在使用 SFML 库。我正在尝试对其进行故障排除一段时间,但房间不断重叠。

std::vector<sf::RectangleShape>rooms;
sf::RectangleShape start;
int roomSize = 100;

float gap = 5.f;
int roomCount = 5;

void generateDungeon()
{
    int randomDir;
    int randomRoom;
    for(int i = 0; i < rooms.size(); i++)
    {
        if(roomCount != 0){
            randomRoom = rand() % rooms.size();
            randomDir = rand() % 4 + 1;
            roomCount--;
        }

        if(randomDir == 1 && roomCount != 0){
            sf::Vector2f position = rooms[randomRoom].getPosition() + sf::Vector2f(0, roomSize + gap);
            if(rooms[rooms.size() - i].getPosition() != position){
                sf::RectangleShape temp;
                temp.setSize(sf::Vector2f(roomSize, roomSize));
                temp.setFillColor(sf::Color::White);
                temp.setPosition(position);
                rooms.push_back(temp);                       
            }              
        }
        else if(randomDir == 2 && roomCount != 0){
            sf::Vector2f position = rooms[randomRoom].getPosition() + sf::Vector2f(0, -(roomSize + gap));
            if(rooms[rooms.size() - i].getPosition() != position){
                sf::RectangleShape temp;
                temp.setSize(sf::Vector2f(roomSize, roomSize));
                temp.setFillColor(sf::Color::White);
                temp.setPosition(position);
                rooms.push_back(temp);                       
            }    
        }
        else if(randomDir == 3 && roomCount != 0){
            sf::Vector2f position = rooms[randomRoom].getPosition() + sf::Vector2f(roomSize + gap, 0);
            if(rooms[rooms.size() - i].getPosition() != position){
                sf::RectangleShape temp;
                temp.setSize(sf::Vector2f(roomSize, roomSize));
                temp.setFillColor(sf::Color::White);
                temp.setPosition(position);
                rooms.push_back(temp);                       
            }  
        }
        else if(randomDir == 4 && roomCount != 0){
            sf::Vector2f position = rooms[randomRoom].getPosition() + sf::Vector2f(-(roomSize + gap), 0);
            if(rooms[rooms.size() - i].getPosition() != position){
                sf::RectangleShape temp;
                temp.setSize(sf::Vector2f(roomSize, roomSize));
                temp.setFillColor(sf::Color::White);
                temp.setPosition(position);
                rooms.push_back(temp);                       
            }   
        }
        
    }
}

请帮助我无法解决我的代码有什么问题。我正在使用 SFML 库。

标签: c++sfml

解决方案


推荐阅读