void Snake::detectCrash() { QAnimatedPixmapItem* head = snakelist.first(); QList<QGraphicsItem *> l = head->collidingItems(); for (QList<QGraphicsItem *>::Iterator it=l.begin(); it!=l.end(); ++it) { QGraphicsItem* item = *it; // check if snake ate a mouse if ( item->type() == mouse_rtti && item->collidesWithItem(head) ) { delete item; emit ateMouse(); grow++; // make the snake grow the next time it moves setScore(5); return; } // check if snake hit a wall if ( item->type() == wall_rtti && item->collidesWithItem(head) ) { emit dead(); autoMoveTimer->stop(); return; } } // check if snake hit itself for (int i = 3; i < snakelist.count(); i++) { if (head->collidesWithItem(snakelist.at(i)) ) { emit dead(); autoMoveTimer->stop(); return; } } }