//обработчик тика таймера. Все движение происходит здесь 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(); }