Подправете своите аркадни игри, като въведете врагове.

Враговете играят решаваща роля в създаването на увлекателни и предизвикателни игри. Те предоставят препятствия и противници за играчите, което прави игровото изживяване по-вълнуващо. Аркадната библиотека на Python предлага лесен начин за включване на врагове във вашите игри.

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

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

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

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

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

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

# Размери на прозореца
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Атрибути на играча
PLAYER_RADIUS = 25
PLAYER_SPEED = 5

класGameWindow(аркадна. прозорец):
деф__в него__(аз, ширина, височина):
super().__init__(ширина, височина)
arcade.set_background_color (arcade.color. БЯЛО)
self.player_x = ширина // 2

instagram viewer

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

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

дефактуализация(самостоятелно, делта_време):
пас

дефосновен():
прозорец = GameWindow (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

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

Създаване на обикновен враг

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

# Добавяне към клас GameWindow

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

деф__в него__(аз, ширина, височина):
# ...

# Атрибути на врага
self.enemy_x = ширина // 2
self.enemy_y = височина - PLAYER_RADIUS
self.nemy_radius = 20

дефon_draw(себе си):
# ...
arcade.draw_circle_filled (self.enemy_x, self.enemy_y, self.enemy_radius, arcade.color. ЧЕРВЕН)

дефактуализация(самостоятелно, делта_време):
ако self.is_collision (self.player_x, self.player_y, self.enemy_x, self.enemy_y, PLAYER_RADIUS, self.enemy_radius):
печат ("Играта приключи!")

дефе_сблъсък(самостоятелно, x1, y1, x2, y2, радиус1, радиус2):
разстояние_на квадрат = (x1 - x2) ** 2 + (y1 - y2) ** 2
сума_радиус_на_квадрат = (радиус1 + радиус2) ** 2
връщане разстояние_на квадрат <= сума_радиус_на квадрат

Накарайте врага да следва играча

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

# Добавяне към клас GameWindow

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

дефактуализация(самостоятелно, делта_време):
ако self.player_x < self.enemy_x:
self.enemy_x -= PLAYER_SPEED
елиф self.player_x > self.enemy_x:
self.enemy_x += PLAYER_SPEED

ако self.is_collision (self.player_x, self.player_y,
self.enemy_x, self.enemy_y,
PLAYER_RADIUS, ENEMY_RADIUS):
печат ("Играта приключи!")

дефе_сблъсък(самостоятелно, x1, y1, x2, y2, радиус1, радиус2):
разстояние_на квадрат = (x1 - x2) ** 2 + (y1 - y2) ** 2
сума_радиус_на_квадрат = (радиус1 + радиус2) ** 2
връщане разстояние_на квадрат <= сума_радиус_на квадрат

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

Добавяне на вражески куршуми

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

# Добавяне към клас GameWindow

класКуршум:
деф__в него__(самостоятелно, x, y, радиус, скорост):
себе си.x = x
self.y = y
self.radius = радиус
self.speed = скорост

дефактуализация(себе си):
self.y -= self.speed

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

деф__в него__(аз, ширина, височина):
# ...

# Атрибути на врага
self.bullets = []
self.bullet_radius = 5
self.bullet_speed = 3
self.bullet_cooldown = 60# Брой кадри между поява на куршуми
self.bullet_timer = 0

дефon_draw(себе си):
# ...
за куршум в self.bullets:
arcade.draw_circle_filled (bullet.x, bullet.y,
self.bullet_radius, arcade.color. ЧЕРЕН)

дефактуализация(самостоятелно, делта_време):
# ...

self.bullet_timer += 1
ако self.bullet_timer >= self.bullet_cooldown:
self.bullets.append (Куршум (self.enemy_x, self.enemy_y - self.enemy_radius,
self.bullet_radius, self.bullet_speed))
self.bullet_timer = 0

за куршум в self.bullets:
bullet.update()
ако self.is_collision (self.player_x, self.player_y, self.enemy_x,
self.enemy_y, PLAYER_RADIUS, ENEMY_RADIUS):
печат ("Играта приключи!")

дефе_сблъсък(самостоятелно, x1, y1, x2, y2, радиус1, радиус2):
разстояние_на квадрат = (x1 - x2) ** 2 + (y1 - y2) ** 2
сума_радиус_на_квадрат = (радиус1 + радиус2) ** 2
връщане разстояние_на квадрат <= сума_радиус_на квадрат

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

Добавяне на точки за здраве за врагове

В много игри враговете могат да притежават точки здраве (HP), което им позволява да издържат множество удари, преди да бъдат победени. Добавянето на здравни точки към враговете може да въведе стратегически елементи на играта и да осигури усещане за напредък и предизвикателство. Създайте нов файл с име heath-point.py и добавете кода със следните актуализации:

# Размери на прозореца
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Атрибути на играча
PLAYER_RADIUS = 25
PLAYER_SPEED = 5

# Атрибути на врага
ENEMY_RADIUS = 20
ENEMY_HEALTH = 100

класGameWindow(аркадна. прозорец):
деф__в него__(аз, ширина, височина):
super().__init__(ширина, височина)
arcade.set_background_color (arcade.color. БЯЛО)
self.player_x = ширина // 2
self.player_y = височина // 2
self.enemy_x = ширина // 2
self.enemy_y = височина - PLAYER_RADIUS
self.enemy_health = ENEMY_HEALTH
печат (self.enemy_health)
дефon_draw(себе си):
arcade.start_render()
arcade.draw_circle_filled (self.player_x,
self.player_y,
PLAYER_RADIUS,
arcade.color. СИН)
ако self.nemy_health > 0:
arcade.draw_circle_filled (self.enemy_x,
self.nemy_y,
ENEMY_RADIUS,
arcade.color. ЧЕРВЕН)

дефактуализация(самостоятелно, делта_време):
ако self.is_collision (self.player_x, self.player_y,
self.enemy_x, self.enemy_y,
PLAYER_RADIUS, ENEMY_RADIUS):
себе си.враг_здраве -= 10
печат (self.enemy_health)

The ENEMY_HEALTH константата има стойност 100, за да представи първоначалните здравни точки на врага. Когато играчът се сблъска с врага, можете да приспаднете някои точки от здравето на врага. За да покажете актуализираната стойност на здравето, можете да отпечатате текстов обект self.health_text което показва текущото здраве на врага.

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

Освен това можете да разширите кода, като добавите допълнителна логика и визуални елементи, като показване на ленти за здраве или прилагане на условия за поражение, когато здравето на врага достигне нула.

Най-добри практики за създаване на врагове

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

Разнообразни атрибути

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

Уникални поведения

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

Точки здраве (HP)

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

Направете игрите по-забавни с врагове

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