Még a legalapvetőbb ellenségeknek is mozogniuk kell valahogy, ezért merítsen ihletet a támadási minták mögötti kódolás kezeléséhez.
Egy nagyszerű videojáték egyik kulcseleme az ellenség jelenléte. Legyen szó zombikról, földönkívüliekről vagy más játékosokról, az ellenségek még nagyobb kihívást és izgalmassá tehetnek egy játékot.
A PyGame-ben könnyedén programozhat különféle ellenséges mozgási viselkedéseket, például a játékos követését, véletlenszerű mozgást vagy meghatározott utakat.
Egyszerű játék létrehozása
Kezdje egy egyszerű játék létrehozásával, amelyben a játékos vízszintesen és függőlegesen mozog. Ha a játékos megérinti az ellenséget, a játékos meghal.
Ebben megtalálod a teljes kódot GitHub repó.
Kezdje a szükséges PyGame modul importálásával és inicializálásával.
import pygame
pygame.init()
Ezután állítsa be a képernyőt, és hozza létre a játékost és az ellenséges objektumokat a segítségével pygame. Rect() funkció.
# Állítsa be a képernyőt
képernyő = pygame.display.set_mode((800, 600))# Állítsa be a színeket
fekete = (0, 0, 0)
fehér = (255, 255, 255)
# Állítsa be a játékos téglalapot és az ellenséges objektumot
játékos = pygame. Rect(350, 500, 50, 50)
ellenség = pygame. Rect(350, 0, 50, 50)
Ezután hozzon létre egy játékhurkot, amely addig fut, amíg a játékos vagy ütközik az ellenséggel, vagy kilép a játékból. Ezenkívül ellenőrizze ütközés a játékos és az ellenség között, és rajzold le a játék tárgyait a képernyőre.
# Állítsa be a játékhurkot
futás = Igazmíg futás:
számára esemény ban ben pygame.event.get():
ha event.type == pygame. KILÉPÉS:
futás = Hamis# Töltse ki a képernyőt fehérrel
screen.fill (fehér)# Mozgassa a lejátszó téglalapot
keys = pygame.key.get_pressed()ha kulcsok[pygame. K_LEFT]:
játékos.x -= 5ha kulcsok[pygame. K_RIGHT]:
játékos.x += 5ha kulcsok[pygame. K_UP]:
játékos.y -= 5ha kulcsok[pygame. K_DOWN]:
játékos.y += 5# Ellenőrizze, nincs-e ütközés a játékos és az ellenség között
ha player.colliderect (ellenség):
futás = Hamis# Rajzold a képernyőre a játékos téglalapot és az ellenséges tárgyat
pygame.draw.rect (képernyő, fekete, lejátszó)
pygame.draw.rect (képernyő, fekete, ellenség)# Frissítse a képernyőt
pygame.display.update()
# Lépjen ki a játékból
pygame.quit()
Irányítsa ellenségeit a játékos felé
Ahhoz, hogy az ellenséget a játékos felé mozgassa, ki kell számítania a kettő közötti távolságot, amit a Pitagorasz-tétel segítségével tehet meg. Ezt a távolságot ezután felhasználhatja az ellenség mozgási sebességének és irányának meghatározására a játékos felé.
Ennek megvalósításához hozz létre egy sebességváltozót, és ezzel frissítsd az ellenség pozícióját a játékos felé.
# Számítsa ki az ellenség és a játékos közötti távolságot
távolság_x = játékos.x - ellenség.x
távolság_y = játékos.y - ellenség.y
távolság = (távolság_x ** 2 + távolság_y** 2) ** 0.5# Vigye az ellenséget a játékos felé
sebesség = 2
ha távolság != 0:
ellenség.x += sebesség * távolság_x / távolság
ellenség.y += sebesség * távolság_y / távolság
Véletlenszerűvé tétele az ellenséges mozgást a képernyőn
Azt is megteheti, hogy az ellenség véletlenszerűen mozogjon a képernyőn, hogy nagyobb kihívást jelentsen a játék.
Ehhez a Python véletlenszerű moduljával állítson elő egy véletlenszerű irányt az ellenség mozgására. Használja a választás() funkció egy véletlenszerű irány kiválasztásához azon irányok listájából, amelyekben az ellenség mozoghat. Ezután frissítse az ellenség pozícióját a választott irány alapján.
import véletlen
# Mozgassa az ellenséget véletlenszerűen a képernyőn
irány = random.choice(['bal', 'jobb', 'fel', 'le'])
ha irány == 'bal':
ellenség.x -= 5
elif irány == 'jobb':
ellenség.x += 5
elif irány == 'fel':
ellenség.y -= 5
elif irány == 'le':
ellenség.y += 5
Közelség alapú ellenséges mozgalom
Egyes játékokban az ellenség csak akkor mozog, ha a játékos közel van hozzájuk. Ezt úgy érheti el, hogy kiszámítja az ellenség és a játékos közötti távolságot.
Ha a távolság kisebb egy bizonyos értéknél, mozgassa az ellenséget a játékos felé. Ez stratégiaibbá teszi a játékot, és óvatosabb mozgásra kényszeríti a játékost.
# Vigye az ellenséget a játékos felé, ha a játékos közel van
sebesség = 2
ha távolság < 300:
ha távolság != 0:
ellenség.x += sebesség * távolság_x / távolság
ellenség.y += sebesség * távolság_y / távolság
Az ellenség kikerüli a játékos támadásait
Azt is megteheti, hogy az ellenség kitérjen a játékos mozgása elől. Az ellenség úgy próbálja elkerülni a játékost, hogy merőlegesen mozog a játékos helyzetére.
Ennek eléréséhez számítsa ki az egységvektort a játékos felé a korábban kiszámított távolság_x és távolság_y segítségével. Ezután számítsa ki a merőleges vektort, hogy az ellenséget merőlegesen mozgassa az egységvektorra. Végül számítsa ki a merőleges vektor és az egységvektor pontszorzatát, hogy meghatározza az ellenség mozgásának irányát.
Ennek megvalósításához adja hozzá az alábbi kódrészletet a távolság kiszámítása után.
sebesség = 2
ha távolság < 400:
ha távolság != 0:
# Számítsa ki az egységvektort a lejátszó felé
egységvektor_x = távolság_x / távolság
unit_vector_y = távolság_y / távolság# Számítsa ki a merőleges vektort
merőleges_vektor_x = -egységvektor_y
merőleges_vektor_y = egységvektor_x# Számítsa ki a merőleges vektor pontszorzatát és a
# egységvektor
ponttermék = merőleges_vektor_x * egységvektor_x
+ merőleges_vektor_y * egységvektor_y
# Mozgassa az ellenséget merőlegesen az egységvektorra
ha pont_termék > 0:
ellenség.x += sebesség * merőleges_vektor_x
ellenség.y += sebesség * merőleges_vektor_y
más:
ellenség.x -= sebesség * merőleges_vektor_x
ellenség.y -= sebesség * merőleges_vektor_y
Ezekkel a módosításokkal az ellenség megpróbálja elkerülni, hogy túl közel kerüljön a játékoshoz. Ez nagyobb kihívást és szórakoztatóbbá teszi a játékot.
Extra funkciók hozzáadása
További funkciókat is hozzáadhat a játékhoz, hogy nagyobb kihívást jelentsen. Hozzáadhat például több ellenséget, amelyek véletlenszerűen mozognak a képernyőn, akadályokat, amelyeket a játékosnak el kell kerülnie mozgása közben, olyan erőket, amelyek javítják a játékos képességeit stb.
tudsz használja az Óra modult a képkockasebesség beállításához a játék zökkenőmentesebbé tétele érdekében. Alább látható a megvalósítás:
# Adjon hozzá több ellenséget, amelyek véletlenszerűen mozognak a képernyőn
ellenségek = []számára én ban ben hatótávolság(5):
ellenség = pygame. Rect (random.randint(0, 750), random.randint(0, 550), 50,
50)ellenségek.hozzáfűz (ellenség)
# Adjon hozzá akadályokat, amelyeket a játékosnak el kell kerülnie
akadály = pygame. Rect(200, 250, 50, 50)# Állítsa be a játékhurkot
óra = pygame.time. Óra()
futás = Igazmíg futás:
számára esemény ban ben pygame.event.get():
ha event.type == pygame. KILÉPÉS:
futás = Hamis# Töltse ki a képernyőt fehérrel
screen.fill (fehér)# Mozgassa a lejátszó téglalapot
keys = pygame.key.get_pressed()ha kulcsok[pygame. K_LEFT]:
játékos.x -= 5
ha kulcsok[pygame. K_RIGHT]:
játékos.x += 5
ha kulcsok[pygame. K_UP]:
játékos.y -= 5
ha kulcsok[pygame. K_DOWN]:
játékos.y += 5# Mozgassa az ellenséget véletlenszerűen a képernyőn
számára ellenség ban ben ellenségek:
irány = random.choice(['bal', 'jobb', 'fel', 'le'])ha irány == 'bal':
ellenség.x -= 5
elif irány == 'jobb':
ellenség.x += 5
elif irány == 'fel':
ellenség.y -= 5
elif irány == 'le':
ellenség.y += 5# Ellenőrizze, nincs-e ütközés a játékos és az ellenség között
ha player.colliderect (ellenség):
futás = Hamis# Rajzold rá a játékos téglalapot, az ellenséges tárgyakat és az akadályt
# A képernyőn
pygame.draw.rect (képernyő, fekete, lejátszó)számára ellenség ban ben ellenségek:
pygame.draw.rect (képernyő, fekete, ellenség)pygame.draw.rect (képernyő, fekete, akadály)
# Frissítse a képernyőt
pygame.display.update()# Állítsa be a játék képkockasebességét
clock.tick(60)
# Lépjen ki a játékból
pygame.quit()
Növelje játékélményét az ellenségekkel
Ha egyedi mozdulatokkal, viselkedéssel és képességekkel rendelkező ellenségeket ad hozzá, a játékokat vonzóbbá és nagyobb kihívást jelentővé teheti a játékosok számára. A játékosoknak stratégiát kell alakítaniuk és hozzá kell igazítaniuk játékmenetüket, hogy legyőzzék a különböző típusú ellenségeket. Ez növelheti az elköteleződést, javíthatja a visszajátszási értéket, és arra készteti a játékosokat, hogy még többért térjenek vissza.