Рубрики
Без рубрики

научите своих детей создавать свою собственную игру с помощью Python – 2

серия учебных пособий, которые учат детей/начинающих разрабатывать знаменитую игру Space Invaders с Python.

Автор оригинала: Mustafa Anas.

Поскольку последняя часть этой серии получила много положительных откликов, я публикую эту вторую часть и обязательно опубликую последнюю часть до этих выходных, надеюсь, так что следите за обновлениями!

(хотите прыгнуть и увидеть окончательный результат этого урока? не стесняйтесь посетить оригинальное репо или перейти к концу этого)

Итак, без дальнейших объяснений, давайте начнем с того места, откуда мы ушли в прошлый раз. Последний фрагмент кода, который мы написали, позволил нам создать и переместить основного игрока (нам все еще нужно убедиться, что он срабатывает ). Код до сих пор выглядит следующим образом:

# 🐢🐢🐢
import turtle
pen = turtle.Turtle()

pen.pendown() #this line puts the pen on the paper
for side in range(3): #see number three? its what reminds Python,  THREE times!
  pen.forward(100)
  pen.right(90)
pen.forward(100)

player = turtle.Turtle()
player.penup()

def moveRight():
    x = player.xcor()
    x += 10
    player.setx(x)

def moveLeft():
    x = player.xcor()
    x -= 10
    player.setx(x)  

def moveForward():unicorn
    print('something')
    y = player.ycor()
    y += 10
    player.sety(y)

def moveBackward():
    y = player.ycor()
    y -= 10
    player.sety(y)

wn = turtle.Screen()
wn.listen()

wn.onkey(moveRight, 'd')
wn.onkey(moveLeft, 'a')
wn.onkey(moveForward, 'w')
wn.onkey(moveBackward, 's')

turtle.done() #this just keeps the window open until we close it.
turtle.close() #this just fixes issues related to closing the window

Размеры, размеры и очистка

проверено На данный момент, если вы запустите код, он нарисует небольшую рамку в середине экрана с маленькой стрелкой (игрок), которую вы можете перемещать. Итак, пара вещей, которые нужно сделать здесь:

  • [ ] нарисуйте большую коробку
  • [ ] спрячь черепаху, которая нарисовала эту коробку
  • [ ] сделайте игрока больше

итак, давайте начнем с того, что сделаем нашу коробку больше. Помнишь, как мы это нарисовали? все, что мы сделали, – это заставили двигаться в четырех направлениях. Отлично! итак, теперь мы знаем, что все, что нам нужно сделать, это расположить черепаху в нужном месте, прежде чем мы заставим ее двигаться (и, возможно, заставим ее идти немного дольше?). способ позиционирования любой черепахи, которую мы создаем с помощью Python, заключается в использовании этой функции .setposition(x, y) ( интуитивно понятный, верно? ). Чтобы понять, что на самом деле означают x и y, давайте сначала попробуем их реализовать, а затем посмотрим. Сразу после создания пера ( pen.Черепаха() ), и прежде чем положить перо ( pen.pendown () ), мы напишем следующее:pen.hideturtle()

border_pen.penup()
border_pen.setposition(-300,300)

Попробуйте запустить его, что произойдет? Да, маленькая коробочка переместилась в левый верхний угол! но почему именно там? Попробуйте изменить значения первого или второго числа в функции, запустите ее снова и посмотрите, что произойдет.

.setposition(x, y)pen.hideturtle() принимает два ar> guments. x – это расстояние вправо или влево (ноль-это центр), а y – это расстояние вверх или вниз (опять же, ноль-это центр).

Отлично, теперь мы начинаем с левого верхнего угла, и у нас есть цикл, который мы уже написали, который рисует коробку. Все, что нам нужно сделать, это сделать стороны этой коробки длиннее.

for side in range(3): 
  pen.forward(600)
  pen.right(90)
pen.forward(600)

Теперь запустите код и проверьте размер поля (конечно, не стесняйтесь изменять его так, как вам нравится. это ВАША игра )

нарисуйте большую коробку ✔

Вы все еще видите эту раздражающую стрелку в верхней левой части коробки? Давайте спрячем его, прежде чем забудем об этом. После того, как перо выполнило работу (под петлей), давайте добавим эту строку

pen.hideturtle()

Да, он исчез.

нарисуйте большую коробку ✔ спрячьте черепаху, которая нарисовала эту коробку ✔

Теперь мы доберемся до нас, игрок! В настоящее время мы-крошечная стрелка в середине огромной коробки, направляющейся на восток. нам нужно быть большим оружейным кораблем, направляющимся на север Давайте внесем некоторые изменения. Сначала перейдите к этому изображению здесь , загрузите его и сохраните рядом с файлом python.

Есть три шага для придания формы нашей черепахе:

  • Сохраните изображение
  • Заставьте черепаху зафиксировать картинку в своей памяти
  • скажите черепахе, чтобы он передал зарегистрированную картинку игроку

Поскольку вы только что сохранили изображение, первый шаг сделан. Теперь второй шаг. Черепаха должна знать все, с чем она имеет дело. Таким образом, у него есть команда для регистрации новых фигур (ТОЧНО ТАК же, КАК ВАША КАРТИНКА!), Чтобы перерисовать вашу картинку в форму, давайте добавим эту строку кода, прежде чем мы начнем рисовать коробку:

turtle.register_shape("ship.gif")

Уведомление , ship.gif – это имя файла, который вы только что сохранили. поэтому, если вы хотите загрузить свой собственный корабль из Интернета, убедитесь, что вы либо изменили его название, либо изменили код на его имя.

Последнее, что нужно сделать, это сказать черепахе эй, эта фигура для игрока .

ниже плеер.Черепаха() добавить:

player.shape('sh or change the code to its name.

Последнее, что нужно сделать, это сказать черепахе эй, эта фигура для игрока .

ниже плеер.Черепаха() добавить:

player.shape('ship.gif')

БЕГИ И ПОСМОТРИ, КАК ЗДОРОВО КАТАТЬСЯ НА КОСМИЧЕСКОМ КОРАБЛЕ

Теперь, когда мы находимся в поле, давайте начнем вызывать врагов. Давайте сначала подумаем об этом. Враг-это в основном новый объект черепахи на экране. Итак, скажем, мы хотим иметь 5 врагов, мы создаем 5 черепашьих объектов и даем им позицию (конечно, позже они будут делать больше, чем просто стоять там!). Поскольку мы уже знаем циклы, я введу списки, чтобы упростить процесс разработки.

Списки и добавление врагов

список-это в основном контейнер. Вы можете думать об этом как о пенале для ваших карандашей и ручек. шкаф для вашей одежды или контейнер для ваших черепах

Давайте используем цикл (например, тот, который мы использовали для создания поля арены), чтобы составить список, в котором есть 10 наших врагов (опять же, и враг-черепаха).

enemies = []
for i in range(10):
    enemies.append(turtle.Turtle())

Конечно же, изменение числа в диапазоне изменит количество наших врагов. Теперь у нас есть наши враги, которые хранятся, но не отображаются на экране. Давайте создадим еще один цикл, чтобы просмотреть всех врагов в списке и поместить их где-нибудь на экране. Подождите, где-нибудь на экране? это означает, что мы даже не знаем точно, где именно! Да, это верно. Мы попросим python выбрать случайное число из диапазона, который мы выберем. А помните систему X и Y? нам придется сказать Python, чтобы он дал каждой черепахе случайное y и случайное x значение. К счастью, у Python есть что-то готовое, что помогает нам выбирать случайные числа каждый раз, когда мы запускаем код. Это пакет, называемый random , и конкретная функция в этом пакете называется randint

позволяет импортировать пакет в новой строке после импорта turtle.

from random import randint

Теперь давайте воспользуемся этим. Ниже цикла, который создал врагов в списке, мы напишем этот цикл:

for enemy in enemies:
    x = randint(-300, 300)
    y = randint(0, 300)
    enemy.setposition(x, y)

то, что происходит здесь, в основном позволяет Python выбрать случайное число для x (число от -300 до 300) и случайное число для y (число от 0 до 300), а затем дает указание врагу перейти в эту случайную позицию. Причина, по которой x находится между -300 и 300, заключается в том, что он помещается в поле, которое мы создали, где мы хотим, чтобы вся игра происходила. Но почему y находится только между 0 и 300? ну,это потому, что мы не хотим, чтобы это было очень близко к тому месту, где мы находимся, так как идея состоит в том, чтобы заставить их бежать к нам, чтобы атаковать (да, мы тоже это сделаем ). Теперь, если вы запустите код, результат будет выглядеть следующим образом:

изображение игры

Оказалось, что Python сначала помещает врага в середину экрана, а затем отправляет его туда, куда вы ему скажете. Что приводит к этим строкам, как будто вы помните, мы ранее говорили, что черепахи похожи на ручки на бумаге. Чтобы двигаться, нам нужно отнять ручку от бумаги, прежде чем двигать ее. Так что давайте добавим и эту строку.

for enemy in enemies:
    x = randint(-300, 300)
    y = randint(0, 300)
    enemy.penup()
    enemy.setposition(x, y)

вау, это начинает выглядеть страшно Давайте сделаем это еще хуже, придав этим врагам правильную форму. Сначала перейдите здесь , загрузите изображение захватчиков и сохраните его рядом с другим файлом изображения/python. Затем давайте продолжим, зарегистрируем изображение и назначим его врагам.

turtle.register_shape("ship.gif")
turtle.register_shape("invador.gif")
for enemy in enemies:
    x = randint(-300, 300)
    y = randint(0, 300)
    enemy.penup()
    enemy.setposition(x, y)
    enemy.shape('invador.gif')

Хорошо выглядит? И последнее, поскольку мы уже имеем дело с картинками, давайте добавим фоновую картинку ко всей игре. Перейдите сюда и загрузите его.

turtle.register_shape("bg.gif")

затем давайте перейдем ниже к переменной экрана, которую мы создали в прошлый раз, и назначим ей фоновое изображение.

wn = turtle.Screen()
wn.bgpic("bg.gif")

Если что-то пошло не так, вот как выглядит окончательный код: ( вы также можете увидеть это репо для истории фиксации )

#  This file is for the follow up tutorial 🐢
import turtle

from random import randint

pen = turtle.Turtle()

turtle.register_shape("ship.gif")
turtle.register_shape("invador.gif")

pen.penup()
pen.setposition(-300,300)
pen.pendown() #this line puts the pen on the paper
for side in range(3): #see number three? its what reminds Python,  THREE times!
  pen.forward(600)
  pen.right(90)
pen.forward(600)
pen.hideturtle()

player = turtle.Turtle()
player.shape('ship.gif')
player.penup()

enemies = []
for i in range(10):
    enemies.append(turtle.Turtle())

for enemy in enemies:
    x = randint(-300, 300)
    y = randint(0, 300)
    enemy.penup()
    enemy.setposition(x, y)
    enemy.shape('invador.gif')

def moveRight():
    x = player.xcor()
    x += 10
    player.setx(x)



def moveLeft():
    x = player.xcor()
    x -= 10
    player.setx(x)  

def moveForward():
    print('something')
    y = player.ycor()
    y += 10
    player.sety(y)

def moveBackward():
    y = player.ycor()
    y -= 10
    player.sety(y)

wn = turtle.Screen()
wn.listen()

wn.onkey(moveRight, 'd')
wn.onkey(moveLeft, 'a')
wn.onkey(moveForward, 'w')
wn.onkey(moveBackward, 's')

wn.bgpic("bg.gif")

turtle.done() #this just keeps the window open until we close it.
turtle.close() #this just fixes issues related to closing the window

ЭТО ДЕЙСТВИТЕЛЬНО ВЫГЛЯДИТ ХОРОШО, Следующий урок, война начнется! 👽

Я нахожусь на пожизненной миссии, чтобы как можно больше поддерживать и вносить свой вклад в общие знания сообщества разработчиков. Некоторые из моих работ могут показаться слишком глупыми или слишком сложными, но никакое знание никогда не бывает бесполезным. Я призываю вас сделать то же самое и попытаться расплатиться с вашим сообществом по-своему. |/️ https://www.mustafaanas.com/