//обработчик тика таймера. Все движение происходит здесь
        void moveTimer_Tick(object sender, EventArgs e)
        {
            //в обратном порядке двигаем все элементы змеи
            foreach (var p in Enumerable.Reverse(snake))
            {
                p.move();
            }
            // передвижение кролика
            if (flag == true && amount_of_rabbits == 1)
            {
                rabbit.move();
                // если змейка врезалась в кролика
                if (head.x == rabbit.x && head.y == rabbit.y)
                {
                    score += 25;
                    amount_of_rabbits--;
                    Border_died.Children.Remove(rabbit.image);
                    rabbit.x = random.Next(13) * 40 + 40;
                    rabbit.y = random.Next(13) * 40 + 40;
                }

                //повороты кролика
                if (rabbit.x > x_rabbit_before || flag_for_rotate_rabbit == false)
                {
                    x_rabbit_before        = rabbit.x;
                    rabbit.Rotate          = Rabbit.Rabbit_direction.RIGHT;
                    flag_for_rotate_rabbit = true;
                }
                else if (rabbit.x < x_rabbit_before || flag_for_rotate_rabbit == false)
                {
                    x_rabbit_before        = rabbit.x;
                    rabbit.Rotate          = Rabbit.Rabbit_direction.LEFT;
                    flag_for_rotate_rabbit = true;
                }

                // находим растояние между кроликом и змеёй
                double s_now = Math.Sqrt(Math.Pow(rabbit.x - head.x, 2) + Math.Pow(rabbit.y - head.y, 2));
                // если расстояние между кроликом и змеёй <= 50, то увеличиваем ему скорость и он бежит туда где нет змеии
                if (s_now <= 50)
                {
                    if (rabbit.x > head.x)
                    {
                        rabbit.escape(true, false, false, false);
                    }
                    else if (rabbit.x < head.x)
                    {
                        rabbit.escape(false, true, false, false);
                    }

                    if (rabbit.y < head.y)
                    {
                        rabbit.escape(false, false, true, false);
                    }
                    else if (rabbit.y > head.y)
                    {
                        rabbit.escape(false, false, false, true);
                    }

                    if (rabbit.x == 520 && head.x == 480 && (rabbit.y != 520 || rabbit.y != 40))
                    {
                        int rand = random.Next(1, 2);
                        if (rand == 1)
                        {
                            rabbit.escape(false, false, false, true);
                        }
                        else
                        {
                            rabbit.escape(false, false, true, false);
                        }
                    }
                    else if (rabbit.y == 520 && head.y == 480 && (rabbit.x != 520 || rabbit.x != 40))
                    {
                        int rand1 = random.Next(1, 2);
                        if (rand1 == 1)
                        {
                            rabbit.escape(true, false, false, false);
                        }
                        else
                        {
                            rabbit.escape(false, true, false, false);
                        }
                    }
                    else if (rabbit.y == 40 && head.y == 80 && (rabbit.x != 520 || rabbit.x != 40))
                    {
                        int rand2 = random.Next(1, 2);
                        if (rand2 == 1)
                        {
                            rabbit.escape(true, false, false, false);
                        }
                        else
                        {
                            rabbit.escape(false, true, false, false);
                        }
                    }
                    else if (rabbit.x == 40 && head.x == 80 && (rabbit.y != 520 || rabbit.y != 40))
                    {
                        int rand3 = random.Next(1, 2);
                        if (rand3 == 1)
                        {
                            rabbit.escape(false, false, false, true);
                        }
                        else
                        {
                            rabbit.escape(false, false, true, false);
                        }
                    }
                }

                // столкновение яблока и кролика
                if (rabbit.x == apple.x && rabbit.y == apple.y)
                {
                    apple.move();
                }

                //если кролик врежется в тело змеи, то умрёт
                foreach (var p in snake.Where(x => x != head))
                {
                    if (p.x == rabbit.x && p.y == rabbit.y)
                    {
                        score += 25;
                        amount_of_rabbits--;
                        Border_died.Children.Remove(rabbit.image);
                        rabbit.x = random.Next(13) * 40 + 40;
                        rabbit.y = random.Next(13) * 40 + 40;
                    }
                }
            }
            //проверяем, что голова змеи не врезалась в тело
            foreach (var p in snake.Where(x => x != head))
            {
                //если координаты головы и какой либо из частей тела совпадают
                if (p.x == head.x && p.y == head.y)
                {
                    //мы проиграли
                    moveTimer.Stop();
                    button1.Visibility    = Visibility.Visible;
                    tbGameOver.Visibility = Visibility.Visible;
                    return;
                }
            }

            //проверяем, что голова змеи не вышла за пределы поля
            if (head.x < 40 || head.x >= 540 || head.y < 40 || head.y >= 540)
            {
                //мы проиграли
                moveTimer.Stop();
                button1.Visibility    = Visibility.Visible;
                tbGameOver.Visibility = Visibility.Visible;
                return;
            }

            //проверяем, что голова змеи врезалась в яблоко
            if (head.x == apple.x && head.y == apple.y)
            {
                //увеличиваем счет
                score++;
                //двигаем яблоко на новое место
                apple.move();
                // добавляем новый сегмент к змее
                var part = new BodyPart(snake.Last());
                Border_died.Children.Add(part.image);
                snake.Add(part);
            }
            //перерисовываем экран
            UpdateField();
        }
        void moveTimer_Tick(object sender, EventArgs e)
        {
            //в обратном порядке двигаем все элементы змеи
            foreach (var p in Enumerable.Reverse(snake))
            {
                p.move();
            }

            //проверяем, что голова змеи не врезалась в тело
            foreach (var p in snake.Where(x => x != head))
            {
                //если координаты головы и какой либо из частей тела совпадают
                if (p.x == head.x && p.y == head.y)
                {
                    //мы проиграли
                    moveTimer.Stop();
                    teleportTimercreat.Stop();
                    tbGameOver.Visibility = Visibility.Visible;
                    button1.Content       = "Again?";
                    button1.Visibility    = Visibility.Visible;
                    return;
                }
            }

            //проверяем, что голова змеи не вышла за пределы поля
            if (head.x < 40 || head.x >= 540 || head.y < 40 || head.y >= 540)
            {
                //мы проиграли
                moveTimer.Stop();
                teleportTimercreat.Stop();
                tbGameOver.Visibility = Visibility.Visible;
                button1.Content       = "Again?";
                button1.Visibility    = Visibility.Visible;
                return;
            }

            //проверяем, что голова змеи врезалась в яблоко
            if (head.x == apple.x && head.y == apple.y)
            {
                //увеличиваем счет
                score++;
                //двигаем яблоко на новое место
                apple.move();
                // добавляем новый сегмент к змее
                var part = new BodyPart(snake.Last());
                canvas1.Children.Add(part.image);
                snake.Add(part);
            }
            //проверяем поподание головы в один из телепортов
            if (portal == true)
            {
                foreach (var t in Portals)
                {
                    if (head.x == t.Px1 && head.y == t.Py1)
                    {
                        teleportTimercreat.Stop();
                        head.teleport(t.Px2, t.Py2);
                        foreach (var p in Enumerable.Reverse(snake))
                        {
                            p.move();
                        }
                        teleportTimercreat.Start();
                    }
                    if (head.x == t.Px2 && head.y == t.Py2)
                    {
                        teleportTimercreat.Stop();
                        head.teleport(t.Px1, t.Py1);
                        foreach (var p in Enumerable.Reverse(snake))
                        {
                            p.move();
                        }
                        teleportTimercreat.Start();
                    }
                }
            }
            //перерисовываем экран
            UpdateField();
        }