Created
September 2, 2018 08:56
-
Star
(118)
You must be signed in to star a gist -
Fork
(94)
You must be signed in to fork a gist
-
-
Save wynand1004/ec105fd2f457b10d971c09586ec44900 to your computer and use it in GitHub Desktop.
A Simple Snake Game made in Python 3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Simple Snake Game in Python 3 for Beginners | |
| # By @TokyoEdTech | |
| import turtle | |
| import time | |
| import random | |
| delay = 0.1 | |
| # Score | |
| score = 0 | |
| high_score = 0 | |
| # Set up the screen | |
| wn = turtle.Screen() | |
| wn.title("Snake Game by @TokyoEdTech") | |
| wn.bgcolor("green") | |
| 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("black") | |
| 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 = [] | |
| # Pen | |
| pen = turtle.Turtle() | |
| pen.speed(0) | |
| pen.shape("square") | |
| pen.color("white") | |
| pen.penup() | |
| pen.hideturtle() | |
| pen.goto(0, 260) | |
| pen.write("Score: 0 High Score: 0", align="center", font=("Courier", 24, "normal")) | |
| # Functions | |
| 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.onkeypress(go_up, "w") | |
| wn.onkeypress(go_down, "s") | |
| wn.onkeypress(go_left, "a") | |
| wn.onkeypress(go_right, "d") | |
| # Main game loop | |
| while True: | |
| wn.update() | |
| # Check for a collision with the border | |
| 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) | |
| # Clear the segments list | |
| segments.clear() | |
| # Reset the score | |
| score = 0 | |
| # Reset the delay | |
| delay = 0.1 | |
| pen.clear() | |
| pen.write("Score: {} High Score: {}".format(score, high_score), align="center", font=("Courier", 24, "normal")) | |
| # Check for a 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) | |
| # Shorten the delay | |
| delay -= 0.001 | |
| # Increase the score | |
| score += 10 | |
| if score > high_score: | |
| high_score = score | |
| pen.clear() | |
| pen.write("Score: {} High Score: {}".format(score, high_score), align="center", font=("Courier", 24, "normal")) | |
| # 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) | |
| move() | |
| # Check for head collision with the body segments | |
| for segment in segments: | |
| if segment.distance(head) < 20: | |
| time.sleep(1) | |
| head.goto(0,0) | |
| head.direction = "stop" | |
| # Hide the segments | |
| for segment in segments: | |
| segment.goto(1000, 1000) | |
| # Clear the segments list | |
| segments.clear() | |
| # Reset the score | |
| score = 0 | |
| # Reset the delay | |
| delay = 0.1 | |
| # Update the score display | |
| pen.clear() | |
| pen.write("Score: {} High Score: {}".format(score, high_score), align="center", font=("Courier", 24, "normal")) | |
| time.sleep(delay) | |
| wn.mainloop() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Geçen gün can sıkıntısından Python'da yılan oyunu kodlamıştım, basit ama insanın içini ısıtıyor. Sonra aklıma geldi, acaba daha profesyonel platformlarda bu tarz oyun deneyimleri nasıl diye bakarken betgaranti hakkında bir inceleme yazısına denk geldim. Doğrudan oyun oynatma yok, sadece platformun yapısını, sunduğu oyun çeşitlerini ve lisans bilgilerini anlatıyor. Curaçao lisansı ve SSL şifreleme gibi güvenlik detaylarından bahsetmiş. Kendi küçük oyun projemle kıyaslayınca, profesyonel dünyada işlerin ne kadar farklı yürüdüğünü görmek ilginç oldu. Sanırım bazen bu tarz bilgilendirici yazıları okumak, sektör hakkında fikir edinmek için fena olmuyor.