Net patys paprasčiausi priešai turi kažkaip judėti, todėl pasisemkite įkvėpimo, kaip valdyti atakų modelių kodavimą.

Vienas iš pagrindinių puikaus vaizdo žaidimo elementų yra priešų buvimas. Nesvarbu, ar jie yra zombiai, ateiviai ar kiti žaidėjai, priešai gali padaryti žaidimą sudėtingesnį ir įdomesnį.

„PyGame“ galite lengvai užprogramuoti įvairius priešo judėjimo būdus, pvz., sekti žaidėją, judėti atsitiktinai arba pasirinkti tam tikrus kelius.

Paprasto žaidimo kūrimas

Pradėkite kurdami paprastą žaidimą, kuriame žaidėjas judės horizontaliai ir vertikaliai. Jei žaidėjas paliečia priešą, žaidėjas mirs.

Visą kodą galite rasti čia „GitHub“ atpirkimas.

Pradėkite importuodami reikalingą PyGame modulį ir jį inicijuodami.

importuoti pygame

pygame.init()

Tada nustatykite ekraną ir sukurkite žaidėjo bei priešo objektus naudodami pygame. Tiesiai () funkcija.

# Nustatykite ekraną
ekranas = pygame.display.set_mode((800, 600))

# Nustatykite spalvas
juoda = (0, 0, 0)
balta = (255, 255, 255)

# Nustatykite žaidėjo stačiakampį ir priešo objektą

instagram viewer

žaidėjas = pygame. Rect(350, 500, 50, 50)
priešas = pygame. Rect(350, 0, 50, 50)

Po to sukurkite žaidimo kilpą, kuri tęsiasi tol, kol žaidėjas susidurs su priešu arba išeis iš žaidimo. Taip pat patikrinkite žaidėjo ir priešo susidūrimasir nupieškite žaidimo objektus ekrane.

# Nustatykite žaidimo kilpą
bėgimas = Tiesa

kol veikia:
dėl įvykis in pygame.event.get():
jeigu event.type == pygame. UŽDARYTI:
bėgimas = Netiesa

# Užpildykite ekraną balta spalva
screen.fill (balta)

# Perkelkite grotuvo stačiakampį
klavišai = pygame.key.get_pressed()

jeigu raktai[pygame. K_LEFT]:
grotuvas.x -= 5

jeigu raktai[pygame. K_RIGHT]:
grotuvas.x += 5

jeigu raktai[pygame. K_UP]:
žaidėjas.y -= 5

jeigu raktai[pygame. K_DOWN]:
grotuvas.y += 5

# Patikrinkite, ar žaidėjas ir priešas nesusidūrė
jeigu player.colliderect (priešas):
bėgimas = Netiesa

# Nupieškite žaidėjo stačiakampį ir priešo objektą ekrane
pygame.draw.rect (ekranas, juodas, grotuvas)
pygame.draw.rect (ekranas, juodas, priešas)

# Atnaujinkite ekraną
pygame.display.update()

# Išeikite iš žaidimo
pygame.quit()

Nukreipkite priešus į žaidėją

Norėdami nukreipti priešą link žaidėjo, turite apskaičiuoti atstumą tarp jų, o tai galite padaryti naudodami Pitagoro teoremą. Tada galite naudoti šį atstumą norėdami nustatyti priešo judėjimo greitį ir kryptį žaidėjo link.

Norėdami tai įgyvendinti, sukurkite greičio kintamąjį ir naudokite jį, kad atnaujintumėte priešo poziciją žaidėjo atžvilgiu.

# Apskaičiuokite atstumą tarp priešo ir žaidėjo
atstumas_x = žaidėjas.x – priešas.x
atstumas_y = žaidėjas.y – priešas.y
atstumas = (atstumas_x ** 2 + atstumas_y** 2) ** 0.5

# Perkelkite priešą link žaidėjo
greitis = 2

jeigu atstumas! = 0:
priešas.x += greitis * atstumas_x / atstumas
priešas.y += greitis * atstumas_y / atstumas

Atsitiktinai nustatykite priešo judėjimą ekrane

Taip pat galite priversti priešą atsitiktinai judėti ekrane, kad žaidimas taptų sudėtingesnis.

Norėdami tai padaryti, sugeneruokite atsitiktinę priešo judėjimo kryptį naudodami atsitiktinį Python modulį. Naudoti pasirinkimas () funkcija pasirinkti atsitiktinę kryptį iš krypčių, kuriomis priešas gali judėti, sąrašo. Tada atnaujinkite priešo poziciją pagal pasirinktą kryptį.

importuoti atsitiktinis

# Atsitiktinai perkelkite priešą ekrane
kryptis = atsitiktinis.choice(['kairė', 'teisingai', 'aukštyn', 'žemyn'])

jeigu kryptis == 'kairė':
priešas.x -= 5
elifas kryptis == 'teisingai':
priešas.x += 5
elifas kryptis == 'aukštyn':
priešas.y -= 5
elifas kryptis == 'žemyn':
priešas.y += 5

Artimu paremtas priešo judėjimas

Kai kuriuose žaidimuose priešas juda tik tada, kai žaidėjas yra arti jo. Tai galite pasiekti apskaičiuodami atstumą tarp priešo ir žaidėjo.

Jei atstumas yra mažesnis už tam tikrą reikšmę, priverskite priešą judėti link žaidėjo. Tai daro žaidimą strategiškesnį ir verčia žaidėją būti atsargesniems judesiuose.

# Perkelkite priešą link žaidėjo, jei žaidėjas yra arti
greitis = 2

jeigu atstumas < 300:
jeigu atstumas! = 0:
priešas.x += greitis * atstumas_x / atstumas
priešas.y += greitis * atstumas_y / atstumas

Priešas vengia žaidėjų atakų

Taip pat galite priversti priešą vengti žaidėjo judėjimo. Priešas bandys išvengti žaidėjo judėdamas statmenai žaidėjo pozicijai.

Norėdami tai pasiekti, apskaičiuokite vieneto vektorių link grotuvo naudodami anksčiau apskaičiuotus atstumą_x ir atstumą_y. Tada apskaičiuokite statmeną vektorių, kad perkeltumėte priešą statmenai vieneto vektoriui. Galiausiai apskaičiuokite statmeno vektoriaus ir vieneto vektoriaus taškinę sandaugą, kad nustatytumėte priešo judėjimo kryptį.

Norėdami tai įgyvendinti, po atstumo skaičiavimo pridėkite toliau pateiktą kodo fragmentą.

greitis = 2

jeigu atstumas < 400:
jeigu atstumas! = 0:
# Apskaičiuokite vieneto vektorių link grotuvo
unit_vektorius_x = atstumas_x / atstumas
unit_vektorius_y = atstumas_y / atstumas

# Apskaičiuokite statmeną vektorių
statmenas_vektorius_x = -vienetas_vektorius_y
statmenas_vektorius_y = vienetas_vektorius_x

# Apskaičiuokite statmeno vektoriaus taškinę sandaugą ir
# vieneto vektorius
taškas_produktas = statmenas_vektorius_x * vienetas_vektorius_x
+ statmenas_vektorius_y * vienetas_vektorius_y

# Perkelkite priešą statmenai vieneto vektoriui
jeigu taškinis_produktas > 0:
priešas.x += greitis * statmenas_vektorius_x
priešas.y += greitis * statmenas_vektorius_y
Kitas:
priešas.x -= greitis * statmenas_vektorius_x
priešas.y -= greitis * statmenas_vektorius_y

Su šiomis modifikacijomis priešas stengsis neprisileisti per arti žaidėjo. Dėl to žaidimas tampa sudėtingesnis ir įdomus.

Papildomų funkcijų pridėjimas

Taip pat galite pridėti daugiau funkcijų į savo žaidimą, kad jis būtų sudėtingesnis. Pavyzdžiui, galite pridėti kelis priešus, kurie atsitiktinai juda ekrane, kliūtis, kurių žaidėjas turi vengti judėdamas, galių, kurios pagerina žaidėjo sugebėjimus ir pan.

Tu gali naudokite modulį Clock, kad nustatytumėte kadrų dažnį savo žaidimo ir kad jis vyktų sklandžiau. Žemiau pateikiamas įgyvendinimas:

# Pridėkite kelis priešus, kurie atsitiktinai juda ekrane
priešai = []

dėl i in diapazonas(5):
priešas = pygame. Rect (random.randint(0, 750), random.randint(0, 550), 50,
50)

priešai.pridėti (priešas)

# Pridėkite kliūčių, kurių žaidėjas turi vengti
kliūtis = pygame. Rect(200, 250, 50, 50)

# Nustatykite žaidimo kilpą
laikrodis = pygame.time. Laikrodis()
bėgimas = Tiesa

kol veikia:
dėl įvykis in pygame.event.get():
jeigu event.type == pygame. UŽDARYTI:
bėgimas = Netiesa

# Užpildykite ekraną balta spalva
screen.fill (balta)

# Perkelkite grotuvo stačiakampį
klavišai = pygame.key.get_pressed()

jeigu raktai[pygame. K_LEFT]:
grotuvas.x -= 5
jeigu raktai[pygame. K_RIGHT]:
grotuvas.x += 5
jeigu raktai[pygame. K_UP]:
žaidėjas.y -= 5
jeigu raktai[pygame. K_DOWN]:
grotuvas.y += 5

# Atsitiktinai perkelkite priešus ekrane
dėl priešas in priešai:
kryptis = atsitiktinis.choice(['kairė', 'teisingai', 'aukštyn', 'žemyn'])

jeigu kryptis == 'kairė':
priešas.x -= 5
elifas kryptis == 'teisingai':
priešas.x += 5
elifas kryptis == 'aukštyn':
priešas.y -= 5
elifas kryptis == 'žemyn':
priešas.y += 5

# Patikrinkite, ar žaidėjas ir priešas nesusidūrė
jeigu player.colliderect (priešas):
bėgimas = Netiesa

# Nupieškite žaidėjo stačiakampį, priešo objektus ir kliūtį
# ekranas
pygame.draw.rect (ekranas, juodas, grotuvas)

dėl priešas in priešai:
pygame.draw.rect (ekranas, juodas, priešas)

pygame.draw.rect (ekranas, juodas, kliūtis)

# Atnaujinkite ekraną
pygame.display.update()

# Nustatykite žaidimo kadrų dažnį
laikrodis.tick(60)

# Išeikite iš žaidimo
pygame.quit()

Patobulinkite savo žaidimų patirtį su priešais

Pridėję priešų su unikaliais judesiais, elgesiu ir sugebėjimais, galite padaryti savo žaidimus patrauklesnius ir sudėtingesnius žaidėjams. Žaidėjai turės strateguoti ir pritaikyti savo žaidimą, kad įveiktų įvairių tipų priešus. Tai gali padidinti įsitraukimą, pagerinti pakartojimo vertę ir paskatinti žaidėjus sugrįžti norėdami daugiau.