public void Update(Food food) { // Snake head move SnakeHead.Move(); SnakeHead.Update(); //Snake bodypart move Direction previousDirection; Direction nextDirection = SnakeHead.Direction; foreach (var part in SnakeBody) { part.Move(); part.Update(); previousDirection = part.Direction; part.Direction = nextDirection; nextDirection = previousDirection; } //check if snake head hit wall if (SnakeHead.HitWall()) { OnHitWall?.Invoke(); } //check if snake eat food if (SnakeHead.EatenFood(food)) { OnFoodEaten?.Invoke(); AddSnakeBody(); } //check if snakehead hit body foreach (var part in SnakeBody) { if (SnakeHead.X == part.X && SnakeHead.Y == part.Y) { OnHitBody?.Invoke(); } } IsUpdating = false; }