RonnieRT / PYTHON-PRACTICE-QUESTIONS

1 stars 0 forks source link

Snake Game #1

Open RonnieRT opened 1 year ago

RonnieRT commented 1 year ago

It is a snake game just like the way we used to play in our childhood the difference is that it was based on the Java and this is built on Python .

RonnieRT commented 1 year ago

import turtle import random

@python.coder_

WIDTH = 500 HEIGHT = 500 FOOD_SIZE = 10 DELAY = 100 offsets = { "up": (0, 20), "down": (0, -20), "left": (-20, 0), "right": (20, 0) } def reset(): global snake, snake_direction, food_pos, pen snake = [[0, 0], [0, 20], [0, 40], [0, 50], [0, 60]] snake_direction = "up" food_pos = get_random_food_pos() food.goto(food_pos)

screen.update() Only needed if we are fussed about drawing food before next call to draw_snake().

move_snake()

def move_snake(): global snake_direction

#  Next position for head of snake.
new_head = snake[-1].copy()
new_head[0] = snake[-1][0] + offsets[snake_direction][0]
new_head[1] = snake[-1][1] + offsets[snake_direction][1]

# Check self-collision
if new_head in snake[:-1]:
    reset()
else:

    snake.append(new_head)
    if not food_collision():
        snake.pop(0)  # Keep the snake the same length unless fed.

    #  Allow screen wrapping
    if snake[-1][0] > WIDTH / 2:
        snake[-1][0] -= WIDTH
    elif snake[-1][0] < - WIDTH / 2:
        snake[-1][0] += WIDTH
    elif snake[-1][1] > HEIGHT / 2:
        snake[-1][1] -= HEIGHT
    elif snake[-1][1] < -HEIGHT / 2:
        snake[-1][1] += HEIGHT

    # Clear previous snake stamps
    pen.clearstamps()

    # Draw snake
    for segment in snake:
        pen.goto(segment[0], segment[1])
        pen.stamp()

    # Refresh screen
    screen.update()

    # Rinse and repeat
    turtle.ontimer(move_snake, DELAY)

def food_collision(): global food_pos if get_distance(snake[-1], food_pos) < 20: food_pos = get_random_food_pos() food.goto(food_pos) return True return False

def get_random_food_pos(): x = random.randint(- WIDTH / 2 + FOOD_SIZE, WIDTH / 2 - FOOD_SIZE) y = random.randint(- HEIGHT / 2 + FOOD_SIZE, HEIGHT / 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_direction if snake_direction != "down": snake_direction = "up"

def go_right(): global snake_direction if snake_direction != "left": snake_direction = "right"

def go_down(): global snake_direction if snake_direction != "up": snake_direction = "down"

def go_left(): global snake_direction if snake_direction != "right": snake_direction = "left"

Screen

screen = turtle.Screen() screen.setup(WIDTH, HEIGHT) screen.title("Snake Game") screen.bgcolor("black") screen.setup(500, 500) screen.tracer(0)

Pen

pen = turtle.Turtle("square") pen.penup() pen.pencolor("yellow")

Food

food = turtle.Turtle() food.shape("circle") food.color("red") food.shapesize(FOOD_SIZE / 20) # Default size of turtle "square" shape is 20. food.penup()

Event handlers

screen.listen() screen.onkey(go_up, "Up") screen.onkey(go_right, "Right") screen.onkey(go_down, "Down") screen.onkey(go_left, "Left")

Let's go

reset() turtle.done()