Po nauczeniu się podstaw SFML'a przeszedłem to praktyki. Na pierwsze zadanie (zaraz po Hello World) wyznaczyłem sobie zrobienie gry w kółko i krzyżyk. Udało mi się zrobić dużą część kodu, ale nie wiem jak poradzić sobie z problemem przechodzenia przez system sprawdzania. Załączę kod dla lepszego obrazu problemu:
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
int gracz, ruchy1, ruchy2;
int msc[9];
ruchy1 = 0;
ruchy2 = 0;
int main()
{
sf::RenderWindow okno(sf::VideoMode(900, 900, 32), "Kolko i krzyzyk");
okno.setVerticalSyncEnabled(true);
sf::Music music;
music.setVolume(0);
music.openFromFile("smts.wav");
music.play();
sf::Texture gui;
gui.loadFromFile("gui.png");
sf::Sprite guis;
guis.setTexture(gui);
sf::Texture o;
o.loadFromFile("o.png");
sf::Sprite os[9];
os[0].setTexture(o);
os[0].setScale(0.8, 0.8);
os[1].setTexture(o);
os[1].setScale(0.8, 0.8);
os[1].move(0, 325);
os[2].setTexture(o);
os[2].setScale(0.8, 0.8);
os[2].move(0, 650);
os[3].setTexture(o);
os[3].setScale(0.8, 0.8);
os[3].move(325, 0);
os[4].setTexture(o);
os[4].setScale(0.8, 0.8);
os[4].move(325, 325);
os[5].setTexture(o);
os[5].setScale(0.8, 0.8);
os[5].move(650, 325);
os[6].setTexture(o);
os[6].setScale(0.8, 0.8);
os[6].move(325, 650);
os[7].setTexture(o);
os[7].setScale(0.8, 0.8);
os[7].move(650, 0);
os[8].setTexture(o);
os[8].setScale(0.8, 0.8);
os[8].move(650, 650);
//ustawianie kół
sf::Texture x;
x.loadFromFile("x.png");
sf::Sprite xs[9];
xs[0].setTexture(x);
xs[0].setScale(0.8, 0.8);
xs[1].setTexture(x);
xs[1].setScale(0.8, 0.8);
xs[1].move(0, 325);
xs[2].setTexture(x);
xs[2].setScale(0.8, 0.8);
xs[2].move(0, 650);
xs[3].setTexture(x);
xs[3].setScale(0.8, 0.8);
xs[3].move(325, 0);
xs[4].setTexture(x);
xs[4].setScale(0.8, 0.8);
xs[4].move(325, 325);
xs[5].setTexture(x);
xs[5].setScale(0.8, 0.8);
xs[5].move(650, 325);
xs[6].setTexture(x);
xs[6].setScale(0.8, 0.8);
xs[6].move(325, 650);
xs[7].setTexture(x);
xs[7].setScale(0.8, 0.8);
xs[7].move(650, 0);
xs[8].setTexture(x);
xs[8].setScale(0.8, 0.8);
xs[8].move(650, 650);
//ustawianie krzyżyków
while (okno.isOpen())
{
sf::Event event;
while (okno.pollEvent(event))
{
if (event.type == sf::Event::Closed)
okno.close();
} //while
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num1) && ruchy1 == ruchy2)
{
ruchy1++;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num1) && msc[0] == false)
{
okno.draw(os[0]);
msc[0] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num2) && msc[1] == false)
{
okno.draw(os[1]);
msc[1] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num3) && msc[2] == false)
{
okno.draw(os[2]);
msc[2] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num4) && msc[3] == false)
{
okno.draw(os[3]);
msc[3] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num5) && msc[4] == false)
{
okno.draw(os[4]);
msc[4] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num6) && msc[5] == false)
{
okno.draw(os[5]);
msc[5] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num7) && msc[6] == false)
{
okno.draw(os[6]);
msc[6] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num8) && msc[7] == false)
{
okno.draw(os[7]);
msc[7] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num9) && msc[8] == false)
{
okno.draw(os[8]);
msc[8] = true;
}
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num2) && ruchy1 >= ruchy2)
{
ruchy2++;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num1) && msc[0] == false)
{
okno.draw(xs[0]);
msc[0] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num2) && msc[1] == false)
{
okno.draw(xs[1]);
msc[1] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num3) && msc[2] == false)
{
okno.draw(xs[2]);
msc[2] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num4) && msc[3] == false)
{
okno.draw(xs[3]);
msc[3] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num5) && msc[4] == false)
{
okno.draw(xs[4]);
msc[4] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num6) && msc[5] == false)
{
okno.draw(xs[5]);
msc[5] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num7) && msc[6] == false)
{
okno.draw(xs[6]);
msc[6] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num8) && msc[7] == false)
{
okno.draw(xs[7]);
msc[7] = true;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num9) && msc[8] == false)
{
okno.draw(xs[8]);
msc[8] = true;
}
}
okno.clear();
okno.draw(guis);
okno.display();
} //while
return 0;
}
Kiedy klikam na klawiaturze 1, a później którąkolwiek z cyfr 1-9 nic się nie dzieje, a ja nie mogę tego rozgryźć na logikę. Czy trzeba użyć wielowątkowości?