Инструкции по кодированию игры «Snake of Prey» на Python
В предыдущей статье «Инструкция по написанию кода игры «Warrior Rabbit» на Python» мы познакомились с написанием кода игры на Python. На этот раз мы предлагаем вам продолжить узнавать больше интересного с помощью руководства по написанию кода для игры «Snake of Prey».
Шаг 1: Установка Pygame
Первое, что вам нужно сделать, это установить библиотеку Pygame на свой компьютер. Вы можете посетить pygame.org/download.shtml, чтобы загрузить и установить версию Pygame, которая соответствует версии Python на вашем компьютере.
Шаг 2: Создание игрового экрана
Чтобы создать экран для игры “Snake of Prey” с помощью библиотеки Pygame, вам нужно использовать функцию display.set_mode(). Кроме того, вам также придется использовать функции init() и quit() для инициализации и деинициализации вещей в начале и конце программы. Функция update() используется для обновления любых изменений, внесенных на экране.
flip() — еще одна функция, которая работает аналогично update(). Разница в том, что функция update() обновляет только внесенные изменения, в то время как функция flip() переделывает весь экран.
Ниже приведен пример кода:
импорт pygame pygame.init() dis=pygame.display.set_mode((400,300)) pygame.display.update() pygame.quit() quit()
Запустив код, вы получите следующие результаты:
Однако этот экран немедленно закроется. Чтобы исправить эту проблему, вам нужно создать цикл для игры, используя while перед фактическим выходом из игры.
Пример кода:
import pygame pygame.init() dis=pygame.display.set_mode((400,300)) pygame.display.update() pygame.display.set_caption('Snake game от Edureka') game_over=False, пока не game_over: для события в pygame .event.get(): print(event) #in ra tất cả các hành động xuất hiện trên man hình pygame.quit() quit()
При запуске этого кода вы увидите тот же экран, что и выше, но он не закроется. С добавлением функции event.get() экран будет возвращать все действия, которые на нем появляются. Вы также можете задать заголовок экрана с помощью функции display.set_caption().
Результаты после запуска программы:
Теперь у вас есть экран для вашей игры “Змейки”, но когда вы нажимаете кнопку закрытия (X), экран не закрывается. Причина в том, что вы не настроили закрытие экрана при нажатии кнопки закрытия. Для этого Pygame предоставляет вам команду QUIT, и вы можете использовать ее следующим образом:
импорт pygame pygame.init() dis=pygame.display.set_mode((400,300)) pygame.display.update() pygame.display.set_caption('Змейка игра от Edureka') game_over=False while not game_over: for event in pygame.event.get(): if event.type==pygame.QUIT: game_over=True pygame.quit() quit()
Теперь экран готов. Теперь осталось создать змею.
Шаг 3: Создаем змею
Чтобы создать змею, вам сначала нужно определить несколько цветовых переменных для змеи, добычи, экрана. Цветовая палитра, используемая в Pygame, — RGB (красный, зеленый, синий). В этом случае, если вы установите все на 0 для RGB, вы получите черный цвет, а если установите на 255, вы получите белый.
На самом деле наша змея — это прямоугольник. Чтобы нарисовать прямоугольник в Pygame, нужно использовать функцию draw.rect() и ввести размер и цвет.
Пример кода:
импорт pygame pygame.init() dis=pygame.display.set_mode((400,300)) pygame.display.set_caption('Змейка игра от Edureka') blue=(0,0,255) red=(255,0,0) game_over=False while not game_over: for event in pygame.event.get(): if event.type==pygame.QUIT: game_over=True pygame.draw.rect(dis,blue,(200,150,10,10)) pygame.display.update() pygame.quit() quit()
Результат при запуске примера кода:
Как вы видите, на экране появилась синяя змея. Следующий шаг — создать движение для змеи.
Шаг 4: Создайте движение змеи.
Чтобы переместить змейку, вам нужно создать события в классе KEYDOWN Pygame. Здесь используются события K_UP, K_DOWN, K_LEFT и K_RIGHT, которые соответствуют движениям змейки вверх, вниз, влево и вправо. С этого шага игровой экран также будет изменен с черного цвета по умолчанию на белый с помощью функции fill(). С этого шага змейка также станет черной, а игровой экран также увеличится вдвое.
Вам также необходимо создать две новые переменные x1_change и y1_change для хранения обновленных значений координат x и y. Пример кода до этого раздела выглядит следующим образом:
импорт pygame pygame.init() белый = (255, 255, 255) черный = (0, 0, 0) красный = (255, 0, 0) dis = pygame.display.set_mode((800, 600)) pygame.display.set_caption('Змейка от Edureka') game_over = False x1 = 300 y1 = 300 x1_change = 0 y1_change = 0 часы = pygame.time.Clock() пока не game_over: для события в pygame.event.get(): если event.type == pygame.QUIT: game_over = True если event.type == pygame.KEYDOWN: если event.key == pygame.K_LEFT: x1_change = -10 y1_change = 0 elif event.key == pygame.K_RIGHT: x1_change = 10 y1_change = 0 elif event.key == pygame.K_UP: y1_change = -10 x1_change = 0 elif event.key == pygame.K_DOWN: y1_change = 10 x1_change = 0 x1 += x1_change y1 += y1_change dis.fill(белый) pygame.draw.rect(dis, черный, (x1, y1, 10, 10)) pygame.display.update() clock.tick(30) pygame.quit() quit()
Результат при запуске программы:
Шаг 5: Создайте механизм Game Over, когда змея касается края экрана.
В игре «Охота на змей» игрок проиграет, если змея упрется в край экрана. Для этого вы добавляете оператор if, чтобы определить ограничения на координаты x и y, чтобы они были меньше или равны экрану. Вам также не следует использовать жесткие коды, а вместо этого использовать переменные, чтобы вы могли легко изменить их позже, если это необходимо.
Пример кода выглядит следующим образом:
импорт pygame время импорта pygame.init() белый = (255, 255, 255) черный = (0, 0, 0) красный = (255, 0, 0) dis_width = 800 dis_height = 600 dis = pygame.display.set_mode((dis_width, dis_width)) pygame.display.set_caption('Змейка от Edureka') game_over = False x1 = dis_width/2 y1 = dis_height/2 snake_block=10 x1_change = 0 y1_change = 0 часы = pygame.time.Clock() snake_speed=30 font_style = pygame.font.SysFont(None, 50) def message(msg,color): mesg = font_style.render(msg, True, color) dis.blit(mesg, (dis_width/2, dis_height/2)) while not game_over: for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: x1_change = -snake_block y1_change = 0 elif event.key == pygame.K_RIGHT: x1_change = snake_block y1_change = 0 elif event.key == pygame.K_UP: y1_change = -snake_block x1_change = 0 elif event.key == pygame.K_DOWN: y1_change = snake_block x1_change = 0 if x1 >= dis_width или x1 = dis_height или y1
А вот результат, если запустить программу и позволить змейке коснуться края экрана:
Шаг 6: Добавьте добычу
На этом этапе вы добавляете добычу к змее, и когда змея проходит над приманкой, появляется сообщение “Вкуснятина!!”. Игра также немного изменена в примере кода, чтобы добавить опции, позволяющие выйти или перезапустить игру после проигрыша. Изначально добыча установлена синей.
Пример кода:
импорт pygame импорт времени импорт случайного pygame.init() белый = (255, 255, 255) черный = (0, 0, 0) красный = (255, 0, 0) синий = (0, 0, 255) dis_width = 800 dis_height = 600 dis = pygame.display.set_mode((dis_width, dis_height)) pygame.display.set_caption('Змейка от Edureka') часы = pygame.time.Clock() snake_block = 10 snake_speed = 30 font_style = pygame.font.SysFont(None, 30) def message(msg, color): mesg = font_style.render(msg, True, color) dis.blit(mesg, (dis_width/3, dis_height/3)) def gameLoop(): # создание функции game_over = False game_close = False x1 = dis_width / 2 y1 = dis_height / 2 x1_change = 0 y1_change = 0 foodx = round(random.randrange(0, dis_width – snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, dis_width – snake_block) / 10.0) * 10.0 while not game_over: while game_close == True: dis.fill(white) message(“Вы проиграли! Нажмите Q-Quit или C-Play Again”, red) pygame.display.update() for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: game_over = True game_close = False if event.key == pygame.K_c: gameLoop() для события в pygame.event.get(): если event.type == pygame.QUIT: game_over = True если event.type == pygame.KEYDOWN: если event.key == pygame.K_LEFT: x1_change = -snake_block y1_change = 0 elif event.key == pygame.K_RIGHT: x1_change = snake_block y1_change = 0 elif event.key == pygame.K_UP: y1_change = -snake_block x1_change = 0 elif event.key == pygame.K_DOWN: y1_change = snake_block x1_change = 0 если x1 >= dis_width или x1 = dis_height или y1
Вот результат этого шага:
Шаг 7: Увеличьте длину змеи.
На этом этапе мы добавим код, который увеличит длину змеи после того, как она съест свою добычу. Кроме того, был добавлен еще один фрагмент кода, чтобы при столкновении змеи с ее телом появлялось сообщение о том, что игрок проиграл, нажмите Q, чтобы выйти, или нажмите C, чтобы начать играть снова. Длина змеи по сути содержится в лисете, а начальный размер — это блок, указанный в следующем коде:
импорт pygame импорт времени импорт случайного pygame.init() белый = (255, 255, 255) желтый = (255, 255, 102) черный = (0, 0, 0) красный = (213, 50, 80) зеленый = (0, 255, 0) синий = (50, 153, 213) dis_width = 600 dis_height = 400 dis = pygame.display.set_mode((dis_width, dis_height)) pygame.display.set_caption('Змейка от Edureka') часы = pygame.time.Clock() змейка_блок = 10 змейка_скорость = 15 font_style = pygame.font.SysFont(“bahnschrift”, 25) score_font = pygame.font.SysFont(“comicsansms”, 35) def our_snake(snake_block, snake_list): for x in snake_list: pygame.draw.rect(dis, black, (x(0), x(1), snake_block, snake_block)) def message(msg, color): mesg = font_style.render(msg, True, color) dis.blit(mesg, (dis_width / 6, dis_height / 3)) def gameLoop(): game_over = False game_close = False x1 = dis_width / 2 y1 = dis_height / 2 x1_change = 0 y1_change = 0 snake_List = () Length_of_snake = 1 foodx = round(random.randrange(0, dis_width – snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, dis_height – snake_block) / 10.0) * 10.0 while not game_over: while game_close == True: dis.fill(blue) message(“Вы проиграли! Нажмите C-Play Again или Q-Quit”, red) pygame.display.update() для события в pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: game_over = True game_close = False if event.key == pygame.K_c: gameLoop() для события в pygame.event.get(): if event.type == pygame.QUIT: game_over = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: x1_change = -snake_block y1_change = 0 elif event.key == pygame.K_RIGHT: x1_change = snake_block y1_change = 0 elif event.key == pygame.K_UP: y1_change = -snake_block x1_change = 0 elif event.key == pygame.K_DOWN: y1_change = snake_block x1_change = 0 если x1 >= dis_width или x1 = dis_height или y1 Длина_змеи: del snake_List(0) для x в snake_List(:-1): если x == snake_Head: game_close = True our_snake(snake_block, snake_List) pygame.display.update() если x1 == foodx и y1 == foody: foodx = round(random.randrange(0, dis_width – snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, dis_height – snake_block) / 10.0) * 10.0 Длина_змеи += 1 clock.tick(snake_speed) pygame.quit() quit() gameLoop()
Результат этого шага:
Как вы видите, чтобы сделать графику игры более привлекательной, на этом этапе фон экрана изменился на синий, добыча стала зеленой, а змея осталась черной, но размер был изменен. Настройте.
Шаг 8: Отобразите счет
И последнее, но не менее важное: вам нужно отобразить счет игрока на экране. Для этого вы создаете новую функцию с именем Your_score . Эта функция отобразит длину змеи за вычетом исходной длины 1.
Полный пример кода игры выглядит следующим образом:
импорт pygame импорт времени импорт случайного pygame.init() белый = (255, 255, 255) желтый = (255, 255, 102) черный = (0, 0, 0) красный = (213, 50, 80) зеленый = (0, 255, 0) синий = (50, 153, 213) dis_width = 600 dis_height = 400 dis = pygame.display.set_mode((dis_width, dis_height)) pygame.display.set_caption('Змейка от Edureka') часы = pygame.time.Clock() змейка_блок = 10 змейка_скорость = 15 font_style = pygame.font.SysFont(“bahnschrift”, 25) score_font = pygame.font.SysFont(“comicsansms”, 35) def Your_score(score): value = score_font.render(“Ваш счет: ” + str(score), True, yellow) dis.blit(value, (0, 0)) def our_snake(snake_block, snake_list): for x in snake_list: pygame.draw.rect(dis, black, (x(0), x(1), snake_block, snake_block)) def message(msg, color): mesg = font_style.render(msg, True, color) dis.blit(mesg, (dis_width / 6, dis_height / 3)) def gameLoop(): game_over = False game_close = False x1 = dis_width / 2 y1 = dis_height / 2 x1_change = 0 y1_change = 0 snake_List = () Длина_змеи = 1 едаx = раунд(random.randrange(0, dis_width – snake_block) / 10.0) * 10.0 едаy = раунд(random.randrange(0, dis_height – snake_block) / 10.0) * 10.0 пока игра не окончена: пока игра закрыта == True: dis.fill(blue) сообщение(“Вы проиграли! Нажмите C-Play Again или Q-Quit”, red) Your_score(Length_of_snake – 1) pygame.display.update() для события в pygame.event.get(): если event.type == pygame.KEYDOWN: если event.key == pygame.K_q: game_over = True game_close = False если event.key == pygame.K_c: gameLoop() для события в pygame.event.get(): если event.type == pygame.QUIT: game_over = True если event.type == pygame.KEYDOWN: если event.key == pygame.K_LEFT: x1_change = -snake_block y1_change = 0 elif event.key == pygame.K_RIGHT: x1_change = snake_block y1_change = 0 elif event.key == pygame.K_UP: y1_change = -snake_block x1_change = 0 elif event.key == pygame.K_DOWN: y1_change = snake_block x1_change = 0 если x1 >= dis_width или x1 = dis_height или y1 Длина_змеи: del snake_List(0) для x в snake_List(:-1): если x == snake_Head: game_close = True our_snake(snake_block, snake_List) Your_score(Длина_змеи – 1) pygame.display.update() если x1 == foodx и y1 == foody: foodx = round(random.randrange(0, dis_width – snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, dis_height – snake_block) / 10.0) * 10.0 Длина_змеи += 1 clock.tick(скорость_змеи) pygame.quit() quit() gameLoop()
Конечный результат при запуске программы:
Итак, мы только что показали вам, как закодировать игру “Snake of Prey” на Python вместе с примером кода. Надеюсь, эта статья принесет вам больше полезных знаний о языке программирования Python.
Чтобы узнать больше о Python, посетите страницу: Что такое Python? Почему стоит выбрать Python? А чтобы узнать больше о функциях Python, посетите страницу: Что такое функции в Python? Функции в Python.
Дэвид Пак
Обновление 09 августа 2024 г.