как можно создать интеллект для 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


Ответы (0 шт):