Библиотеката Arcade на Python предлага ясен и ефективен начин за внедряване на нива на игра във вашите проекти.

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

Нивата осигуряват структура, напредък и предизвикателства, давайки на играчите усещане за постижение и ангажираност, докато навигират през различни етапи на играта.

Създайте проста игра

Преди да започнете, уверете се, че имате pip, инсталиран на вашето устройство. Използвайте тази команда, за да инсталирате аркада библиотека:

pip инсталирайте аркада

Създайте основна игра, в която играчът може да се движи наляво и надясно.

Кодът, използван в тази статия, е достъпен в това GitHub хранилище и е безплатен за използване под лиценза на MIT.

Използвайте възможностите на библиотеката Arcade, за да обработвате въвеждането на потребителя и да актуализирате съответно състоянието на играта. Създайте нов файл с име

instagram viewer
проста-игра.py и добавете кода по-долу:

импортиране аркада

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

класMyGame(аркадна. прозорец):
деф__в него__(себе си):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Моята игра")
arcade.set_background_color (arcade.color. БЯЛО)
self.player_x = SCREEN_WIDTH // 2

дефon_draw(себе си):
arcade.start_render()
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. СИН)

дефon_key_press(самостоятелно, ключ, модификатори):
ако ключ == arcade.key. НАЛЯВО:
self.player_x -= 10
елиф ключ == arcade.key. ДЯСНО:
self.player_x += 10

дефon_key_release(самостоятелно, ключ, модификатори):
ако ключ == arcade.key. НАЛЯВО или ключ == arcade.key. ДЯСНО:
пас

дефосновен():
игра = MyGame()
arcade.run()

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

По-долу е резултатът:

Създайте няколко нива

Сега разширете играта, като добавите няколко нива. Всяко ниво ще има свои собствени уникални характеристики, предоставящи различни предизвикателства за играча. Можете да промените предишния код, за да включите допълнителни нива. Ето един пример:

класПърво ниво:
деф__в него__(себе си):
self.player_x = SCREEN_WIDTH // 2

дефактуализация(себе си):
пас

дефрисувам(себе си):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. СИН)

класВторо ниво:
деф__в него__(себе си):
self.player_x = SCREEN_WIDTH // 2

дефактуализация(себе си):
пас

дефрисувам(себе си):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. ЧЕРВЕН)

класMyGame(аркадна. прозорец):
деф__в него__(себе си):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Моята игра")
arcade.set_background_color (arcade.color. БЯЛО)
self.levels = [LevelOne(), LevelTwo()]
self.current_level = 0

дефon_draw(себе си):
arcade.start_render()
self.levels[self.current_level].draw()

дефon_key_press(самостоятелно, ключ, модификатори):
ако ключ == arcade.key. НАЛЯВО:
self.levels[self.current_level].player_x -= 10
елиф ключ == arcade.key. ДЯСНО:
self.levels[self.current_level].player_x += 10

дефon_key_release(самостоятелно, ключ, модификатори):
ако ключ == arcade.key. НАЛЯВО или ключ == arcade.key. ДЯСНО:
пас

дефактуализация(самостоятелно, делта_време):
self.levels[self.current_level].update()

дефосновен():
игра = MyGame()
arcade.run()

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

Преход между нива

За да създадете плавен преход между нивата, открийте кога играчът пресича определена граница. Можеш проследяване на движението на играча, и след като играчът премине границата, можете да преминете към следващото ниво. Създайте нов файл с име преход-между нивата.py и добавете кода със следните актуализации:

класMyGame(аркадна. прозорец):
# ...

дефактуализация(самостоятелно, делта_време):
self.levels[self.current_level].update()

# Проверете дали играчът е преминал границата
ако self.levels[self.current_level].player_x < 0:
себе си.текущо_ниво += 1
self.current_level %= len (self.levels)
self.levels[self.current_level].player_x = SCREEN_WIDTH
елиф self.levels[self.current_level].player_x > SCREEN_WIDTH:
себе си.текущо_ниво += 1
self.current_level %= len (self.levels)
self.levels[self.current_level].player_x = 0

# ...

По-долу е резултатът:

Включително допълнителни функции

За да направите нивата на играта си по-ангажиращи, можете да включите допълнителни функции като бонуси и цели.

Цели

Целите предоставят конкретни цели или цели, които играчът да постигне в рамките на ниво. Те добавят чувство за цел и прогрес. Ето пример за прилагане на обективна функция:

класОбективен:
деф__в него__(себе си, x, y):
себе си.x = x
self.y = y
себе си.радиус = 20

дефрисувам(себе си):
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ЗЕЛЕНО)

класПърво ниво:
деф__в него__(себе си):
self.objective = Цел(600, 400)
# ...

дефактуализация(себе си):
# Проверете дали играчът достига целта
ако arcade.check_for_collision (self.player, self.objective):
self.complete_objective()

дефрисувам(себе си):
self.objective.draw()
# ...

дефпълна_обективна(себе си):
# Код за обработка на изпълнението на целта
пас

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

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

класКолекционерски:
деф__в него__(себе си, x, y):
себе си.x = x
self.y = y
себе си.радиус = 10
self.is_collected = Невярно

дефрисувам(себе си):
аконе self.is_collected:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ОРАНЖЕВО)

дефсъбирам(себе си):
self.is_collected = Вярно
# Код за управление на ефекта на колекционерската вещ върху играча

класПърво ниво:
деф__в него__(себе си):
self.collectible = Колекционерски(300, 300)
# ...

дефактуализация(себе си):
# Проверете дали играчът събира предмета
ако arcade.check_for_collision (self.player, self.collectible):
self.collectible.collect()

дефрисувам(себе си):
self.collectible.draw()
# ...

Препятствия

Препятствията могат да бъдат статични обекти или движещи се обекти, които пречат на пътя на играча. Те изискват от играча да изготви стратегия и да намери начини да ги преодолее. Ето пример за внедряване на функцията за препятствия:

класПрепятствие:
деф__в него__(сам, x, y, ширина, височина):
себе си.x = x
self.y = y
self.width = ширина
self.height = височина

дефрисувам(себе си):
arcade.draw_rectangle_filled (self.x, self.y, self.width, self.height, arcade.color. СИВО)

класПърво ниво:
деф__в него__(себе си):
self.obstacles = [Препятствие(400, 200, 100, 50), Препятствие (600, 500, 80, 120)]
# ...

Усилвания

Усилванията могат да подобрят способностите на играча или да осигурят временни предимства. Ето пример за внедряване на функция за включване:

класPowerUp:
деф__в него__(себе си, x, y):
себе си.x = x
self.y = y
себе си.радиус = 10
self.is_active = Вярно

дефрисувам(себе си):
ако self.is_active:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ЖЪЛТ)

дефактивиране_захранване(себе си):
self.is_active = Вярно

дефдеактивиране_захранване(себе си):
self.is_active = Невярно

класПърво ниво:
деф__в него__(себе си):
self.power_up = PowerUp(200, 200)
# ...

дефактуализация(себе си):
# Проверете дали играчът се сблъсква с включване
ако arcade.check_for_collision (self.player, self.power_up):
self.player.activate_power_up()
self.power_up.deactivate_power_up()

дефрисувам(себе си):
self.power_up.draw()
# ...

Най-добри практики за дизайн на ниво

Дизайнът на ниво играе решаваща роля в създаването на увлекателни и приятни изживявания при игра. Ето някои най-добри практики, които да имате предвид, когато проектирате нива за вашата игра:

Ясни цели

Всяко ниво трябва да има ясна цел или цел, която играчът да постигне. Независимо дали става въпрос за достигане на конкретно място, побеждаване на врагове или решаване на пъзели, целта трябва да бъде добре дефинирана и съобщена на играча.

Постепенна крива на трудност

Проектирайте нива с постепенно увеличаване на трудността, за да осигурите плавна крива на обучение за играчите. Започнете с по-прости предизвикателства и постепенно въвеждайте нови механики или препятствия, докато играчът напредва. Внезапните пикове в трудността могат да разочароват играчите, така че е важно да поддържате балансирана прогресия.

Визуална яснота

Уверете се, че дизайнът на ниво и визуалните елементи ясно предават важна информация на играча. Включване на музика и звукови ефекти може също така да предава важни улики и да предоставя съществена информация на играча.

Тестване на игра и итерация

Редовното тестване на игра е от съществено значение за усъвършенстване и подобряване на дизайна на нивата. Събирайте обратна връзка от играчите и наблюдавайте техния опит, за да идентифицирате области, които може да изискват корекции. Повторете своя дизайн на ниво въз основа на тази обратна връзка, за да създадете по-приятна и балансирана игра.

Баланс награда и предизвикателство

Награждавайте играчите за преодоляване на предизвикателствата във вашите нива. Това може да се постигне чрез усилвания, колекционерски предмети, отключване на нови области или прогресия на разказа. Балансирането на трудността на предизвикателствата със значими награди помага за мотивирането на играчите и осигурява чувство за постижение.

Направете игрите по-ангажиращи с нива

Чрез внедряване на нива на игра можете да подобрите цялостното изживяване на играча и да създадете по-ангажираща среда за игра. Нивата осигуряват напредък, предизвикателство и разнообразие, поддържайки играчите инвестирани и мотивирани. Те ви позволяват да въвеждате нови механики, препятствия, врагове и награди, като гарантират, че всяко ниво се чувства различно и вълнуващо.