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ą
ž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 = Tiesakol 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 -= 5jeigu raktai[pygame. K_RIGHT]:
grotuvas.x += 5jeigu raktai[pygame. K_UP]:
žaidėjas.y -= 5jeigu 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 = Tiesakol 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.