Ако обичате да играете на змия, сигурен съм, че тази статия ще ви бъде интересна.
В тази статия ще ви науча как да измислите проста игра със змия, която дори начинаещ в Python би намерил лесна за разработване.
Съществуват няколко начина за създаване на тази игра и единият включва използването на библиотеката PyGame на Python, която е библиотека на Python, която използваме за създаване на игри.
Другият начин е чрез използването на библиотеката на костенурките. Този модул идва предварително инсталиран с Python и предоставя виртуално платно за потребителите да създават форми и картини.
Следователно тази статия ще използва библиотеката на костенурките, за да реализира нашата проста игра със змия, която е удобна за начинаещи, особено за начинаещи разработчици на Python.
В допълнение към този модул, ще използваме и два други модула, а именно;
- Времеви модул – Този метод ще ни позволи да следим броя секунди, които са изминали от предишния път.
- Случаен модул – Той генерира произволни числа в Python.
Други основни инструменти, които ще трябва да използвате, включват текстов редактор по ваш избор. Ще използвам VSCode в тази статия. Разбира се, ще трябва да инсталирате Python 3 на вашата машина, ако все още не го имате. Можете също така да използвате компилатора pctechbg.net.
Това трябва да е забавно!
Съдържание
Как работи играта със змия
Крайната цел на тази игра е играчът да постигне най-висок резултат, като контролира змията, за да събере храната, която показва екрана.
Играчът контролира змията с помощта на четири клавиша за посока, които са спрямо посоката, към която се движи змията. Ако змията удари блок или себе си, играчът губи играта.
Следващите стъпки ще следваме, за да реализираме тази игра.
- Импортиране в нашите програми на предварително инсталираните модули (костенурка, време и случаен).
- Създаване на екрана на играта с помощта на модула костенурка.
- Задаване на клавишите за посоката на движение на змията около екрана.
- Реализация на геймплея.
Създайте файл snakegame.py, в който ще добавим кода за внедряване.
Импортиране на модулите
Тази част от кода ще импортира костенурката, времето и произволните модули, които по подразбиране са предварително инсталирани в Python. Освен това след това ще зададем стойности по подразбиране за първоначалния резултат на играча, най-високия резултат, който играчът ще постигне, и времето на забавяне, взето от играча при всеки ход. Времевият модул се използва тук за изчисляване на времето на забавяне.
Добавете следния код към вашия файл snakegame.py.
import turtle import random import time player_score = 0 highest_score = 0 delay_time = 0.1
Създаване на екрана на играта
Модулът за костенурка, който импортираме тук, ще ни позволи да създадем виртуално платно, което ще бъде екранът на прозореца на играта. От тук можем да създадем тялото на змията и храната, която змията ще събира. Нашият екран също ще показва проследения резултат на играча.
Добавете този код към файла на Python.
# window screen created wind = turtle.Screen() wind.title("Snake Maze🐍") wind.bgcolor("red") # The screen size wind.setup(width=600, height=600) # creating the snake snake = turtle.Turtle() snake.shape("square") snake.color("black") snake.penup() snake.goto(0, 0) snake.direction = "Stop" # creating the food snake_food = turtle.Turtle() shapes = random.choice('triangle','circle') snake_food.shape(shapes) snake_food.color("blue") snake_food.speed(0) snake_food.penup() snake_food.goto(0, 100) pen = turtle.Turtle() pen.speed(0) pen.shape('square') pen.color('white') pen.penup() pen.hideturtle() pen.goto(0, 250) pen.write("Your_score: 0 Highest_Score : 0", align="center", font=("Arial", 24, "normal")) turtle.mainloop()
Кодовият фрагмент по-горе започва с инициализиране на екрана на костенурката и предава заглавие и цвят на фона на екрана. След като определим размера на прозореца на нашия екран, рисуваме формата на змията върху виртуалното платно.
Методът penup() просто взима писалката на костенурката, така че да не се рисува линия, докато костенурката се движи. Методът goto(x,y) съдържа координатни позиции, които преместват костенурката до абсолютна позиция.
След това създаваме храната, която змията събира. Ще искаме да показваме резултата на играча всеки път, когато змията събира храната и най-високия резултат, който играчът достига по време на играта. Затова използваме метода pen.write(), за да приложим това. Hideturtle() скрива иконата на костенурка от екрана в заглавната част, в която е написан този текст.
Важно е да добавите turtle.mainloop() в края на вашия код, който ще показва екрана по-дълго, за да ви позволи като потребител да направите нещо на екрана.
Стартирайте файла и трябва да имате следния резултат:
Настройване на клавишите за посока за змията
Тук ще настроим конкретни клавиши, които ще насочват посоката, в която змията ще се движи на екрана. Ще използваме ‘L’ за ляво, ‘R’ за дясно, ‘U’ за нагоре, ‘D’ за надолу. Ние ще приложим тези указания, като използваме функцията за насочване на костенурката, която ще извикаме на змията.
Добавете следния кодов фрагмент към вашия код.
# Assigning directions def moveleft(): if snake.direction != "right": snake.direction = "left" def moveright(): if snake.direction != "left": snake.direction = "right" def moveup(): if snake.direction != "down": snake.direction = "up" def movedown(): if snake.direction != "up": snake.direction = "down" def move(): if snake.direction == "up": coord_y = snake.ycor() snake.sety(coord_y+20) if snake.direction == "down": coord_y = snake.ycor() snake.sety(coord_y-20) if snake.direction == "right": coord_x = snake.xcor() snake.setx(coord_x+20) if snake.direction == "left": coord_x = snake.xcor() snake.setx(coord_x-20) wind.listen() wind.onkeypress(moveleft, 'L') wind.onkeypress(moveright, 'R') wind.onkeypress(moveup, 'U') wind.onkeypress(movedown, 'D')
Функцията move() по-горе задава движението на змията в определената позиция в рамките на точна координатна стойност.
Функцията listen() е слушател на събития, който извиква методите, които преместват змията в определена посока, когато играчът натисне клавиша.
Реализация на геймплея на играта змия
След като изложихме основния изглед на нашата игра със змии, ще трябва да направим играта в реално време.
Това ще включва следното:
- Увеличете дължината на змията всеки път, когато събира храната, като за предпочитане използвате различен цвят.
- Увеличаване на резултата на играча всеки път, когато змията събере храната и проследяване на най-високия резултат.
- Играчът може да контролира змията от сблъсък със стената или със собственото си тяло.
- Играта се рестартира, когато змията се сблъска.
- Резултатът на играча се нулира, когато играта се рестартира, докато екранът запазва най-високия резултат на играча.
Добавете останалата част от този код към вашия python файл.
segments = [] #Implementing the gameplay while True: wind.update() if snake.xcor() > 290 or snake.xcor() < -290 or snake.ycor() > 290 or snake.ycor() < -290: time.sleep(1) snake.goto(0, 0) snake.direction = "Stop" snake.shape("square") snake.color("green") for segment in segments: segment.goto(1000, 1000) segments.clear() player_score = 0 delay_time = 0.1 pen.clear() pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal")) if snake.distance(snake_food) < 20: coord_x = random.randint(-270, 270) coord_y = random.randint(-270, 270) snake_food.goto(coord_x, coord_y) # Adding segment added_segment = turtle.Turtle() added_segment.speed(0) added_segment.shape("square") added_segment.color("white") added_segment.penup() segments.append(added_segment) delay_time -= 0.001 player_score += 5 if player_score > highest_score: highest_score = player_score pen.clear() pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal")) # checking for collisions for i in range(len(segments)-1, 0, -1): coord_x = segments[i-1].xcor() coord_y = segments[i-1].ycor() segments[i].goto(coord_x, coord_y) if len(segments) > 0: coord_x = snake.xcor() coord_y = snake.ycor() segments[0].goto(coord_x, coord_y) move() for segment in segments: if segment.distance(snake) < 20: time.sleep(1) snake.goto(0, 0) snake.direction = "stop" snake.color('white') snake.shape('square') for segment in segments: segment.goto(1000, 1000) segment.clear() player_score = 0 delay_time = 0.1 pen.clear() pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal")) time.sleep(delay_time) turtle.mainloop()
В горния кодов фрагмент задаваме произволна позиция за храната на змията в екрана. Всеки път, когато змията събира тази храна, сегментът на тялото й се увеличава с различен цвят; бяло, в този случай, за да се различи растежът му.
След като змията събере храната, без да се сблъсква, храната се поставя на произволна позиция в рамките на 270 координатен диапазон на размера на екрана. Всеки път, когато змията събира храна, резултатът на играча се увеличава с 5. Когато змията се сблъска, резултатът на играча се задава на 0, докато екранът запазва най-високия си резултат.
Сега върнете файла Python и трябва да видите екрана на костенурката да изглежда така:
Заключение 🐍
Използването на библиотеката на костенурките е един забавен и лесен начин за създаване на играта със змии, както видяхме в тази статия. Като алтернатива можете да приложите същото, като използвате библиотеката PyGame. Можете да проверите на Урок за PyGame тук и вижте как можете да внедрите играта по различен начин.
Можете също да изпробвате игра за отгатване на числа в Python или как да получите JSON данни в Python.
Насладете се на кодирането!