Paįvairinkite savo arkadinius žaidimus pristatydami priešus.

Priešai vaidina lemiamą vaidmenį kuriant patrauklius ir sudėtingus žaidimus. Jie suteikia žaidėjams kliūčių ir priešų, todėl žaidimų patirtis tampa įdomesnė. Python Arcade biblioteka siūlo paprastą būdą įtraukti priešus į savo žaidimus.

Sukurkite paprastą žaidimą

Prieš pradėdami įsitikinkite, kad turite pip įdiegtas jūsų įrenginyje. Naudokite šią komandą norėdami įdiegti arkada biblioteka:

pip diegimo pasažas

Po to pradėkite kurdami paprastą žaidimą, kuriame žaidėjas gali judėti į kairę ir dešinę rodyklių klavišais.

Šiame straipsnyje naudojamas kodas pateikiamas čia GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.

importuoti arkada

# Lango matmenys
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Žaidėjo atributai
PLAYER_RADIUS = 25
PLAYER_SPEED = 5

klasėŽaidimo langas(arkada. Langas):
def__init__(savaime, plotis, aukštis):
super().__init__(plotis, aukštis)
arcade.set_background_color (arcade.color. BALTAS)
self.player_x = plotis // 2

instagram viewer

defon_draw(savarankiškai):
arcade.start_render()
arcade.draw_circle_filled (self.player_x, PLAYER_RADIUS, PLAYER_RADIUS, arcade.color. MĖLYNA)

defyra_key_press(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ:
self.player_x -= PLAYER_SPEED
elifas raktas == arcade.key. DEŠINĖJE:
self.player_x += PLAYER_SPEED

defatnaujinti(savaime, delta_laikas):
praeiti

defpagrindinis():
langas = Žaidimo langas (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

jeigu __vardas__ == "__pagrindinis__":
pagrindinis ()

Paprasto priešo kūrimas

Norėdami sukurti priešą, kuris užmuštų žaidėją susidūrus, sukurkite kitą apskritimą ekrane. Viduje on_draw funkciją, galite nubrėžti šį priešo ratą ir patikrinti, ar nėra susidūrimų atnaujinti metodas. Tu taip pat gali naudokite spraitus priešams.

# Pridėti į GameWindow klasę

klasėŽaidimo langas(arkada. Langas):
# ...

def__init__(savaime, plotis, aukštis):
# ...

# Priešo atributai
self.enemy_x = plotis // 2
self.enemy_y = aukštis – PLAYER_RADIUS
save.priešo_spindulys = 20

defon_draw(savarankiškai):
# ...
arcade.draw_circle_filled (self.enemy_x, self.enemy_y, self.enemy_radius, arcade.color. RAUDONA)

defatnaujinti(savaime, delta_laikas):
jeigu self.is_collision (self.player_x, self.player_y, self.enemy_x, self.enemy_y, PLAYER_RADIUS, self.enemy_radius):
spausdinti ("Žaidimas baigtas!")

defis_collision(savęs, x1, y1, x2, y2, spindulys1, spindulys 2):
atstumo_kvadratas = (x1 - x2)** 2 + (y1 - y2)** 2
radius_sum_quared = (spindulys1 + spindulys2) ** 2
grąžinti atstumo_kvadratas <= spindulio_sumos_kvadratas

Priversti priešą sekti žaidėją

Kai kuriuose žaidimuose priešai gali persekioti žaidėją, pridėdami žaidimo dinamišką elementą. Norėdami sukurti sekantį priešą, turite atnaujinti jo poziciją pagal žaidėjo poziciją. Kai kada žaidėjas juda, priešas juda ta pačia kryptimi. Tai galite pasiekti pakeisdami atnaujinti metodas. Sukurkite naują failą pavadinimu enemy-follow-player.py ir pridėkite kodą su toliau pateiktais atnaujinimais:

# Pridėti į GameWindow klasę

klasėŽaidimo langas(arkada. Langas):
# ...

defatnaujinti(savaime, delta_laikas):
jeigu self.player_x < self.enemy_x:
self.enemy_x -= PLAYER_SPEED
elifas self.player_x > self.enemy_x:
self.enemy_x += PLAYER_SPEED

jeigu self.is_collision (self.player_x, self.player_y,
self.enemy_x, self.enemy_y,
PLAYER_RADIUS, ENEMY_RADIUS):
spausdinti ("Žaidimas baigtas!")

defis_collision(savęs, x1, y1, x2, y2, spindulys1, spindulys 2):
atstumo_kvadratas = (x1 - x2)** 2 + (y1 - y2)** 2
radius_sum_quared = (spindulys1 + spindulys2) ** 2
grąžinti atstumo_kvadratas <= spindulio_sumos_kvadratas

Žemiau yra išvestis:

Priešo kulkų pridėjimas

Norėdami sukurti priešą, kuris šaudo kulkomis, sukurkite a Kulka klasė ir sąrašas, skirtas sekti aktyvias kulkas. Priešas periodiškai sukurs naują kulką ir atnaujins savo poziciją. Sukurkite naują failą pavadinimu kulkos.py ir pridėkite kodą su toliau pateiktais atnaujinimais:

# Pridėti į GameWindow klasę

klasėKulka:
def__init__(savaime, x, y, spindulys, greitis):
savarankiškai.x = x
pats.y = y
savaime.spindulys = spindulys
savaiminis.greitis = greitis

defatnaujinti(savarankiškai):
self.y -= self.greitis

klasėŽaidimo langas(arkada. Langas):
# ...

def__init__(savaime, plotis, aukštis):
# ...

# Priešo atributai
self.bullets = []
self.bullet_radius = 5
self.bullet_speed = 3
self.bullet_cooldown = 60# Kadrų skaičius tarp kulkų neršių
self.bullet_timer = 0

defon_draw(savarankiškai):
# ...
dėl kulka in self.bullets:
arcade.draw_circle_filled (bullet.x, bullet.y,
self.bullet_radius, arcade.color. JUODA)

defatnaujinti(savaime, delta_laikas):
# ...

self.bullet_timer += 1
jeigu self.bullet_timer >= self.bullet_cooldown:
self.bullets.append (Bullet (self.enemy_x, self.enemy_y - self.enemy_radius,
self.bullet_radius, self.bullet_speed))
self.bullet_timer = 0

dėl kulka in self.bullets:
bullet.update()
jeigu self.is_collision (self.player_x, self.player_y, self.enemy_x,
self.enemy_y, PLAYER_RADIUS, ENEMY_RADIUS):
spausdinti ("Žaidimas baigtas!")

defis_collision(savęs, x1, y1, x2, y2, spindulys1, spindulys 2):
atstumo_kvadratas = (x1 - x2)** 2 + (y1 - y2)** 2
radius_sum_quared = (spindulys1 + spindulys2) ** 2
grąžinti atstumo_kvadratas <= spindulio_sumos_kvadratas

Žemiau yra išvestis:

Sveikatos taškų pridėjimas priešams

Daugelyje žaidimų priešai gali turėti sveikatos taškų (HP), todėl jie gali išlaikyti kelis smūgius prieš nugalėdami. Sveikatos taškų pridėjimas prie priešų gali pristatyti strateginius žaidimo elementus ir suteikti progreso bei iššūkio jausmą. Sukurkite naują failą pavadinimu Heath-point.py ir pridėkite kodą su toliau pateiktais atnaujinimais:

# Lango matmenys
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Žaidėjo atributai
PLAYER_RADIUS = 25
PLAYER_SPEED = 5

# Priešo atributai
ENEMY_RADIUS = 20
ENEMY_HEALTH = 100

klasėŽaidimo langas(arkada. Langas):
def__init__(savaime, plotis, aukštis):
super().__init__(plotis, aukštis)
arcade.set_background_color (arcade.color. BALTAS)
self.player_x = plotis // 2
self.player_y = aukštis // 2
self.enemy_x = plotis // 2
self.enemy_y = aukštis – PLAYER_RADIUS
self.enemy_health = ENEMY_HEALTH
spausdinti (self.enemy_health)
defon_draw(savarankiškai):
arcade.start_render()
arcade.draw_circle_filled (self.player_x,
self.player_y,
PLAYER_RADIUS,
arkada.spalva. MĖLYNA)
jeigu savęs.priešo_sveikata> 0:
arcade.draw_circle_filled (self.enemy_x,
self.enemy_y,
ENEMY_RADIUS,
arkada.spalva. RAUDONA)

defatnaujinti(savaime, delta_laikas):
jeigu self.is_collision (self.player_x, self.player_y,
self.enemy_x, self.enemy_y,
PLAYER_RADIUS, ENEMY_RADIUS):
savęs.priešo_sveikata -= 10
spausdinti (self.enemy_health)

The ENEMY_HEALTH konstanta turi reikšmę 100, kad atspindėtų pradinius priešo sveikatos taškus. Kai žaidėjas susiduria su priešu, galite atimti keletą taškų iš priešo sveikatos. Norėdami parodyti atnaujintą sveikatos reikšmę, galite atspausdinti tekstinį objektą savęs.sveikatos_tekstas tai rodo esamą priešo sveikatą.

Įtraukdami sveikatos taškų priešams, galite pateikti žaidėjams iššūkių ir strategijos sluoksnį. Rodoma sveikatos vertė suteikia vaizdinį grįžtamąjį ryšį ir leidžia žaidėjams sekti likusią priešo sveikatą.

Be to, kodą galite išplėsti pridėdami daugiau logikos ir vaizdų, pvz., rodydami sveikatos juostas arba įgyvendindami pralaimėjimo sąlygas, kai priešo būklė pasiekia nulį.

Geriausia priešų kūrimo praktika

Kurdami priešus savo žaidimui, svarbu atsižvelgti į keletą geriausių praktikų, kad užtikrintumėte, jog jie prisidėtų prie sudėtingos ir malonios žaidimo patirties. Štai keletas gairių, kurių reikia laikytis kuriant priešus:

Įvairios savybės

Kurkite priešus su įvairiomis savybėmis, tokiomis kaip greitis, dydis, sveikata ir puolimo galia. Skirtingi priešų tipai turėtų kelti skirtingą sunkumo lygį, todėl žaidėjai turi atitinkamai pritaikyti savo strategijas. Įdiegę priešo savybių derinį, galite išlaikyti žaidimą šviežią ir patrauklų.

Unikalus elgesys

Suteikite kiekvienam priešo tipui savo unikalius elgesio modelius. Kai kurie priešai gali judėti nuspėjamai, o kiti gali rodyti sudėtingesnius ar nepastovesnius judesius. Apsvarstykite galimybę įtraukti priešo dirbtinio intelekto algoritmus, kad jų elgesys būtų protingesnis ir nenuspėjamas, o žaidėjams būtų suteiktas papildomas iššūkis.

Sveikatos taškai (HP)

Įdiekite priešų sveikatos taškus, kad suteiktumėte progreso ir patvarumo jausmą. Tai leidžia priešams išlaikyti kelis smūgius prieš juos nugalėjus. Skirtingiems priešų tipams priskirdami skirtingą HP kiekį, galite sukurti sudėtingumo hierarchiją ir paskatinti žaidėjus strateguoti savo taikinius ir nustatyti jų prioritetus.

Padarykite žaidimus linksmesnius su priešais

Įtraukę į savo žaidimus priešų, galite žymiai pagerinti žaidimo patirtį. Jie pristato iššūkius ir motyvuoja žaidėjus tobulinti savo įgūdžius. Priešai gali būti įvairių formų: nuo paprastų kliūčių iki sudėtingų dirbtinio intelekto valdomų priešų. Veiksmingai įgyvendindami priešus, galite padaryti savo žaidimus patrauklesnius ir malonesnius žaidėjams.