c++ - Snake pop() : it disappear -


since last topic full of edited versions , not clear @ all, , since changed lot of things , understood how make it, i'm asking new question snake : why snake disappear since when call advancestep(), yes pop 1 element right after push_back one? help, have better attitude. (through @jason c, asking give up, or him stole somebody's code, or homework, should better attitude). in advance.

#include <sfml/window.hpp> #include <sfml/graphics.hpp> #include <sfml/system.hpp> #include <sfml/audio.hpp> #include <deque>  void advancestep();  sf::event event; /*sf::clock clocksnake; sf::time elapse;*/  sf::vector2i direction(0, 0);   class snakeblock { public:  sf::texture texture; sf::sprite snakeblock; int dir; int lastx, lasty; };  std::deque<snakeblock> snake;  int main() { //elapse = clocksnake.getelapsedtime();  sf::music epicmusic; epicmusic.openfromfile("epicmusic.wav"); epicmusic.play();  snakeblock snakehead; snakehead.texture.loadfromfile("spritesheetsnake.png", sf::intrect(0,0,20,22)); snakehead.snakeblock.settexture(snakehead.texture); snakeblock snakebody1; snakebody1.snakeblock.settexture(*(snakehead.snakeblock.gettexture())); snakeblock snakebody2; snakebody2.snakeblock.settexture(*(snakehead.snakeblock.gettexture()));  snake.push_back(snakehead); snake.push_back(snakebody1); snake.push_back(snakebody2);  snake[2].snakeblock.setposition(500,350); snake[1].snakeblock.setposition(475, 338); snake[0].snakeblock.setposition(450, 316);  sf::renderwindow window(sf::videomode(1028,768), "sfml snake"); window.setframeratelimit(20); while(window.isopen()) {     while(window.pollevent(event))     {         switch(event.type)         {             case sf::event::closed:             epicmusic.stop();             window.close();             break;              default:             break;         }      }      if(sf::keyboard::iskeypressed(sf::keyboard::left))     {             direction.x = -1;             advancestep();             for(int = 1; < snake.size(); i++)             {                 snake[i].snakeblock.setposition(snake[i+1].snakeblock.getposition().x-20, snake[i+1].snakeblock.getposition().y);             }     }     if(sf::keyboard::iskeypressed(sf::keyboard::right))     {             direction.x = 1;             advancestep();             for(int j = 1; j < snake.size(); j++)             {                 snake[j].snakeblock.setposition(snake[j+1].snakeblock.getposition().x+20, snake[j+1].snakeblock.getposition().y);             }     }     if(sf::keyboard::iskeypressed(sf::keyboard::down))     {             direction.y = -1;             advancestep();             for(int l = 1; l < snake.size(); l++)             {                 snake[l].snakeblock.setposition(snake[l+1].snakeblock.getposition().x, snake[l+1].snakeblock.getposition().y-22);             }     }     if(sf::keyboard::iskeypressed(sf::keyboard::up))     {             direction.y = 1;             advancestep();             for(int o = 1; o < snake.size(); o++)             {                 snake[o].snakeblock.setposition(snake[o+1].snakeblock.getposition().x, snake[o+1].snakeblock.getposition().y+22);             }     }     window.clear(sf::color::red);     for(unsigned int m = 0; m < snake.size(); m++)     {         window.draw(snake[m].snakeblock);     }     window.display(); } return 0;  }  void advancestep() { sf::vector2f headpos; headpos.x = snake[0].snakeblock.getposition().x; headpos.y = snake[0].snakeblock.getposition().y;  headpos.x += 22 * direction.x; headpos.y += 22 * direction.y;  snakeblock element; element.snakeblock.setposition(headpos);  snake.push_front(element); snake.pop_back(); } 

looks if you're accessing snake out of bounds:

        for(int = 1; < snake.size(); i++)         {             ...setposition(snake[i+1].... 

Comments

Popular posts from this blog

assembly - 8086 TASM: Illegal Indexing Mode -

Java, LWJGL, OpenGL 1.1, decoding BufferedImage to Bytebuffer and binding to OpenGL across classes -

javascript - addthis share facebook and google+ url -