Почему когда я запускаю код, окно сразу-же закрывается
(библеотеки)
(размеры окна)
struct Digit {
sf::RectangleShape rect;
sf::Text text;
bool active;
};
(рандомное число)
std:air<int, int> calculateBullsAndCows(const std::string& guess, const std::string& secret) {
int bulls = 0, cows = 0;
for (int i = 0; i < SECRET_NUMBER_LENGTH; ++i) {
if (guess == secret) {
++bulls;
}
else if (secret.find(guess) != std::string::npos) {
++cows;
}
}
return { bulls, cows };
}
int main() {
(вывод рандомного числа)
sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), "Быки и коровы"
(шрифт)
std::vector<Digit> digits;
for (char c = '0'; c <= '9'; ++c) {
Digit d;
d.rect.setSize({ 60, 60 });
d.rect.setOutlineThickness(2);
d.rect.setOutlineColor(sf::Color::Black);
d.rect.setFillColor(sf::Color::White);
d.text.setFont(font);
d.text.setString(std::string(1, c));
d.text.setCharacterSize(36);
d.active = true;
digits.push_back(d);
}
int x = 20, y = 80;
for (int i = 0; i < digits.size(); ++i) {
digits.rect.setPosition(x, y);
digits.text.setPosition(x + 15, y + 12);
x += 70;
if ((i + 1) % 5 == 0) {
x = 20;
y += 70;
}
}
std::string currentInput;
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
if (event.type == sf::Event::MouseButtonReleased &&
event.mouseButton.button == sf::Left)
{
sf::Vector2i mousePos = sf::getPosition(window);
for (int i = 0; i < digits.size(); ++i) {
if (digits.active && digits.rect.getGlobalBounds().contains(mousePos.x, mousePos.y)) {
currentInput += digits.text.getString();
if (currentInput.size() >= SECRET_NUMBER_LENGTH) {
std:air<int, int> result = calculateBullsAndCows(currentInput, secretNumber);
if (result.first == SECRET_NUMBER_LENGTH) {
std::cout << "Вы выиграли! Секретное число было: " << secretNumber << std::endl;
window.close();
}
else {
std::cout << "Быки: " << result.first << ", Коровы: " << result.second << std::endl;
}
currentInput.clear();
}
}
}
}
}
sf::Text inputText;
inputText.setFont(font);
inputText.setString(currentInput);
inputText.setCharacterSize(48);
inputText.setPosition(20, 20);
window.clear(sf::Color::White);
for (int i = 0; i < digits.size(); ++i) {
window.draw(digits.rect);
window.draw(digits.text);
}
window.draw(inputText);
window.display();
}
return 0;
}
(библеотеки)
(размеры окна)
struct Digit {
sf::RectangleShape rect;
sf::Text text;
bool active;
};
(рандомное число)
std:air<int, int> calculateBullsAndCows(const std::string& guess, const std::string& secret) {
int bulls = 0, cows = 0;
for (int i = 0; i < SECRET_NUMBER_LENGTH; ++i) {
if (guess == secret) {
++bulls;
}
else if (secret.find(guess) != std::string::npos) {
++cows;
}
}
return { bulls, cows };
}
int main() {
(вывод рандомного числа)
sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), "Быки и коровы"
(шрифт)
std::vector<Digit> digits;
for (char c = '0'; c <= '9'; ++c) {
Digit d;
d.rect.setSize({ 60, 60 });
d.rect.setOutlineThickness(2);
d.rect.setOutlineColor(sf::Color::Black);
d.rect.setFillColor(sf::Color::White);
d.text.setFont(font);
d.text.setString(std::string(1, c));
d.text.setCharacterSize(36);
d.active = true;
digits.push_back(d);
}
int x = 20, y = 80;
for (int i = 0; i < digits.size(); ++i) {
digits.rect.setPosition(x, y);
digits.text.setPosition(x + 15, y + 12);
x += 70;
if ((i + 1) % 5 == 0) {
x = 20;
y += 70;
}
}
std::string currentInput;
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
if (event.type == sf::Event::MouseButtonReleased &&
event.mouseButton.button == sf::Left)
{
sf::Vector2i mousePos = sf::getPosition(window);
for (int i = 0; i < digits.size(); ++i) {
if (digits.active && digits.rect.getGlobalBounds().contains(mousePos.x, mousePos.y)) {
currentInput += digits.text.getString();
if (currentInput.size() >= SECRET_NUMBER_LENGTH) {
std:air<int, int> result = calculateBullsAndCows(currentInput, secretNumber);
if (result.first == SECRET_NUMBER_LENGTH) {
std::cout << "Вы выиграли! Секретное число было: " << secretNumber << std::endl;
window.close();
}
else {
std::cout << "Быки: " << result.first << ", Коровы: " << result.second << std::endl;
}
currentInput.clear();
}
}
}
}
}
sf::Text inputText;
inputText.setFont(font);
inputText.setString(currentInput);
inputText.setCharacterSize(48);
inputText.setPosition(20, 20);
window.clear(sf::Color::White);
for (int i = 0; i < digits.size(); ++i) {
window.draw(digits.rect);
window.draw(digits.text);
}
window.draw(inputText);
window.display();
}
return 0;
}