Узнайте черепаху через змею!
Сегодняшний модуль – «Черепаха», и мы посмотрим на то, что он предлагает, создавая и создавая знаменитую игру змеи, и я помню, как впервые играл, это было на Nokia 3310 еще в 2001 году.
Идея змеи очень проста, где вы – игрок – перемещаете змею в квадратное поле и съев яблоки, и каждый раз, когда вы едите одно яблоко, длина змеи растет, и если змея касается себя или касается границы , тогда игра закончится.
Предварительные условия для этого игрового проекта:
1- Модуль черепахи: который представляет собой встроенный модуль Python, который означает, что вам не нужно устанавливать его, и он используется для создания изображений и различных форм на виртуальном холсте с помощью пера черепахи, и мы увидим это через минуту, но Эта концепция очень проста, и на самом деле модуль черепахи побуждает многих детей начать программирование из -за простоты его использования и производительности, которую они свидетельствуют на экране – и я могу относиться к этому, так как в 1992 году мне было 9 лет, и я начал программировать на основе моего Atari 800xl, и это была та же самая вещь, которая рисовала цветы и геометрические просты Вне канала моего хорошего друга Кристиана Томпсона Tokyoedtech: https://www.youtube.com/channel/uc2vm-0xx5rkwcxwwtbzgoxg На мой взгляд, он король черепахи на YouTube, и вы найдете там много очень интересных видео, если вы любите видеоигры на Python.
2-случайный модуль для генерации случайных чисел
3- модуль времени, и Это просто обеспечивает функции времени для игры.
Вот код с объяснением
import turtle import time import random # To slow down the snake movement (after keyboard bindings) # We declared a variable called delay to 0.1. And then call the function time.sleep(delay) to reduce turtle speed. delay = 0.1 score = 0 high_score = 0 # Creating a screen screen = turtle.Screen() screen.title("Snake Game") screen.bgcolor("black") # the width and height screen.setup(width=600, height=600) # Turns animation on/off and set delay for update drawings. 0 for off, 1 for on screen.tracer(0) # head of the snake head = turtle.Turtle() head.shape("circle") head.color("white") head.penup() head.goto(0, 0) head.direction = "Stop" '''Once the head is created, we'll need a main game loop which is always set to true. I am going to update the window using the function screen.update(). This function basically updates the screen continuously with the loop. Main Gameplay while True: screen.update() ''' # food in the game food = turtle.Turtle() # choice method : chooses a random element from a non-empty sequence. colors = random.choice(['red', 'green', 'yellow']) food.speed(0) food.shape('circle') food.color(colors) food.penup() food.goto(0, 100) # Typing score and high score in the top of the window pen = turtle.Turtle() pen.speed(0) pen.color("green") pen.penup() pen.hideturtle() pen.goto(0, 250) pen.write("Score : 0 High Score : 0", align="center", font=("courier", 24, "bold")) # Assigning key directions def up(): if head.direction != "down": head.direction = "up" def down(): if head.direction != "up": head.direction = "down" def right(): if head.direction != "left": head.direction = "right" def left(): if head.direction != "right": head.direction = "left" # Note: The snake cannot go right from left, left from right, top from down and down from the top. # Moving 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 ---- # We still need the computer to listen to the key press. # So, we'll us a function called win.listen()that listens to the key presses. # and each key press needs to be bound to a function that carries out an action. screen.listen() screen.onkeypress(up, "Up") screen.onkeypress(down, "Down") screen.onkeypress(right, "Right") screen.onkeypress(left, "Left") scales = [] # Main Gameplay while True: screen.update() # wall collision # We need to make sure that the snake dies when it collides with the border. # We already have the coordinates of the border, we just need to reset the snakehead position when it touches those coordinates. # Also, the snake needs to stop moving and hence change the direction to stop. 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" colors = random.choice(['red', 'blue', 'green']) shapes = random.choice(['square', 'circle']) # to make the scales of the snake dissapear, we move it to 1000 on both x and y axis for scale in scales: scale.goto(1000, 1000) # then we clear them scales.clear() score = 0 delay = 0.1 pen.clear() pen.write("Score : {} High Score : {} ".format( score, high_score), align="center", font=("courier", 24, "bold")) # food collision # We will need to calculate the distance between the 2 objects ( snake head and apple) # This is called Collision detection, and it's one of the most important concepts in video games # If the distance is less than 15 ( between head and apple) the food is reposisioned on the screen if head.distance(food) < 20: x = random.randint(-270, 270) y = random.randint(-270, 270) food.goto(x, y) # Adding scales new_scale = turtle.Turtle() new_scale.speed(0) new_scale.shape("circle") new_scale.color("orange") # tail colour new_scale.penup() scales.append(new_scale) # lessa delay -= 0.001 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, "bold")) # Adding the scales to snake's head is ok, but we also need them to move in whatever direction the head is moving, # so the logic here is to move the new scale added which is on either x or y axis # So if it's on the x position we'll move it to x-1 to x-2; and the same applies for y , this way we will guarantee that each scale in the scales will follow the head for index in range(len(scales)-1, 0, -1): x = scales[index-1].xcor() y = scales[index-1].ycor() scales[index].goto(x, y) if len(scales) > 0: x = head.xcor() y = head.ycor() scales[0].goto(x, y) move() # Checking for head collisions with body scales for scale in scales: if scale.distance(head) < 20: time.sleep(1) head.goto(0, 0) head.direction = "stop" colors = random.choice(['red', 'blue', 'green']) shapes = random.choice(['square', 'circle']) # we need to move these old scales in a very far invisible posision on the canvas, if not these scales will remain on the screen; and then we will clear them. for scale in scales: scale.goto(1000, 1000) scales.clear() score = 0 delay = 0.1 # Delete the turtle's drawings from the screen. Do not move turtle. pen.clear() pen.write("Score : {} High Score : {} ".format( score, high_score), align="center", font=("Courier", 24, "bold")) time.sleep(delay) screen.mainloop()
Оригинал: “https://dev.to/bekbrace/learn-turtle-module-via-snake-game-in-python-1ih1”