как можно создать интеллект для nps для платформера?
Моя проблема заключается в том что мой nps видит даже через стены. А исправить это я не понимаю как. прошу помогите мне.
Если вы хотите вы можете скачать полностью весь мой код, то пройдите по ссылке в конце статьи
вот код npc:
class npc(sprite.Sprite):
def __init__(self,x,y):
sprite.Sprite.__init__(self)
self.xvel = 0 #скорость перемещения. 0 - стоять на месте
self.x = x
self.y = y
self.right1 = False
self.left1 = False
self.up1 = False
self.running1 = False
self.yvel = 0 # скорость вертикального перемещения
self.onGround = False # На земле ли я?
self.image = Surface((WIDTH,HEIGHT))
self.image.fill(Color(COLOR))
self.rect = Rect(x, y, WIDTH, HEIGHT) # прямоугольный объект
self.hero_see = False
def shoot(self):
bullet = Bullet((self.rect.x + 20),(self.rect.y+10))
bullet.led(hero)
entities.add(bullet)
bullets.add(bullet)
def update(self,left1, right1, up1, running1, platforms,hero):
if self.hero_see == False:
None
if self.rect.x+100 >hero.rect.x and not self.collide1:
self.hero_see = True
if self.collide1:
self.hero_see = False
if self.hero_see == True:
if hero.rect.x + 20 <= self.rect.x:
self.left1 = True
self.right1 = False
if not hero.rect.x + 20 <= self.rect.x:
self.right1 = False
self.left1 = False
if hero.rect.x - 20 >= self.rect.x:
self.left1 = False
self.right1 = True
if hero.rect.y < self.rect.y :
self.up1 = True
if not hero.rect.y < self.rect.y :
self.up1 = False
if self.rect.x > hero.rect.x:
self.hero_see = True
if self.rect.x < hero.rect.x:
self.hero_see = True
if self.up1:
if self.onGround: # прыгаем, только когда можем оттолкнуться от земли
self.yvel = -JUMP_POWER
if self.running1 and (self.left1 or self.right1): # если есть ускорение и мы движемся
self.yvel -= JUMP_EXTRA_POWER # то прыгаем выше
if self.left1:
self.xvel = -MOVE_SPEED1
if running1: # если усkорение
self.xvel-=MOVE_EXTRA_SPEED1 # то передвигаемся быстрее
if self.right1:
self.xvel = MOVE_SPEED1
if self.running1:
self.xvel+=MOVE_EXTRA_SPEED1
if not(self.left1 or self.right1): # стоим, когда нет указаний идти
self.xvel = 0
if not self.onGround:
self.yvel += GRAVITY
self.onGround = False; # Мы не знаем, когда мы на земле((
self.rect.y += self.yvel
self.collide1(0, self.yvel, platforms)
self.collide(0, self.yvel, bullets)
self.rect.x += self.xvel # переносим свои положение на xvel
self.collide1(self.xvel, 0, platforms)
self.collide(self.xvel, 0, bullets)
def collide1(self, xvel, yvel, platforms):
for p in platforms:
if sprite.collide_rect(self, p): # если есть пересечение платформы с игроком
if xvel > 0: # если движется вправо
self.rect.right = p.rect.left # то не движется вправо
self.hero_see = False
if xvel < 0: # если движется влево
self.rect.left = p.rect.right # то не движется влево
self.hero_see = False
if yvel > 0: # если падает вниз
self.rect.bottom = p.rect.top # то не падает вниз
self.onGround = True # и становится на что-то твердое
self.yvel = 0 # и энергия падения пропадает
if yvel < 0: # если движется вверх
self.rect.top = p.rect.bottom # то не движется вверх
self.yvel = 0 # и энергия прыжка пропадает
https://yadi.sk/d/fMGrzGOKZ-2Nbg