コード例 #1
0
ファイル: Cursor.py プロジェクト: Alex-Andr-19/GenRepos
 def redraw(self, cords):
     self.percent = clamp(cords[0] / (Set_W - 20), 1)
     self.image = pg.Surface([Set_W - 20, 25])
     self.image.fill((210, 210, 210))
     pg.draw.line(self.image, (0, 0, 130), (0, 13), (Set_W - 20, 13))
     pg.draw.rect(self.image, (0, 0, 0), (clamp(cords[0] - 17, Set_W - 37), 0, 15, 25))
     if self.focus:
         pg.draw.circle(self.image,
                        (255, 255, 255),
                        (clamp(int(self.percent * (Set_W - 20)) - 7, Set_W - 27) - 2, 13),
                        3)
コード例 #2
0
    def __init__(self, x, y, length, diam=50, side=1):
        super().__init__()

        self.x = x
        self.y = y
        self.side = side
        self.length = length
        self.diam = diam
        self.angle = acos(clamp(length / diam * side, 1, -1))

        self.color1 = (192 + 63 * sin(self.angle), 0, 0)
        self.color2 = (length / diam * 200, length / diam * 200, length / diam * 200)
        self.color3 = (0, 192 - 63 * sin(self.angle), 0)

        self.gen1 = create_sprite(0, y, 10, 10, self.color1)
        self.link = create_sprite(x + 10, y + 3, length, 4, self.color2)
        self.gen2 = create_sprite(0, y, 10, 10, self.color3)

        if side == 1:
            self.gen1.rect.x = x
            self.gen2.rect.x = x + 10 + length
        else:
            self.gen1.rect.x = x + 10 + length
            self.gen2.rect.x = x
        self.link.rect.x = x + 10
        self.link.rect.y = y + 3

        self.add([self.link, self.gen1, self.gen2])
        self.mem = [self.gen1, self.link, self.gen2]
コード例 #3
0
ファイル: Cursor.py プロジェクト: Alex-Andr-19/GenRepos
 def __init__(self, x, y, st=0):
     super().__init__()
     self.x = x
     self.y = y
     self.percent = st
     self.focus = 0
     self.image = pg.Surface([Set_W - 20, 25])
     self.image.fill((210, 210, 210))
     self.rect = self.image.get_rect()
     self.rect.x = x
     self.rect.y = y
     pg.draw.line(self.image, (0, 0, 130), (0, 13), (Set_W - 20, 13))
     pg.draw.rect(self.image, (0, 0, 0), (int(st * (Set_W - 20)), 0, 15, 25))
     pg.draw.circle(self.image,
                    (255, 255, 255),
                    (clamp(int(st * (Set_W - 20)), Set_W - 27) + 7, 13),
                    3)
コード例 #4
0
    def go_to_targer(self, targ):
        x_t = targ.rect.x
        y_t = targ.rect.y

        for i in range(self.speed):
            if fabs(self.body.rect.x - x_t) > fabs(self.body.rect.y - y_t):
                if self.body.rect.x > x_t:
                    self.body.rect.x -= 1
                    self.sens_circ.rect.x -= 1
                else:
                    self.body.rect.x += 1
                    self.sens_circ.rect.x += 1
            else:
                if self.body.rect.y > y_t:
                    self.body.rect.y -= 1
                    self.sens_circ.rect.y -= 1
                else:
                    self.body.rect.y += 1
                    self.sens_circ.rect.y += 1
            self.energy = clamp(self.energy - 0.005, 10)

        r = clamp(int(self.color1[0] * self.energy))
        if self.energy > 5.5:
            r = clamp(int((self.energy - 5.5) * 255))
        g = clamp(int(self.color1[1] * self.energy))
        if self.energy > 8.5:
            g = clamp(int((self.energy - 8.5) * 255))
        b = clamp(int(self.color1[2] * self.energy / 5.5))
        self.sens_circ.image = pg.Surface([self.sens * 2, self.sens * 2])
        self.sens_circ.image.fill((0, 0, 0))
        self.sens_circ.image.set_colorkey((0, 0, 0))
        pg.draw.circle(self.sens_circ.image, self.color2,
                       (self.sens, self.sens), self.sens)
        self.body.image.fill((r, g, b))

        self.sens_circ.image.blit(self.brd_info, (18, 12 + 3 * HCR))

        self.enrg_info = self.f.render(
            str(self.energy)[:5], 1, (255, 255, 255))
        # self.days_info = self.f.render(str(self.days), 1, (255, 255, 255))
        # self.speed_info = self.f.render(str(self.speed), 1, (255, 255, 255))
        # self.birth_info = self.f.render(str(self.birth_enr), 1, (255, 255, 255))
        self.sens_circ.image.blit(self.enrg_info, (18, 12))
        # self.sens_circ.image.blit(self.days_info, (36, 12 + 3 * HCR))
        # self.sens_circ.image.blit(self.speed_info, (11, 25))
        # self.sens_circ.image.blit(self.birth_info, (11 + 4*WCR, 25))

        if not self.energy:
            return 0
        return 1
コード例 #5
0
    def go_to_target(self, targ):
        x_t = targ.rect.x
        y_t = targ.rect.y

        # высчитывание новых координат
        for i in range(self.speed):
            if fabs(self.body.rect.x - x_t) > fabs(self.body.rect.y - y_t):
                if self.body.rect.x > x_t:
                    self.body.rect.x -= 1
                    self.sens_circ.rect.x -= 1
                else:
                    self.body.rect.x += 1
                    self.sens_circ.rect.x += 1
            else:
                if self.body.rect.y > y_t:
                    self.body.rect.y -= 1
                    self.sens_circ.rect.y -= 1
                else:
                    self.body.rect.y += 1
                    self.sens_circ.rect.y += 1

            # затрата на передвижение
            self.energy = clamp(self.energy - 0.006 * self.weight / 64)

        # расчёт цвета в зависимости от количества энергии
        r = clamp(int(self.color1[0] * self.energy))
        if self.energy > 5.5:
            r = clamp(int((self.energy - 5.5) * 255))
        g = clamp(int(self.color1[1] * self.energy))
        if self.energy > 8.5:
            g = clamp(int((self.energy - 8.5) * 255))
        b = clamp(int(self.color1[2] * self.energy / 5.5))

        # обновление размеров поверхности при мутации у особи гена размера тела
        if self.body.rect.w != self.w:
            self.body.image = pg.Surface([self.w, self.h])
            self.body.rect.w = self.w
            self.body.rect.x += (self.w - self.body.rect.w) // 2
            self.weight = self.w * self.h
        if self.body.rect.h != self.h:
            self.body.image = pg.Surface([self.w, self.h])
            self.body.rect.h = self.h
            self.body.rect.y -= (self.h - self.body.rect.h) // 2
            self.weight = self.w * self.h

        # отрисовка особи с обновлёнными координатами
        self.sens_circ.image = pg.Surface(
            [self.sens * 2 + self.w - 5, self.sens * 2 + self.h - 5])
        self.sens_circ.image.fill((0, 0, 0))
        self.sens_circ.image.set_colorkey((0, 0, 0))
        pg.draw.ellipse(self.sens_circ.image, self.color2,
                        self.sens_circ.image.get_rect())
        if self.focus:
            pg.draw.rect(self.sens_circ.image, (255, 215, 0),
                         (self.body.rect.x - 2 - self.sens_circ.rect.x,
                          self.body.rect.y - 2 - self.sens_circ.rect.y,
                          self.body.rect.w + 4, self.body.rect.h + 4))
        self.body.image.fill((r, g, b))

        self.sens_circ.image.blit(self.brd_info, (18, 12 + 3 * HCR))

        # дополнительная информация
        self.enrg_info = self.f.render(
            str(self.energy)[:5], 1, (255, 255, 255))
        # self.days_info = self.f.render(str(self.days), 1, (255, 255, 255))
        # self.speed_info = self.f.render(str(self.speed), 1, (255, 255, 255))
        # self.birth_info = self.f.render(str(self.birth_enr), 1, (255, 255, 255))
        self.sens_circ.image.blit(self.enrg_info, (18, 12))
        # self.sens_circ.image.blit(self.days_info, (36, 12 + 3 * HCR))
        # self.sens_circ.image.blit(self.speed_info, (11, 25))
        # self.sens_circ.image.blit(self.birth_info, (11 + 4*WCR, 25))

        if not self.energy:
            self.dead()
            return 0
        return 1
コード例 #6
0
ファイル: Food.py プロジェクト: Alex-Andr-19/GenRepos
 def fading(self):
     self.image.fill((clamp(self.color[0] - STEP_FAD),
                      clamp(self.color[1] + STEP_FAD), 0))
     self.color = (clamp(self.color[0] - STEP_FAD),
                   clamp(self.color[1] + STEP_FAD), 0)