Witam, JW. posiadam problem stworzyłem po połowie konsolowego snake, i mam problem gdyż ogółem pierwszy element ciała podąża za głową ale jeżeli dodam jeszcze jeden to nie chce się poruszać, mógłby ktoś powiedzieć czemu? tutaj kod
bool Gra::waz(sf::RenderWindow& okno, sf::Sprite& tapeta)
{
std::vector<float>px, py,pcx,pcy;
int q = 0; // zmiena która oznacza długość węża
sf::Vector2f pw(300, 200); // Definiuje pozycje węża przy rozpoczeciu gry
sf::RectangleShape glowa(sf::Vector2f(30, 30)); // Tworzenie głowy węża (kwadrat)
glowa.setFillColor(sf::Color::Black); // nadawanie koloru wężowi
glowa.setPosition(pw.x, pw.y); // Nadawanie pozycji wężowi
sf::RectangleShape cialo; // Tworzenie tabily 20 elementowej która ma odgrywać rolę ciała która będzie wpuszczana do vectora i na koniec rysowane
std::vector<sf::RectangleShape> cialko; // Tworzymy vektor do przechowywania ciał
okno.clear(); // czyścimy ekran który otrzymaliśmy poprzez referencje
kierunek pierwszy;
pierwszy = prawo;
bool prawda=false;
okno.setKeyRepeatEnabled(false); // możliwość że gdy trzymamy klawisz postać się porusza,nie trzeba wciskać np 3 razy by zrobić 3 ruchy tylko w odpowiednich klatkach
cialko.push_back(cialo); cialko[0].setSize(sf::Vector2f(30, 30));
cialko[0].setFillColor(sf::Color::Green);
px.push_back(glowa.getPosition().x-50);
py.push_back(glowa.getPosition().y);
while (okno.isOpen())
{
px.push_back(glowa.getPosition().x);
py.push_back(glowa.getPosition().y);
sprawdzkierunek(pierwszy, glowa);
sf::Event event;
while (okno.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed: okno.close(); break;
case sf::Event::KeyPressed: {
switch (event.key.code)
{
case sf::Keyboard::D: {if (pierwszy != lewo){ pierwszy = prawo; } }break; // Jeżeli wąż nie porusza się w lewo porusz się w prawo
case sf::Keyboard::A: {if (pierwszy != prawo){ pierwszy = lewo; } }break;// Jeżeli wąż nie porusza się w prawo idź porusz się w lewo
case sf::Keyboard::W: {if (pierwszy != dol){ pierwszy = przod; } }break;// Jeżeli wąż nie porusza się w dół porusz się w górę
case sf::Keyboard::S: {if (pierwszy != przod){ pierwszy = dol; } }break;// Jeżeli wąż nie porusza się w górę porusz się w dół
case sf::Keyboard::E: { ++q;cialko.push_back(cialo); cialko[q].setSize(sf::Vector2f(30, 30));
cialko[q].setFillColor(sf::Color::Green); if (prawda = false)prawda = true; }break; // dodaj ciało
case sf::Keyboard::Q: { return false; }break; // zakończ wykonwywanie funkcji wróć do menu głównego
}
}break;
}
}
okno.clear(); // czyść ekran
okno.draw(tapeta); // background
okno.draw(glowa); // rysuj głowe
if (prawda = true)
{
int i = 0;
while(i <= q)
{
std::cout << i;
//if (i == 0){
cialko[i].setPosition(px[liczbaz-i],py[liczbaz-i]);
liczbaz++;
okno.draw(cialko[i]);
// }
// else
// {
// cialko[i].setPosition(pcx[i-1]-50,pcy[i-1]);
// okno.draw(cialko[i]); // rysujemyy odpowiednie elementy
// }
i++;
}
}
okno.display(); // wyświetlamy na ekranie
}
}