From a8974bff8bc611b520d55ae6a98d31fc65e33323 Mon Sep 17 00:00:00 2001 From: Varun <76661061+VARUNvk1729@users.noreply.github.com> Date: Mon, 3 Oct 2022 12:01:24 +0530 Subject: [PATCH] Created Hungrysnake.py game A long serpentine creature slithers across a limited field, obeying the player's orders (moving right, left, down, and up). And there's no way to stop it from moving. Just don't touch the boundaries or you'll die! And don't bite yourself or... well, you get the idea. Along the way, the creature encounters food that makes it even longer. As it grows, it gets more and more cramped. --- src/Hungrysnake.py | 130 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 src/Hungrysnake.py diff --git a/src/Hungrysnake.py b/src/Hungrysnake.py new file mode 100644 index 0000000..2351360 --- /dev/null +++ b/src/Hungrysnake.py @@ -0,0 +1,130 @@ +import turtle +import random + +w = 500 +h = 500 +food_size = 10 +delay = 100 + +offsets = { + "up": (0, 20), + "down": (0, -20), + "left": (-20, 0), + "right": (20, 0) +} + +def reset(): + global snake, snake_dir, food_position, pen + snake = [[0, 0], [0, 20], [0, 40], [0, 60], [0, 80]] + snake_dir = "up" + food_position = get_random_food_position() + food.goto(food_position) + move_snake() + +def move_snake(): + global snake_dir + + new_head = snake[-1].copy() + new_head[0] = snake[-1][0] + offsets[snake_dir][0] + new_head[1] = snake[-1][1] + offsets[snake_dir][1] + + + if new_head in snake[:-1]: + reset() + else: + snake.append(new_head) + + + if not food_collision(): + snake.pop(0) + + + if snake[-1][0] > w / 2: + snake[-1][0] -= w + elif snake[-1][0] < - w / 2: + snake[-1][0] += w + elif snake[-1][1] > h / 2: + snake[-1][1] -= h + elif snake[-1][1] < -h / 2: + snake[-1][1] += h + + + pen.clearstamps() + + + for segment in snake: + pen.goto(segment[0], segment[1]) + pen.stamp() + + + screen.update() + + turtle.ontimer(move_snake, delay) + +def food_collision(): + global food_position + if get_distance(snake[-1], food_position) < 20: + food_position = get_random_food_position() + food.goto(food_position) + return True + return False + +def get_random_food_position(): + x = random.randint(- w / 2 + food_size, w / 2 - food_size) + y = random.randint(- h / 2 + food_size, h / 2 - food_size) + return (x, y) + +def get_distance(pos1, pos2): + x1, y1 = pos1 + x2, y2 = pos2 + distance = ((y2 - y1) ** 2 + (x2 - x1) ** 2) ** 0.5 + return distance +def go_up(): + global snake_dir + if snake_dir != "down": + snake_dir = "up" + +def go_right(): + global snake_dir + if snake_dir != "left": + snake_dir = "right" + +def go_down(): + global snake_dir + if snake_dir!= "up": + snake_dir = "down" + +def go_left(): + global snake_dir + if snake_dir != "right": + snake_dir = "left" + + +screen = turtle.Screen() +screen.setup(w, h) +screen.title("Snake") +screen.bgcolor("blue") +screen.setup(500, 500) +screen.tracer(0) + + +pen = turtle.Turtle("square") +pen.penup() + + +food = turtle.Turtle() +food.shape("square") +food.color("yellow") +food.shapesize(food_size / 20) +food.penup() + + +screen.listen() +screen.onkey(go_up, "Up") +screen.onkey(go_right, "Right") +screen.onkey(go_down, "Down") +screen.onkey(go_left, "Left") + + +reset() +turtle.done()