From 975c41012c1855d54114493e70559523d833dbf9 Mon Sep 17 00:00:00 2001 From: Krunal Gangadhar Kharat <68007121+KrunalKharat02@users.noreply.github.com> Date: Wed, 5 Oct 2022 02:54:21 +0530 Subject: [PATCH] Create snake_game.py 90's most played mobile game i.e Snake game using Tkinter python for beginners also very easy to understand! Its fun to create and also to play! you will learn how logic is applied in coding, and also very easy to learn python --- Snake/snake_game.py | 134 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 Snake/snake_game.py diff --git a/Snake/snake_game.py b/Snake/snake_game.py new file mode 100644 index 0000000..102b79d --- /dev/null +++ b/Snake/snake_game.py @@ -0,0 +1,134 @@ +import turtle as t +import random + +w = 500 # Width of box +h = 500 # Height of box +food_size = 10 # Size of food +delay = 100 # in millisecond + +# Values by which snake will move in direction when given direction +offsets = { + "up": (0, 20), + "down": (0,-20), + "left": (-20,0), + "right": (20,0) +} +global SCORE +SCORE = 0 +# Default postion of game scene +def reset(): + global snake, snake_dir, food_position, pen + + snake = [[0,0],[0,20],[0,40],[0,60],[0,80]] + snake_dir = "up" #default snake direction + food_position = get_random_food_position() + food.goto(food_position) # render food on scene + move_snake() + +def move_snake(): + global snake_dir,SCORE + + 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]: + print(SCORE) + 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() + + t.ontimer(move_snake, delay) + +def food_collision(): + global food_position, SCORE + if get_distance(snake[-1], food_position) < 20: + SCORE += 10 + 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 +# Control +def go_up(): + global snake_dir + if snake_dir != "down": + snake_dir = "up" +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" +def go_right(): + global snake_dir + if snake_dir != "left": + snake_dir = "right" + + + +#define screen setup +screen = t.Screen() +screen.setup(w, h) +screen.title("Snake Game") +screen.bgcolor("lightgrey") +screen.tracer(0) + +#define snake setup +pen = t.Turtle("square") +pen.penup() + +#define food setup +food = t.Turtle() +food.shape("circle") +food.color("red") +food.shapesize(food_size / 20) +food.penup() + +#define control setup +screen.listen() +screen.onkey(go_up, "Up") +screen.onkey(go_right, "Right") +screen.onkey(go_down, "Down") +screen.onkey(go_left, "Left") + +reset() +t.done()