Example #1
0
 def __init__(self, location, background):
     pygame.sprite.Sprite.__init__(self)  #call Sprite initializer
     self.image, self.rect = load_image('images/person-icon.png', -1)
     self.location = location
     screen = pygame.display.get_surface()
     self.area = screen.get_rect()
     font = pygame.font.Font(None, 36)
     if location == 'N':
         self.rect.midtop = background.get_width() / 2, 10
         text = font.render("Tim", 1, (10, 10, 10))
         textpos = text.get_rect(centerx=background.get_width() / 2,
                                 centery=100)
         background.blit(text, textpos)
     elif location == 'S':
         self.rect.midbottom = 650, 760
         text = font.render("You", 1, (10, 10, 10))
         textpos = text.get_rect(centerx=background.get_width() / 2,
                                 centery=background.get_height() - 130)
         background.blit(text, textpos)
     elif location == 'W':
         self.rect.midleft = 10, 400
         text = font.render("Gary", 1, (10, 10, 10))
         textpos = text.get_rect(centerx=35,
                                 centery=background.get_height() / 2 + 50)
         background.blit(text, textpos)
     elif location == 'E':
         self.rect.midright = 1290, 400
         text = font.render("Sam", 1, (10, 10, 10))
         textpos = text.get_rect(centerx=background.get_width() - 40,
                                 centery=background.get_height() / 2 + 50)
         background.blit(text, textpos)
Example #2
0
 def __init__(self, coords=(0,0), speed=(0,0)):
     Game_Object.__init__(self, coords=coords, speed=speed)
     self.image = load_image('yellow_car.png', path='Images', alpha_cannel=True)
     self.image = pygame.transform.rotate(self.image, -90)
     self.image = pygame.transform.scale(self.image, (50,50))
     self.rect = self.image.get_rect()
     self.track = None
Example #3
0
 def __init__(self, group):
     super().__init__(group)
     self.sheet = load_image(['Menu', 'background', 'background.png'],
                             colorkey=None)
     self.frames = sprite_sheet(self.sheet, 5, 2)
     self.going_to = 0
     self.image = self.frames[self.going_to]
     self.rect = self.image.get_rect()
     self.rect.x = 0
     self.rect.y = 0
Example #4
0
def main():
    img_high = high_pass_filter('images/97.jpg', 20)
    img_low = low_pass_filter('images/97.jpg', 16)

    figures = []

    figures.append(('Orignal image', load_image('images/97.jpg', type=0)))
    figures.append(('Low pass filter', img_low.copy()))
    figures.append(('High pass filter', img_high.copy()))

    plot_figures(figures, 2, 2)
Example #5
0
 def __init__(self, groups, size, pos, path):
     x, y = pos
     if (isinstance(groups, tuple) or isinstance(groups, list)) is False:
         groups = (groups,)
     super().__init__(*groups)
     self.image = load_image([TILES_PATH, path])
     self.image = pygame.transform.scale(self.image, size)
     self.mask = pygame.mask.from_surface(self.image)
     self.rect = self.image.get_rect()
     self.rect.x, self.rect.y = x * BLOCK_SIZE[0], y * BLOCK_SIZE[0]
     self.pos_x, self.pos_y = self.rect.x, self.rect.y
     self.rel_pos_x, self.rel_pos_y = self.rect.x, self.rect.y
Example #6
0
class Goomba(BaseCharacter):
    """Класс Гумбы (враждебный ходячий гриб)"""

    # Здесь происходит загрузка изображений Гумбы для разных миров
    IMAGES = {name: surf for name, surf in
              zip(['normal', 'underground', 'castle', 'underwater'],
                  cut_sheet(load_image("Goomba.png"), 3, 4))}

    def __init__(self, x, y, world):
        self.SMERT_TIME = 5  # Общее время отображения картинки расплющенного Гумбы в кадрах
        self.smert = 0  # Счетчик, показывающий сколько прошло кадров с момента смерти
        # Когда self.smert станет равен self.SMERT_TIME, Гумба будет удален

        self.cur_frame = 0  # Счетчик кадров

        self.frames = Goomba.IMAGES[world]  # Все изображения Гумбы для этого мира
        # 0 и 1 картинка - шаги, 2 - смерть
        self.image = self.frames[self.cur_frame]

        super().__init__(x, y, all_sprites, enemies_group)
        self.vx = -1  # Скорость в пикселях на кадр

    def update(self):
        # Блок кода, отвечающий за задержку для показа соотвествующей картинки перед смертью
        if self.smert:
            self.smert += 1
            if self.smert == self.SMERT_TIME:
                self.kill()
            return

        self.cur_frame = (self.cur_frame + 1) % 60  # Обновление счетчика кадров
        self.image = self.frames[self.cur_frame // 15 % 2]  # Каждые 15 кадров меняем картинку,
        # тем самым создается анимация шагов

        self.update_coords()

        self.check_tile_collisions()
        self.check_enemies_collisions()
        self.sides_group.draw(screen)  # Отрисовка коллизий

    def die(self, rate):
        """rate - множитель очков, выдающихся при убийстве Гумбы. Позволяет делать комбо"""
        self.image = self.frames[2]

        self.smert = max(1, self.smert)  # Запуск счетчика смерти. max нужен,
        # чтобы счетчик не сбрасывался при возможных повторных вызовах метода
        PointsUp(*self.rect.topleft, 200 * rate)  # Создаем высвечивающиеся очки
        hud.add_score(200 * rate)  # Добавляем счет в худ

    def fast_die(self):
        """Метод нужен для убийства черепахой, огненным шаром, движущимся блоком.
        Здесь не особо полезен, просто предоставляет такой же интерфейс, как у Купы"""
        self.die(0.5)
Example #7
0
class FlagPole(pygame.sprite.Sprite):
    """Класс флагштока. Проверкой коллизии занимается Player"""
    image = load_image("flagpole.png")

    def __init__(self, x, y):
        """y - нижняя часть, так удобнее, не нужно помнить высоту флагштока"""
        super().__init__(all_sprites, castle_group)
        self.image = FlagPole.image
        self.rect = self.image.get_rect()
        # Перевод координат из блоков в пиксели.
        self.rect.x, self.rect.y = (x - 1) * PPM, (y - 10) * PPM
        self.flag = Flag(x, y)  # Создаем флажок

    def start(self):
        self.flag.start()
Example #8
0
def main():
    imageSource = 'images/img1original.tif'
    image = load_image(imageSource, type=0)

    gaussian_noise_image = add_gaussian_noise(image.copy(), 0, 300)
    salt_and_peper_noise_image = add_salt_and_pepper_noise(
        image.copy(), 0.04, 0.5)

    figures = []

    figures.append(('Orignal Image', image.copy()))
    figures.append(('Gaussian noise Image', gaussian_noise_image.copy()))
    figures.append(
        ('Salt and Pepper Image', salt_and_peper_noise_image.copy()))

    plot_figures(figures, 1, 3)
Example #9
0
def main():
    img = load_image('images/img1noisy.tif', type=0)

    rows, cols = img.shape
    rows = rows // 2
    cols = cols // 2

    img_left = img[:, :cols + 1]
    img_right = img[:, cols:]

    remove_noise(img_left, 'Left', 3, max_filter)
    remove_noise(img_left, 'Left', 3, min_filter)
    remove_noise(img_left, 'Left', 3, mean_filter)
    remove_noise(img_left, 'Left', 3, median_filter)

    remove_noise(img_right, 'Right', 3, max_filter)
    remove_noise(img_right, 'Right', 3, min_filter)
    remove_noise(img_right, 'Right', 3, mean_filter)
    remove_noise(img_right, 'Right', 3, median_filter)
Example #10
0
class ItemBase(BaseCharacter):
    """Базовый класс для различных бонусов. Бонусы никак не взаимодействуют с врагами."""

    # Загрузка всех изображений и распределение их на группы
    ITEMS = {
        name: surf
        for name, surf in zip(
            ['normal', 'underground', 'castle', 'underwater'],
            cut_sheet(load_image("Items.png"), 19, 4))
    }

    def __init__(self, x, y):
        super().__init__(x, y, all_sprites, items_group)
        self.vx = 5  # Скорость в пикселях на кадр

        # Высота, до котор. нужно поднятся бонусу при появлении из блока, прежде чем начать движение
        self.uprise = self.rect.y - self.rect.h + self.rect.h // 3
        self.create_sides()

    def move(self):
        """Метод, отвечающий анимацию появления бонуса из блока"""
        if self.uprise is not None and self.rect.y > self.uprise:
            self.rect.y -= 1
            if self.rect.y == self.uprise:
                self.uprise = None
            return True

    def update(self):
        # Если бонус еще не до конца появился, то не обновляем координаты в зависимости от скорости
        if self.move():
            return
        self.update_coords()
        self.check_player_collisions()

        vx = self.vx  # Старое направление
        self.check_tile_collisions()
        if vx != self.vx:  # При изменении направления отражаем картинку
            self.image = pygame.transform.flip(self.image, True, False)

        self.sides_group.draw(screen)  # Отрисовка коллизий
Example #11
0
class Flag(pygame.sprite.Sprite):
    """Класс флажка, может опускаться пока не достигнет блока"""
    image = load_image("flag.png")

    def __init__(self, x, y):
        super().__init__(all_sprites, castle_group)
        self.image = Flag.image
        self.rect = self.image.get_rect()
        # Перевод координат из блоков в пиксели. Флажок имеет смещение относительно флагштока
        self.rect.x, self.rect.y = (x - 1.5) * PPM, (y - 9) * PPM
        self.vy = 0

    def update(self):
        """Если скорость не равна 0, то метод опускает флажок, сбрасывает скорость, когда флажок
        коснется блока"""
        self.rect.y += self.vy
        if self.vy and pygame.sprite.spritecollideany(self, tiles_group):
            self.vy = 0

    def start(self):
        """Чтобы заставить флажок опуститься присваеваем ему вертикалькую скорость"""
        self.vy = 10
Example #12
0
def main():
    # sobel in x direction
    sobel_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])
    # sobel in y direction
    sobel_y = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])

    img = load_image('images/two_cats.jpg', type=0)

    # img_dft = compute_dft(img)
    img_dft = np.fft.fft2(img)
    sobelx_filter_dft = np.fft.fft2(sobel_x, s=img.shape)
    sobely_filter_dft = np.fft.fft2(sobel_y, s=img.shape)
    filteredx_img_dft = img_dft * sobelx_filter_dft
    filteredy_img_dft = img_dft * sobely_filter_dft

    filteredx_img_back = np.fft.ifft2(filteredx_img_dft)
    filteredy_img_back = np.fft.ifft2(filteredy_img_dft)
    ans = filteredy_img_back.real + filteredx_img_back.real

    ans = linear_transformation_to_pixel_value_range(ans)

    plot_image(ans, False)
Example #13
0
class Castle(pygame.sprite.Sprite):
    """Класс замка в конце уровня"""
    image = load_image("castle_big.png")
    SMALL_HEIGHT = 4
    BIG_HEIGHT = 10

    def __init__(self, x, y, is_big):
        """y координата - нижняя сторона, т.к. замки имеют разную высоту"""
        super().__init__(all_sprites, castle_group)
        self.image = Castle.image
        self.rect = self.image.get_rect()
        x_off = 4  # Замок слегка сдвинут по x
        if is_big:  # Вычисление верхней строны в зависимости от высоты.
            y -= Castle.BIG_HEIGHT
        else:
            # Маленький замок - это большой, низ которого спрятан под землей :)
            y -= Castle.SMALL_HEIGHT
        # Перевод координат из блоков в пиксели
        self.rect.x, self.rect.y = (x - x_off - 1) * PPM, y * PPM

    def get_centre(self):
        """Возвращает координаты двери"""
        return self.rect.x + 4 * PPM
Example #14
0
 def __init__(self, suit, value):
     pygame.sprite.Sprite.__init__(self)  #call Sprite initializer
     self.suit = suit
     self.value = value
     self.image, self.rect = load_image('images/card-back.jpg', -1)
Example #15
0
class Fire(BaseCharacter):
    """Класс фаерболов, выпусаемых Огненным Марио. Убивают врагов одним выстрелом, взрываются
    при контакте с боком блока, отскакивают от верха, не взаимодействуют с игроком"""
    IMAGES = cut_sheet(load_image("fire.png"), 4,
                       1)[0]  # Загрузка всех изображений фаербола

    # Первое разбивается на 4 маленьких
    FLYING = [col for row in cut_sheet(IMAGES[0], 2, 2) for col in row]
    EXPLODE = IMAGES[1:]

    def __init__(self, x, y, direction):
        """direction зависит от Направления марио"""
        self.cur_frame = 0  # Счетчик кадров
        self.image = Fire.FLYING[self.cur_frame]
        super().__init__(x, y, all_sprites, items_group)
        self.vx = 5 * direction  # Горизонтальная скорость в пикселях на кадр

        self.explosion = False  # Если True воспроизводится анимация взрыва
        self.explosion_time = 0  # Счетчик кадров анимации взрыва
        self.explosion_end = 17  # Общее время анимации взрыва в кадрах

    def update(self):
        self.cur_frame = (self.cur_frame +
                          1) % 60  # Обновление счетчика кадров

        if self.explosion:  # Воспроизведение анимации взрыва
            self.image = Fire.EXPLODE[self.explosion_time // 6]
            self.explosion_time += 1
            if self.explosion_time == self.explosion_end:
                self.kill()
            return

        self.image = Fire.FLYING[self.cur_frame // 15 %
                                 4]  # Каждые 15 кадров обновляем изборажение
        # тем самым достигается анимация вращения в полете

        self.update_coords()  # Обновляем y координату
        self.rect.x += self.vx  # Обновляем x координату
        self.check_tile_collisions()
        self.check_enemies_collisions()

        self.sides_group.draw(screen)  # Отрисовка коллизий

    def check_tile_collisions(self):
        """Изменение направления движения при столкновении с блоком либо запуск взрыва.
        Переопределяет родительский метод check_tile_collisions, т.к. фаербол имеет уникальное
        поведение"""
        self.update_sides()
        for side in [self.left_side, self.right_side]:
            colided_tile = pygame.sprite.spritecollideany(side, tiles_group)
            if colided_tile:
                self.vx = 0
                self.explosion = True
                self.update_sides()
                return

        colided_tile = pygame.sprite.spritecollideany(self.down_side,
                                                      tiles_group)
        if colided_tile:
            self.rect.bottom = colided_tile.rect.y
            self.vy = -self.max_vy
            self.update_sides()

        colided_tile = pygame.sprite.spritecollideany(self.top_side,
                                                      tiles_group)
        if colided_tile:
            self.rect.y = colided_tile.rect.bottom
            self.vy = self.max_vy
            self.update_sides()

    def check_enemies_collisions(self):
        """Быстрое убийство врага при соприкосновении"""
        collided_enemy = pygame.sprite.spritecollideany(self, enemies_group)
        if collided_enemy:
            collided_enemy.fast_die()
            self.explosion = True
Example #16
0
class Koopa(BaseCharacter):
    """Класс Купы (враждебной черепахи). Может скрываться в панцирь, кататься по уровню, убивая
    других врагов и игрока"""

    # Загрузка всех изображений и распределение их на группы.
    # Изображение скрытой в панцирь Купы приходится грузить отдельно, т.к. оно имеет другую высоту
    IMAGES = {
        name: (surf1 + surf2)
        for name, surf1, surf2 in zip(
            ['normal', 'underground', 'castle', 'underwater'],
            cut_sheet(load_image("Koopa.png"), 4, 4),
            cut_sheet(load_image("Koopa_hidden.png"), 2, 4))
    }

    L_KOOPA = {key: images[:2] + images[4:6] for key, images in IMAGES.items()}

    # Зеркальные изображения для другого направления движения
    R_KOOPA = {
        key: [pygame.transform.flip(frame, True, False) for frame in images]
        for key, images in L_KOOPA.items()
    }

    def __init__(self, x, y, world):
        self.world = world
        self.smert = 0  # Счетчик кадров прошедших после того, как игрок наступил на Купу

        self.REVIVAL_TIME = 60 * 6  # Время появление лапок Купы из панциря в кадрах

        self.SMERT_TIME = 60 * 8  # Время выхода Купы из панциря в кадрах
        self.cur_frame = 0  # Счетчик кадров

        self._load_frames()
        self.image = self.frames[self.cur_frame]
        super().__init__(x, y, all_sprites, enemies_group)
        self.vx = -2  # Скорость в пикселях на кард
        self.value = 400  # Количество очков за убийство

    def _load_frames(self):
        """Внутренний метод загрузки кадров"""

        # Все кадры купы для этого мира
        self.l_frames = Koopa.L_KOOPA[self.world]
        self.r_frames = Koopa.R_KOOPA[self.world]
        self.frames = self.l_frames

    def load_image(self, index):
        """Метод загрузки изображений с сохранением координат после изменения высоты изображения"""
        topleft = self.rect.topleft
        self.image = self.frames[index]
        self.rect = self.image.get_rect()
        self.rect.topleft = topleft
        self.update_sides()

    def update(self):
        self.update_coords()
        self.check_tile_collisions()

        # Выбор кадров в зависимости от направления движения
        self.frames = self.l_frames if self.vx < 0 else self.r_frames
        self.check_enemies_collisions()
        self.sides_group.draw(screen)  # Отрисовка колизий

        if self.smert:  # Анимации скрытой Купы, скрытой Купы с лапками, выхода Купы из панциря
            if not self.vx:
                self.smert += 1
                if self.smert == self.REVIVAL_TIME:
                    # скрытая Купа с лапками
                    self.image = self.frames[3]
                elif self.smert == self.SMERT_TIME:
                    self.load_image(self.cur_frame // 15 % 2)
                    # обычная шагающая Купа
                    self.smert = 0
                    self.vx = -2
        else:
            self.cur_frame = (self.cur_frame +
                              1) % 60  # Обновление счетчика кадров
            self.image = self.frames[self.cur_frame // 15 %
                                     2]  # Каждый 15 кадр обновляем картинку,
            # тем самым создается анимация шагов

    def die(self, rate):
        """rate - множитель очков, выдающихся при убийстве Купы. Позволяет делать комбо"""
        if not self.smert:
            # Спрятаться в панцирь и остановиться
            self.load_image(2)
            self.smert = 1
            self.vx = 0
        else:
            if not self.vx:
                # Выбор направления движения катающейся в панцире Купы
                right = (self.rect.x + self.rect.w // 2) > (
                    Map.get_player().rect.x + Map.get_player().rect.w // 2)
                self.vx = 10 if right else (-10)
            else:
                # Окончательное убийство Купы
                PointsUp(*self.rect.topleft, self.value * rate)
                hud.add_score(self.value * rate)
                self.kill()

    def fast_die(self):
        """Метод нужен для убийства черепахой, огненным шаром, движущимся блоком."""
        PointsUp(*self.rect.topleft, self.value // 2)
        hud.add_score(self.value // 2)
        self.kill()

    def check_enemies_collisions(self):
        if self.smert and self.vx:
            # Убийство врагов ездящей Купой
            [
                enemy.die(2) if enemy is not self else None
                for enemy in pygame.sprite.spritecollide(
                    self, enemies_group, False)
            ]
        else:
            # В обычном состоянии Купа меняет направление при столкновении с врагом
            super().check_enemies_collisions()