SFML程序中缺少右括号?

时间:2018-11-20 05:54:46

标签: visual-c++ sfml

我使用C ++和SFML编写了一个程序。该程序应该生成20个红色或蓝色的圆圈,并且确实起作用。但是,我进行了一些更改,进行了保存,然后在几个小时后又在VS上重新进行了修改,发现我一直遇到错误:

'{':找不到匹配的令牌(第9行)

我一直在扫描代码,但似乎根本找不到问题。

代码:

#include <SFML/Graphics.hpp>
#include <iostream>
#include <chrono>
#include <random>

using namespace std;

int main() 
{ //Line 9
    unsigned seed = chrono::system_clock::now().time_since_epoch().count();
    default_random_engine generator(seed);
    uniform_int_distribution<int> distribution1(0, 1024);
    uniform_int_distribution<int> distribution2(1, 2);

    sf::RenderWindow window(sf::VideoMode(1024, 1024), "Spooky Circle Box");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Red);
    shape.setPosition(10, 10);

    std::vector<sf::CircleShape> circles(20);

    window.clear();

    for (unsigned int i = 0; i < circles.size(); i++) {
        int find = 0;
        int find_color = 0;
        while (find != 20) {
            circles[i].setPosition(distribution1(generator), distribution1(generator));
            for (unsigned int j = 0; j < circles.size(); j++) {
                if (i == j || (circles[i].getPosition().x != circles[j].getPosition().x || circles[i].getPosition().y != circles[j].getPosition().y)) {
                    find++;
                } else;
            if (find != 20) {
                find = 0;
            } else;
        }
        find = 0;
        find_color = distribution2(generator);
        circles[i].setRadius(5.f);

        if (find_color == 1) {
            circles[i].setFillColor(sf::Color::Blue);
        } else { circles[i].setFillColor(sf::Color::Red); }

        window.draw(circles[i]);
    }

    window.display();

    while (window.isOpen()) {
        sf::sleep((sf::milliseconds(100)));
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

我将进一步解释我的评论,但我不会发布任何已修复的代码。我只建议一种做事方式。

通过您的代码结构,您似乎正在尝试生成一些随机分布在窗口上的蓝色或红色圆圈,但是与此同时,您正在尝试绘制它们。

您应该将实际数据与绘图内容区分开。我建议的伪代码是。

int main(){int main(){
    // 1 . Declare your circle vector

    // 2 . Populate that vector with random circles (random position, random color)

    // Now draw those circles
    // 3 . while(window.isOpen()) loop

        // 3.1 Clear the window

        // 3.2 Draw your circles

        // 3.3 Display the stuff

}

第3点基本上是根据SFML tutorials绘制内容的方法。