Найти тему

Что такое язык программирования и сложно ли с нуля научиться писать игры на нем?

Оглавление

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

Так что же такое язык программирования (ЯП) ?

В своей прошлой статье я рассказал как же устроены игры "под капотом", так что советую вам изначально прочитать ее, чтобы было понятнее дальше о чем я говорю.

Как устроены игры изнутри

Так вот, помните я говорил, что игра - это просто целый перечень инструкций для каждого объекта в игре? Но так как компьютер не понимает наш язык, то с ним нужно "общаться" на его языке, на языке программирования. Язык программирования - это как раз то, чем мы будем описывать данные инструкции. Есть большое множество ЯП, но все они не сильно отличаются друг от друга. Достаточно выучить один, и остальные будет гораздо проще понимать.

Если вы посмотрите пример перечня таких инструкция из моей прошлой статьи, то заметите, что большинство команд начинается со слова "Если". Это условие, и большая часть игры состоит как раз из условий.

В большинстве ЯП условие выглядит как:

if <что проверить> then <что сделать если условие соблюдается> else <что сделать если условие не соблюдается>

Т.е. if - как раз то, как описывается условие в ЯП.

Давайте посмотрим на небольшом примере.

Пример использования условий в игре

Скриншот из моей игры
Скриншот из моей игры

Например, у нас в игре есть ящик. Как я уже говорил, если его просто воткнуть в наш уровень и ничего не писать для него, то он просто будет "висеть" в воздухе неподвижно.

Давайте попробуем самым простым способом, с помощью условий на языке программирования сделать так, чтобы ящик падал.

if place_meeting(x,y+1,Wall)
then
{stand=true}
else
{y=y+1
stand=false}

Вот как раз список инструкций для ящика, чтобы он падал, описанные на ЯП. Т.е. компьютер будет перечитывать этот список снова и снова, тысячи раз. Так давайте разберемся построчно, что же за инструкции мы ему дали.

  • if - это условие, как я уже говорил, оно так и переводится "если".

Далее за ним идет само условие, то есть то, что игра должна проверить. Тут может быть все, что угодно. Мы сами придумываем и строим логику игры. Так что же тут у нас?

  • place_meeting(x,y+1,Wall) - это инструкция проверяет, столкнется ли наш ящик с объектом Wall (стена), если его передвинуть на 1 пиксель вниз (y+1).

Стену я пометил красным прямоугольником на картинке выше.

Т.е. игра читает эту инструкцию так:

Если ящик, сместить ниже по оси координат Y на 1 пиксель вниз и он столкнется с объектом земли...
  • Далее идет then. Оно так и переводится "то". Т.е. если ящик все таки сталкиваеся с объектом земли, то нужно выполнить что-то.

И мы выполняем следующую команду:

  • {stand=true} . Т.е. тут мы просто ничего не делаем в этом случае. А присвиваем переменной stand значение true. Т.е. как бы ставим статус, что ящик стоит.
  • Далее идет else. Оно переводится как "иначе". Т.е. если условие не выполняется, то даем ящику команду делать то, что следует далее после else. Т.е. в нашем случае, если под ящиком на один пиксель ниже земли нет, то будем выполнять следующее:
  • {y=y+1 stand=false}. Давайте разбираться. y=y+1 - означает, что мы увеличиваем кооринату ящика по оси Y на один пиксель, т.е. грубо говоря мы сдвигаем ящик вниз на один пиксель. А stand=false - это просто мы ставим статус ящику, что он у нас не стоит, т.е. фактически находится в полете.

Вот и все! Вот такой небольшой командой мы прописали инструкцию, которая описывает падения ящика в мире нашей игры. Давайте повторим, как она звучит на понятном нам языке полностью:

Если ящик, сместить ниже по оси координат Y на 1 пиксель вниз и он столкнется с объектом земли, то ставим ему статус, что он стоит. Иначе сдвигаем ящик вниз на один пиксель и ставим ему статус, что он не стоит, т.е. в полете.

А так как, если вы помните, я говорил, что программа читается циклически, т.е. доходя до последней строчки она снова перескакивает на первую и так по кругу, то ящик будет сдвигаться по одному пикселю вниз до тех пор, пока под ним не окажется земля, тогда он просто остановится.

Зачем я ввожу этот статус: стоит ящик или нет? Можно этого конечно и не делать, но я ввел его не просто так. В будущем нам может пригодится данный статус ящика для других условий. Например, мы захотим сделать так, чтобы наш герой смог двигать только те ящики, что стоят на земле, а не находятся в воздухе, в полете. Вот тут нам и пригодится этот статус. Мы просто проверим:

if stand=true, т.е. если ящик стоит, то выполняем то-то.

Как видите, все не так уж и сложно. Нужно просто выучить ЯП, узнать какие команды и инструкции в нем есть. И уже основываясь на них, выстроить всю логику для объекта.

Спасибо, что дочитали статью до конца! Надеюсь вым было интересно! Делитесь данной статьей, ставьте лайки, комментируйте, задавайте вопросы. Так я смогу понять, что вам интересны данные статьи. И что вы правда хотите понять с нуля как работают игры и возможно ли научиться делать их самому.