Esempio n. 1
0
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();
}
Esempio n. 2
0
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;
}