void Nibbler::launch() { if (!this->_engine) return ; while (!snakeIsDead()) { usleep(this->_timer); this->_engine->fresh(); if (this->_engine->getEventQueue().isEvent()) { Event event_now = this->_engine->getEventQueue().popEvent(); if (event_now.getKeyPressed() == keyEscape) { this->_engine->quit(); return ; } else getSnake()->setWay((enum SnakeMove) event_now.getKeyPressed()); } if (snakeIsEating()) { getSnake()->setScore(); produceFood(); } getSnake()->run(); } this->_engine->quit(); }
void Snake::update() { if(getIsDead()) { emit snakeIsDead(); return; } if(getHead().x() <= -1 || getHead().x() >= grid.x() || getHead().y() <= -1 || getHead().y() >= grid.y()) { emit killedSelf(); return; } for(int i = 0; i < body.count(); ++i) { if(i == 0) { last = body.first(); switch(direction) { case Top: body.first().setY(body.first().y() - 1); break; case Bottom: body.first().setY(body.first().y() + 1); break; case Left: body.first().setX(body.first().x() - 1); break; case Right: body.first().setX(body.first().x() + 1); break; } } else { QPoint now = body[i]; if(body[i] == body.first()) emit killedSelf(); body[i] = last; last = now; } } dirChanged = false; }