В вашей функции Tick()
вы можете проверить, сталкивается ли голова с чем-либо после того, как все движется в заданном направлении. Если это так, дайте main()
знать об этом как-нибудь: например, вернуть bool
, который выражает, если игра окончена. Допустим, это bool
называется over
.
Итак, добавьте if (over) { window.close(); }
внутри вашего while (window.isOpen())
l oop (сразу после вызова Tick()
), чтобы main()
достиг return 0;
и фини sh программа.
РЕДАКТИРОВАТЬ: Подумайте об использовании std::deque
для перемещения вашей змеи с использованием меньшего количества кода и времени: вы сможете просто pop_back()
плитку змеи, расположенную дальше всего от головы, и push_front()
новой плитке, где голова в данный момент (после тика), имитирует ползание на один шаг вперед.
В любом случае, после перемещения вашей змеи вы можете проверить каждую из его плиток тела, имеет ли она те же координаты, что и ее голова. Если это так, значит ваша змея врезалась в хвост, и игра окончена.
// in Tick():
// ...other logic...
tiles.pop_back();
tiles.push_front(new_head_position);
for (/* each tile of your snake except its head */) {
if (tile.x == head.x && tile.y == head.y) {
return false; // game over
}
}
return true; // everything is fine