Циклы в программировании игр

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

 

Цикл, это когда повторяется какое-то действие несколько раз, пока не выполнится какое-то условие. Это когда вы много раз что-то делаете, а зачем что-то произошло и вы взяли и забили на это. Например: произошел большой апокаляпсис, смертельный вирус превратил половину людей в зомбарей, вы с криками ужаса пол дня от них бегали, а фиг еще делать то без оружия, да еще и учитывая что сделать его, руки не с того места. Ну да это лирика, и вдруг видите, о счастье, труп мента на обочине без головы, они по жанру всегда где-то да валяются, да смотрите чтоб труп мента был все же без головы, а то может ведь и перекусить вами, пока вы будете ему читать стихи, хотя не надо ему стихи читать, надо просто отобрать ксюху которая болтается у него на шее. Для самых маленьких, ксюха в данном случае не перекручивание имени Ксения либо Оксана, как у нас это временами делают, а АКС-74У, автомат Калашникова складной, укороченный. Кстати достаточно удобная штуковина, хоть как по мне АК-74 лучше, а РПК так вообще удобнейшая вещица, о чем это я??? Ага вам необходимо реквизировать его у трупа, который благо за вами не бегает, а недалеко находятся те которые не только бегают, но уже вас увидели и желают вас на завтрак или обед, или чего там у вас сейчас. Итак реквизировали вы все же с горем пополам автомат, а он того! Не пуляет, ну да, с пустым то магазином он стреляет так себе, даже как дубину в отличие от того же РПК использовать не дюже удобно. Ну да ладно, зомбари уже скоро до вас доберутся, а вы трясущимися руками пытаетесь присоединить полный магазин к автомату, полный магазин вы обнаружили кстати у трупа. Да куды ж вы его суете!!! Сначала отсоедините пустой магазин. АААА вас таки схватили, отгрызают куски от рук, один вцепился в горло, и перегрыз сонную артерию, кровища кругом, и вы отправляетесь жрать таких же кто не в состоянии взять автомат, проверить магазин, и ну, на перезарядку в принципе, при небольшой тренировке необходимо пару секунд, и все он готов к бою. Где-то в этой всей ерунде я совсем забыл о том о чем сегодня решил поговорить, так предположим что вы в курсе как пользоваться автоматом, хоть на уровне не путаете приклад и ствол. Таки смогли быстро перезарядить его, быстро вскидываете автомат, и начинаете стрелять короткими очередями. По пару выстрелов. Почему короткими? Если стреляли с подобного, то должны быть в курсе что стрельба очередями это в основном просто трата боеприпасов, что конечно может напугать живого, а вот зомби абсолютно будет на это плевать и вас все равно сожрут. Более менее прицельно и быстро стрелять как раз удобно короткими очередями, хотя одиночными лучше, и вообще стоит забыть про то что там есть автоматический огонь, без особой на то причины, а вам еще и необходимо стрелять в голову, так как в иные места успех будет не большой, да конечно повреждение конечностей тоже хорошо, но не остановит, по крайней мере без большого количества патронов. Итак я таки добрался к циклу, у вас есть автомат, в нем 30ть патронов, вы стреляете короткими очередями по паре патронов, 30 пара выстрелов, 28 пара выстрелов, 26 пара выстрелов затем как вы доходите до нуля, у вас оканчиваются патроны, и вы производите перезарядку. Вот у нас снова 30ть патронов, это и есть наш цикл, который будет так повторятся пока вы имеете боеприпасы, или пока не смоетесь с опасного места.

 

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

 

Итак, оператором цикла является слово forдалее открываем скобку, и объявляем переменную и задаем ей начальное значение, затем вы должны написать некоторое условие, при котором это все должно выполнятся, затем задать изменение переменной, и задать действие которое происходит. В виде кода это выглядит примерно так:

 

for (переменная; условие(bool);изменение переменной){

какое-то действие

}

 

Например:

 

for (Количество патронов=30; пока есть патроны; минус 2 патрона){

короткая очередь

}

 

Все наш цикл закончился.

Давайте сделаем практический пример. Открываем Unity3d и делаем пример который я описал выше, должно получится как-то так.

Код цикла короткой очереди автомата
Dante

 

Так как видим мы обозначили цикл forдалее объявляем переменную, я взял byte, патронов 30ть так что не вижу причины тут брать переменную больше, затем задаем значение переменной, я назвал её cntи значение 30ть. Потом, условие, пока переменная больше единицы, и непосредственно изменение переменной. То есть каждый цикл количество патронов меньше на два. И ниже действие, тут Debug.Log каждый цикл выводим количество патронов. Сохраняем запускаем игру в Unity, не забыв прикрепить скрипт к камере, и смотрим что получается, а получается выводится каждый цикл минус два патрона.

Вывод короткой очереди в Unity
Dante

 

Что не надо делать в цикле, не надо в нем больше трогать эту переменную, ну к примеру в середине цикла добавлять какое-либо еще действие, ну там к примеру:

Неправильный цикл
Dante

 

Это бред, произойдет рекурсия, и все глюкнет, ну или не глюкнет, но все равно будет бред.

 

Что вы можете сделать это задать какое-то условие, ну к примеру что-то не так, и так вышло что получилось больше 30 патронов, вы можете задать прекратить цикл, будет как-то так.

Прекращение цикла
Dante

 

Как видите я задал если будет больше 30ти патронов, то цикл, breakломается. Если программа встретит слово breakто она просто прекращает цикл. Но лучше не делать подобного, все равно.

 

Итак давайте рассмотрим иной вариант:

Добавляем по два до десяти
Dante

 

Что делает эта программа? Сначала объявляем переменную cnt‘, затем сказали что пока она меньше 11ти это будет происходить, каждый раз мы будем прибавлять по два, к нашей переменной, и мы будем каждый раз прибавлять переменную cntк нашей переменной s‘, переменная s это сумма, то есть мы попробуем посчитать, чему равна сумма от единицы до десятки включительно, так как у нас меньше 11ти. То есть сначала к s+2, затем уже к полученной 2+4, затем 2+4, затем 6+6, затем 12+8, и 20+10. Да как видите я не поставил фигурные скобки, так как здесь одно действие и покажет оно только конечный результат, если поставить их то будет выводить каждый цикл. Если хотите попробовать то просто поставьте фигурные скобки открывающую перед s += cnt;и закрывающую после Debug.Log (s);‘. Мне промежуточные действия не интересны, так что sне вывожу, вывожу только результат. В сумме должно получится 30ть. Давайте это проверим, сохраняем нашу программу, и запускаем её в Unity.

 

И видим, Unity3d выдало результат 30ть. Что и ожидалось.

 

На этом пожалуй пока все. До следующей статьи.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *