Creating a simple version of the classic “Snake” game using Python’s Turtle graphics is a great way to apply basic programming concepts while making something fun and interactive. In this version, the snake moves around the screen, and when it collects an item, it grows in length.
Basic Overview of the Game:
- The snake moves continuously in one direction and can change direction based on keyboard input.
- Items appear randomly on the screen. When the snake collides with an item, the snake grows in length.
- If the snake collides with itself or the boundaries, the game ends.
Python Code for Simple Snake Game
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
import turtle import random import time wn = turtle.Screen() wn.title("Snake Game") wn.bgcolor("black") wn.setup(width=600, height=600) wn.tracer(0) # Turns off the screen updates # Snake head head = turtle.Turtle() head.speed(0) head.shape("square") head.color("white") head.penup() head.goto(0,0) head.direction = "stop" # Snake food food = turtle.Turtle() food.speed(0) food.shape("circle") food.color("red") food.penup() food.goto(0,100) segments = [] # Functions to move the snake 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": y = head.ycor() head.sety(y + 20) if head.direction == "down": y = head.ycor() head.sety(y - 20) if head.direction == "left": x = head.xcor() head.setx(x - 20) if head.direction == "right": x = head.xcor() head.setx(x + 20) # Keyboard bindings wn.listen() wn.onkey(go_up, "Up") wn.onkey(go_down, "Down") wn.onkey(go_left, "Left") wn.onkey(go_right, "Right") # Main game loop while True: wn.update() move() time.sleep(0.1) # Check for collision with the food if head.distance(food) < 20: # Move the food to a random spot x = random.randint(-290, 290) y = random.randint(-290, 290) food.goto(x, y) # Add a segment new_segment = turtle.Turtle() new_segment.speed(0) new_segment.shape("square") new_segment.color("grey") new_segment.penup() segments.append(new_segment) # Move the end segments first in reverse order for index in range(len(segments)-1, 0, -1): x = segments[index-1].xcor() y = segments[index-1].ycor() segments[index].goto(x, y) # Move segment 0 to where the head is if len(segments) > 0: x = head.xcor() y = head.ycor() segments[0].goto(x, y) # Check for snake collisions with the wall if head.xcor()>290 or head.xcor()<-290 or head.ycor()>290 or head.ycor()<-290: time.sleep(1) head.goto(0,0) head.direction = "stop" # Hide the segments for segment in segments: segment.goto(1000, 1000) # Move segments out of the window segments.clear() wn.mainloop() |
Key Features of the Game:
- Movement Controls: The snake is controlled with the arrow keys. Movement functions change the direction of the snake’s head but prevent it from moving directly opposite to its current direction (e.g., can’t go directly from moving up to moving down).
- Food Collision: When the snake’s head collides with the food, the food is repositioned, and a new segment is added to the snake’s body, simulating growth.
- Continuous Movement: The game loop continuously updates the game state, moving the snake and checking for collisions.
- Boundary Collision: If the snake hits the window boundary, the game is reset.
This simple Snake game introduces basic game development concepts like game loops, input handling, collision detection, and object movement. Feel free to expand upon it by adding more features, such as keeping score, increasing the snake’s speed over time, or adding a game over screen.