Отсутствует закрывающая скобка в программе SFML? - PullRequest
0 голосов
/ 20 ноября 2018

Я сделал программу, используя 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 голосов
/ 20 ноября 2018

Я объясняю далее свои комментарии, но я не собираюсь публиковать отремонтированный код.Я только предлагаю способ действий.

По структуре вашего кода кажется, что вы пытаетесь сгенерировать несколько синих или красных кругов, случайно распределенных по окну, но в то же времяВы пытаетесь их нарисовать.

Вы должны отличать ваши фактические данные от ваших материалов для рисования.Мой предложенный псевдокод будет выглядеть следующим образом:

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-учебникам .

...