Питхон-ова библиотека Арцаде нуди једноставан и ефикасан начин за имплементацију нивоа игре у ваше пројекте.

Развој игара је узбудљив и креативан процес који вам омогућава да оживите своје маштовите идеје. Приликом дизајнирања игре, један од кључних елемената који могу значајно побољшати искуство играча је имплементација нивоа игре.

Нивои пружају структуру, напредак и изазове, дајући играчима осећај постигнућа и ангажовања док се крећу кроз различите фазе игре.

Направите једноставну игру

Пре него што почнете, уверите се да имате пип инсталиран на вашем уређају. Користите ову команду да бисте инсталирали арцаде библиотека:

пип инсталл арцаде

Направите основну игру у којој играч може да се креће лево и десно.

Код који се користи у овом чланку доступан је у овом ГитХуб спремиште и бесплатан је за коришћење под МИТ лиценцом.

Искористите могућности Аркадне библиотеке за руковање корисничким уносом и ажурирање стања игре у складу са тим. Креирајте нову датотеку под називом симпле-гаме.пи и додајте код испод:

увоз арцаде

СЦРЕЕН_ВИДТХ = 800
СЦРЕЕН_ХЕИГХТ = 600

класаМиГаме(аркада. прозор):
деф__у томе__(сам):
супер().__инит__(СЦРЕЕН_ВИДТХ, СЦРЕЕН_ХЕИГХТ, "Моја игра")
арцаде.сет_бацкгроунд_цолор (арцаде.цолор. БЕО)
селф.плаиер_к = СЦРЕЕН_ВИДТХ // 2

дефон_драв(сам):
арцаде.старт_рендер()
арцаде.драв_рецтангле_филлед (селф.плаиер_к, 50, 50, 50, арцаде.цолор. ПЛАВИ)

дефон_кеи_пресс(селф, кључ, модификатори):
ако кључ == арцаде.кеи. ЛИЈЕВО:
селф.плаиер_к -= 10
елиф кључ == арцаде.кеи. ЈЕЛ ТАКО:
селф.плаиер_к += 10

дефон_кеи_релеасе(селф, кључ, модификатори):
ако кључ == арцаде.кеи. ЛЕВО или кључ == арцаде.кеи. ЈЕЛ ТАКО:
проћи

дефглавни():
игра = МиГаме()
арцаде.рун()

ако __наме__ == "__главни__":
главни()

Испод је излаз:

Направите више нивоа

Сада проширите игру додавањем више нивоа. Сваки ниво ће имати своје јединствене карактеристике, пружајући различите изазове за играча. Можете да измените претходни код да бисте укључили додатне нивое. Ево примера:

класаЛевелОне:
деф__у томе__(сам):
селф.плаиер_к = СЦРЕЕН_ВИДТХ // 2

дефажурирање(сам):
проћи

дефцртати(сам):
арцаде.драв_рецтангле_филлед (селф.плаиер_к, 50, 50, 50, арцаде.цолор. ПЛАВИ)

класаЛевелТво:
деф__у томе__(сам):
селф.плаиер_к = СЦРЕЕН_ВИДТХ // 2

дефажурирање(сам):
проћи

дефцртати(сам):
арцаде.драв_рецтангле_филлед (селф.плаиер_к, 50, 50, 50, арцаде.цолор. ЦРВЕНА)

класаМиГаме(аркада. прозор):
деф__у томе__(сам):
супер().__инит__(СЦРЕЕН_ВИДТХ, СЦРЕЕН_ХЕИГХТ, "Моја игра")
арцаде.сет_бацкгроунд_цолор (арцаде.цолор. БЕО)
селф.левелс = [ЛевелОне(), ЛевелТво()]
селф.цуррент_левел = 0

дефон_драв(сам):
арцаде.старт_рендер()
селф.левелс[селф.цуррент_левел].драв()

дефон_кеи_пресс(селф, кључ, модификатори):
ако кључ == арцаде.кеи. ЛИЈЕВО:
селф.левелс[селф.цуррент_левел].плаиер_к -= 10
елиф кључ == арцаде.кеи. ЈЕЛ ТАКО:
селф.левелс[селф.цуррент_левел].плаиер_к += 10

дефон_кеи_релеасе(селф, кључ, модификатори):
ако кључ == арцаде.кеи. ЛЕВО или кључ == арцаде.кеи. ЈЕЛ ТАКО:
проћи

дефажурирање(селф, делта_тиме):
селф.левелс[селф.цуррент_левел].упдате()

дефглавни():
игра = МиГаме()
арцаде.рун()

ако __наме__ == "__главни__":
главни()

Прелаз између нивоа

Да бисте направили глатку транзицију између нивоа, откријте када играч пређе одређену границу. Можете пратите кретање играча, а када играч пређе границу, можете се пребацити на следећи ниво. Креирајте нову датотеку под називом транзиција-између-нивоа.пи и додајте код са ажурирањима у наставку:

класаМиГаме(аркада. прозор):
# ...

дефажурирање(селф, делта_тиме):
селф.левелс[селф.цуррент_левел].упдате()

# Проверите да ли је играч прешао границу
ако селф.левелс[селф.цуррент_левел].плаиер_к < 0:
селф.цуррент_левел += 1
селф.цуррент_левел %= лен (селф.левел)
селф.левелс[селф.цуррент_левел].плаиер_к = СЦРЕЕН_ВИДТХ
елиф селф.левелс[селф.цуррент_левел].плаиер_к > СЦРЕЕН_ВИДТХ:
селф.цуррент_левел += 1
селф.цуррент_левел %= лен (селф.левел)
селф.левелс[селф.цуррент_левел].плаиер_к = 0

# ...

Испод је излаз:

Укључујући додатне функције

Да бисте нивое игре учинили занимљивијим, можете да уградите додатне функције као што су појачања и циљеви.

Циљеви

Циљеви дају специфичне циљеве које играч треба да постигне у оквиру нивоа. Они додају осећај сврхе и напретка. Ево примера имплементације објективне карактеристике:

класаобјективан:
деф__у томе__(сам, к, и):
селф.к = к
селф.и = и
селф.радиус = 20

дефцртати(сам):
арцаде.драв_цирцле_филлед (селф.к, селф.и, селф.радиус, арцаде.цолор. ЗЕЛЕН)

класаЛевелОне:
деф__у томе__(сам):
селф.објецтиве = Објецтиве(600, 400)
# ...

дефажурирање(сам):
# Проверите да ли играч постиже циљ
ако арцаде.цхецк_фор_цоллисион (селф.плаиер, селф.објецтиве):
селф.цомплете_објецтиве()

дефцртати(сам):
селф.објецтиве.драв()
# ...

дефпотпун_објектив(сам):
# Код за руковање објективним довршењем
проћи

Колекционарски предмети

Колекционарски предмети су предмети или бонуси које играч може прикупити на свим нивоима. Ево примера имплементације колекционарске функције:

класаКолекционарски:
деф__у томе__(сам, к, и):
селф.к = к
селф.и = и
селф.радиус = 10
селф.ис_цоллецтед = Фалсе

дефцртати(сам):
аконе селф.ис_цоллецтед:
арцаде.драв_цирцле_филлед (селф.к, селф.и, селф.радиус, арцаде.цолор. НАРАНЂА)

дефсакупљати(сам):
селф.ис_цоллецтед = Истина
# Код за управљање ефектом колекционарства на играча

класаЛевелОне:
деф__у томе__(сам):
селф.цоллецтион = Цоллецтибле(300, 300)
# ...

дефажурирање(сам):
# Проверите да ли играч узима предмет
ако арцаде.цхецк_фор_цоллисион (селф.плаиер, селф.цоллецтибле):
селф.цоллецтибле.цоллецт()

дефцртати(сам):
селф.цоллецтибле.драв()
# ...

Препреке

Препреке могу бити статични објекти или покретни ентитети који ометају пут играча. Они захтевају од играча да направи стратегију и пронађе начине да их превазиђе. Ево примера имплементације функције препрека:

класаПрепрека:
деф__у томе__(сам, к, и, ширина, висина):
селф.к = к
селф.и = и
селф.видтх = ширина
само.висина = висина

дефцртати(сам):
арцаде.драв_рецтангле_филлед (селф.к, селф.и, селф.видтх, селф.хеигхт, арцаде.цолор. СИВА)

класаЛевелОне:
деф__у томе__(сам):
селф.обстацлес = [Обстацле(400, 200, 100, 50), Препрека(600, 500, 80, 120)]
# ...

Повер-Упс

Појачања могу побољшати играчеве способности или пружити привремене предности. Ево примера имплементације функције за појачавање:

класаПојачај поспеши:
деф__у томе__(сам, к, и):
селф.к = к
селф.и = и
селф.радиус = 10
селф.ис_ацтиве = Истина

дефцртати(сам):
ако селф.ис_ацтиве:
арцаде.драв_цирцле_филлед (селф.к, селф.и, селф.радиус, арцаде.цолор. ЖУТА)

дефацтивате_повер_уп(сам):
селф.ис_ацтиве = Истина

дефдеацтивате_повер_уп(сам):
селф.ис_ацтиве = Фалсе

класаЛевелОне:
деф__у томе__(сам):
селф.повер_уп = ПоверУп(200, 200)
# ...

дефажурирање(сам):
# Проверите да ли се играч судара са укључењем
ако арцаде.цхецк_фор_цоллисион (селф.плаиер, селф.повер_уп):
селф.плаиер.ацтивате_повер_уп()
селф.повер_уп.деацтивате_повер_уп()

дефцртати(сам):
селф.повер_уп.драв()
# ...

Најбоље праксе за дизајн нивоа

Дизајн нивоа игра кључну улогу у стварању занимљивог и пријатног искуства играња. Ево неколико најбољих пракси које треба узети у обзир приликом дизајнирања нивоа за своју игру:

Цлеар Гоалс

Сваки ниво треба да има јасан циљ или циљ који играч треба да постигне. Било да се ради о достизању одређене локације, побеђивању непријатеља или решавању загонетки, циљ треба да буде добро дефинисан и саопштен играчу.

Крива постепене тежине

Дизајнирајте нивое са постепеним повећањем тежине како бисте обезбедили глатку криву учења за играче. Почните са једноставнијим изазовима и постепено уводите нове механике или препреке како играч напредује. Изненадни скокови тежине могу фрустрирати играче, па је важно одржавати уравнотежен напредак.

Висуал Цларити

Уверите се да дизајн нивоа и визуелни елементи јасно преносе важне информације играчу. Укључујући музику и звучне ефекте такође може да пренесе кључне трагове и пружи битне информације играчу.

Плаитестинг и итерација

Редовно тестирање играња је неопходно за усавршавање и побољшање дизајна нивоа. Прикупите повратне информације од играча и посматрајте њихова искуства да бисте идентификовали области које могу захтевати прилагођавања. Итерирајте свој дизајн нивоа на основу ових повратних информација да бисте створили пријатнији и уравнотеженији играње.

Балансна награда и изазов

Наградите играче за превазилажење изазова на вашим нивоима. Ово се може постићи кроз појачања, колекционарство, откључавање нових области или наративни напредак. Балансирање тежине изазова са значајним наградама помаже мотивацији играча и пружа осећај достигнућа.

Учините игре занимљивијим са нивоима

Применом нивоа игре, можете побољшати целокупно искуство играча и створити привлачније окружење за играње. Нивои обезбеђују напредак, изазове и разноврсност, држећи играче уложеним и мотивисаним. Омогућавају вам да уведете нове механике, препреке, непријатеље и награде, осигуравајући да сваки ниво буде посебан и узбудљив.