NeoSnake
Made by neofenixlive
Execute
Go back.
import turtle import random import time WIDTH, HEIGHT = 400, 400 BLOCK_SIZE = 20 FRAME_TIME = 1.0 / 30 GAME_SPEED = 0.1 screen = turtle.Screen() screen.bgcolor("#202020") screen.tracer(0) head = turtle.Turtle() head.speed(0) head.shape("square") head.color("#00FF00") head.penup() head.goto(0, 0) head.direction = "stop" food = turtle.Turtle() food.speed(0) food.shape("square") food.color("#FF0000") food.penup() food.goto(0, 100) segments = [] score = 0 high_score = 0 pen = turtle.Turtle() pen.speed(0) pen.color("white") pen.penup() pen.hideturtle() def go_up(): if head.direction != "down": head.direction = "up" def go_down(): if head.direction != "up": head.direction = "down" def go_left(): if head.direction != "right": head.direction = "left" def go_right(): if head.direction != "left": head.direction = "right" def move(): if head.direction == "up": head.sety(head.ycor() + BLOCK_SIZE) elif head.direction == "down": head.sety(head.ycor() - BLOCK_SIZE) elif head.direction == "left": head.setx(head.xcor() - BLOCK_SIZE) elif head.direction == "right": head.setx(head.xcor() + BLOCK_SIZE) def reset_game(): global score, segments, head time.sleep(0.5) head.goto(0, 0) head.direction = "stop" for seg in segments: seg.goto(1000, 1000) segments.clear() score = 0 update_score() def update_score(): pen.clear() pen.goto(0, HEIGHT/2 - 40) pen.write(f"Score: {score}, High Score: {high_score}", align="center", font=("Arial", 16, "bold")) screen.listen() screen.onkey(go_up, "Up") screen.onkey(go_down, "Down") screen.onkey(go_left, "Left") screen.onkey(go_right, "Right") last_time = time.time() timer_move = 0 update_score() while True: start_frame = time.time() current_time = time.time() dt = current_time - last_time last_time = current_time timer_move += dt if timer_move >= GAME_SPEED: for i in range(len(segments) - 1, 0, -1): segments[i].goto(segments[i-1].xcor(), segments[i-1].ycor()) if len(segments) > 0: segments[0].goto(head.xcor(), head.ycor()) move() limit_x = (WIDTH / 2) - BLOCK_SIZE limit_y = (HEIGHT / 2) - BLOCK_SIZE if not (-limit_x <= head.xcor() <= limit_x and -limit_y <= head.ycor() <= limit_y): reset_game() for seg in segments: if seg.distance(head) < BLOCK_SIZE: reset_game() if head.distance(food) < BLOCK_SIZE: x = random.randint(-9, 9) * 20 y = random.randint(-9, 9) * 20 food.goto(x, y) new_segment = turtle.Turtle() new_segment.speed(0) new_segment.shape("square") new_segment.color("#00AA00") new_segment.penup() new_segment.goto(400, 400) segments.append(new_segment) score += 1 if score > high_score: high_score = score update_score() timer_move = 0 screen.update() elapsed = time.time() - start_frame if elapsed < FRAME_TIME: time.sleep(FRAME_TIME - elapsed)