Esempio n. 1
0
 def __init__(self, sprite, columns, rows, image, projectile_animation=[]):
     self.sprite = sprite
     self.columns = columns
     self.rows = rows
     self.draw_projectile = True
     self.image = image
     self.frame = sprite_sheet.SpriteSheet(sprite, columns, rows)
     self.projectile_animation = projectile_animation
     self.count = -1
Esempio n. 2
0
class Mob(Abstract):
    def __init__(self, walk_left, walk_right, (x, y), image, columns, rows,
                 end, hitbox):
        Abstract.__init__(self, walk_left, walk_right, (x, y), image, columns,
                          rows)
        self.end = end
        self.hitbox = hitbox
        self.frame = sprite_sheet.SpriteSheet(image, columns, rows, True)
        self.path = [x, self.end]
        self.walk_count = 0
        self.velocity = 3
        self.health = 10
        self.X = x
        self.Y = y
Esempio n. 3
0
class Player(Abstract):
    def __init__(self, walk_left, walk_right, idle, (x, y), width, force, velocity, image, columns, rows, hitbox, scale2x):
        Abstract.__init__(self, walk_left, walk_right, (x, y), image, columns, rows)
        self.width = width
        self.idle = idle
        self.force = force
        self.velocity = velocity
        self.left = False
        self.right = False
        self.walk_count = 0
        self.is_jumping = False
        self.jump_count = 10
        self.hitbox = hitbox
        self.frame = sprite_sheet.SpriteSheet(image, columns, rows, scale2x)
        self.health = 10
        self.X = self.x
        self.Y = self.y
Esempio n. 4
0
 def load_sprites(self, sprite_file):
     # load character animation frames
     self.character_sheet = \
         sprite_sheet.SpriteSheet(sprite_file)
     self.move_right_frames = self.character_sheet.load_strip(
         pygame.Rect((0, 0), self.size), 8, -1)
     self.frame_count = len(self.move_right_frames)
     self.move_left_frames = [
         pygame.transform.flip(sprite, True, False)
         for sprite in self.move_right_frames
     ]
     self.standing_left_frame = self.move_left_frames[self.STANDING_FRAME]
     self.standing_right_frame = self.move_right_frames[self.STANDING_FRAME]
     self.move_vertical_left_frames = [self.standing_left_frame]\
                                      * self.frame_count
     self.move_vertical_right_frames = [self.standing_right_frame]\
                                       * self.frame_count
    def start(self):
        pygame.mixer.pre_init(44100, -16, 2, 2048)
        pygame.mixer.init()
        pygame.init()
        pygame.font.init()

        myfont = pygame.font.SysFont('Comic Sans MS', 30)

        character_selection_text = myfont.render('Choose your character:',
                                                 True, (0, 0, 0))
        projectile_selection_text = myfont.render('Choose your projectile:',
                                                  True, (0, 0, 0))

        SCREEN_WIDTH = 350
        SCREEN_HEIGHT = 420

        bg = pygame.image.load('images/background/background_submenu.jpg')

        saitama = pygame.Rect(102, 140, 66, 96)
        goku = pygame.Rect(180, 150, 62, 69)

        arrow = pygame.Rect(50, 365, 117, 20)
        fire_ball = pygame.Rect(192, 363, 54, 20)

        saitama_image = ss.SpriteSheet('images/sprites/Saitama.png', 3, 4)
        goku_image = ss.SpriteSheet('images/sprites/Goku.png', 18, 6)

        arrow_image = ss.SpriteSheet('images/sprites/arrow.png', 3, 1)
        fire_image = ss.SpriteSheet('images/sprites/fire_ball.png', 8, 8)

        pygame.display.set_caption('Character selection')
        screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
        run = True

        while run:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()

            mpos = pygame.mouse.get_pos()

            screen.blit(bg, (0, 0))

            screen.blit(character_selection_text, (40, 75))

            saitama_image.draw(screen, 1, (80, 130))

            if pygame.mouse.get_pressed()[0] and saitama.collidepoint(
                    pygame.mouse.get_pos()):
                self.character_index = 0

            goku_image.draw(screen, 27, (160, 130))

            if pygame.mouse.get_pressed()[0] and goku.collidepoint(
                    pygame.mouse.get_pos()):
                self.character_index = 1

            screen.blit(projectile_selection_text, (40, 270))

            arrow_image.draw(screen, 1, (50, 360))

            if pygame.mouse.get_pressed()[0] and arrow.collidepoint(
                    pygame.mouse.get_pos()):
                self.projectile_index = 0

            fire_image.draw(screen, 1, (190, 343))

            if pygame.mouse.get_pressed()[0] and fire_ball.collidepoint(
                    pygame.mouse.get_pos()):
                self.projectile_index = 1

            if self.character_index == 0:
                pygame.draw.rect(screen, (0, 0, 0), saitama, 2)
            elif self.character_index == 1:
                pygame.draw.rect(screen, (0, 0, 0), goku, 2)

            if self.projectile_index == 0:
                pygame.draw.rect(screen, (0, 0, 0), arrow, 2)
            elif self.projectile_index == 1:
                pygame.draw.rect(screen, (0, 0, 0), fire_ball, 2)

            pygame.display.update()

            if self.projectile_index != -1 and self.character_index != -1:
                run = False
Esempio n. 6
0
    def __init__(self, world, name, sprite_file, size, run_speed=2):
        self.world = world  # link back to the world game state
        self.name = name  # for debugging only, right now
        # load character animation frames
        self.character_sheet = \
            sprite_sheet.SpriteSheet('assets/' + sprite_file)
        self.run_right_frames = self.character_sheet.load_strip(
            pygame.Rect(0, 0, size[X], size[Y]), 8, -1)

        # self.run_right_frames = self.character_sheet.load_block_of_8(0, 0, -1)
        self.run_left_frames = [
            pygame.transform.flip(sprite, True, False)
            for sprite in self.run_right_frames
        ]
        self.jump_right_frames = self.character_sheet.load_block_of_8(
            0, 152, -1)
        self.jump_left_frames = [
            pygame.transform.flip(sprite, True, False)
            for sprite in self.jump_right_frames
        ]
        self.die_right_frames = self.character_sheet.load_block_of_8(
            144, 0, -1)
        self.die_left_frames = [
            pygame.transform.flip(sprite, True, False)
            for sprite in self.die_right_frames
        ]
        self.moving = False
        self.flying = False
        self.take_off = False
        self.state = STANDING
        self.facing_right = True
        self.momentum = [0.0, 0.0]
        # location is the rectangle used to draw the sprite
        # position is a float version of the x,y pixel coords
        # used to provide smooth movement
        self.position = [0.0, 0.0]
        self.location = pygame.Rect(0, 0, size[X], size[Y])
        # TODO different collider heights for different characters
        self.collider = pygame.Rect(0, 0, size[X], size[Y])
        self.ground_proximity = \
            pygame.Rect(0, 0, size[X], size[Y])
        self.frame_number = 0
        self.frame_count = len(self.run_right_frames)
        self.jumping = False
        self.run_speed = run_speed
        self.speaking = False
        self.speech = None
        self.speech_bubble_fg = (0, 0, 0)
        self.speech_bubble_bg = (0, 0, 0)
        self.speech_bubble_size = [0, 0]
        self.text = []
        self.text_size = [0, 0]
        self.jets = []  # the particle streams that appear when flying
        # create 2 jets, 1 for each leg
        # the origin coordinates are just zero,
        # since they will be set each frame
        for j in range(2):
            self.jets.append(
                Jet(
                    self.world,  # link back to the game world
                    (0, 0),  # dummy start position
                    (0, 1),  # initial velocity vector
                ))
        self.wobble = []  # random drift when hovering
        rx = 4
        ry = 2
        for i in range(32):
            x = i / 2 - 8  #rx * math.cos(i*2*math.pi/32)
            y = ry * math.sin(i * 2 * math.pi / 32) - ry - 2
            self.wobble.append((x, y))
        for i in range(31, -1, -1):
            x = i / 2 - 8  #rx * math.cos(i*2*math.pi/32)
            y = -ry * math.sin(i * 2 * math.pi / 32) - ry - 2
            self.wobble.append((0, 0))
            #self.wobble.append((x, y))
        self.wobble_counter = 0
        self.take_off_animation = []  # take off animation sequence
        for i in range(32):
            self.take_off_animation.append((0, 0))
Esempio n. 7
0
    def __init__(self):
        pg.init()
        self._running = True
        self.clock = pg.time.Clock()
        self.width, self.height = WINDOW_WIDTH, WINDOW_HEIGHT
        self.size = (self.width, self.height)
        self._display_surf = pg.display.set_mode(self.size)
        self.spriter = sprite_sheet.SpriteSheet(
            os.path.join("resources", "sprites-edited.png"))
        try:
            with open(os.path.join("resources", "highscore"), 'r') as f:
                self.highscore = int(f.readline())
        except:
            self.highscore = 0
        self.background = pg.Surface(BACKGROUND_SPRITE_SIZE)
        self.background.blit(
            self.spriter.image_at(
                pg.Rect(BACKGROUND_SPRITE_LOCATION, BACKGROUND_SPRITE_SIZE)),
            (0, 0))
        self.background = pg.transform.scale(self.background,
                                             (WINDOW_WIDTH, WINDOW_HEIGHT))

        foreground = pg.transform.scale(
            self.spriter.image_at(
                pg.Rect(FOREGROUND_SPRITE_LOCATION, FOREGROUND_SPRITE_SIZE)),
            FOREGROUND_FINAL_SIZE)
        doubledForeground = pg.Surface(
            (2 * WINDOW_WIDTH, int(WINDOW_HEIGHT / 4)))
        doubledForeground.blit(foreground, (0, 0))
        doubledForeground.blit(foreground, (WINDOW_WIDTH, 0))
        self.foreground_group = pg.sprite.Group(
            Foreground(doubledForeground,
                       (2 * WINDOW_WIDTH, int(WINDOW_HEIGHT / 4))))

        bird_rects_initial = [
            pg.Rect(BIRD_SPRITE_LOCATION_1, BIRD_SPRITE_SIZE),
            pg.Rect(BIRD_SPRITE_LOCATION_2, BIRD_SPRITE_SIZE),
            pg.Rect(BIRD_SPRITE_LOCATION_3, BIRD_SPRITE_SIZE)
        ]
        bird_images = [
            pg.transform.scale(image, BIRD_FULL_SIZE)
            for image in self.spriter.images_at(bird_rects_initial,
                                                colorkey=-1)
        ]
        self.bird = Bird(bird_images, self)
        self.bird_group = pg.sprite.Group(self.bird)

        self.pipe_group = pg.sprite.Group()

        self.up_pipe_image = pg.transform.scale(
            self.spriter.image_at(pg.Rect(83, 324, 28, 160), -1), PIPE_SIZE)
        self.down_pipe_image = pg.transform.scale(
            self.spriter.image_at(pg.Rect(55, 324, 28, 160), -1), PIPE_SIZE)
        self.score_images = []
        self.score_images.append(
            pg.transform.scale(
                self.spriter.image_at(
                    pg.Rect(494, 60, NUMBER_SPRITE_WIDTH,
                            NUMBER_SPRITE_HEIGHT), -1), NUMBER_FINAL_SIZE))
        self.score_images.append(
            pg.transform.scale(
                self.spriter.image_at(pg.Rect(135, 455, 9, 18), -1), (30, 60)))
        self.score_images.append(
            pg.transform.scale(
                self.spriter.image_at(
                    pg.Rect(290, 160, NUMBER_SPRITE_WIDTH,
                            NUMBER_SPRITE_HEIGHT), -1), NUMBER_FINAL_SIZE))
        self.score_images.append(
            pg.transform.scale(
                self.spriter.image_at(
                    pg.Rect(304, 160, NUMBER_SPRITE_WIDTH,
                            NUMBER_SPRITE_HEIGHT), -1), NUMBER_FINAL_SIZE))
        self.score_images.append(
            pg.transform.scale(
                self.spriter.image_at(
                    pg.Rect(318, 160, NUMBER_SPRITE_WIDTH,
                            NUMBER_SPRITE_HEIGHT), -1), NUMBER_FINAL_SIZE))
        self.score_images.append(
            pg.transform.scale(
                self.spriter.image_at(
                    pg.Rect(332, 160, NUMBER_SPRITE_WIDTH,
                            NUMBER_SPRITE_HEIGHT), -1), NUMBER_FINAL_SIZE))
        self.score_images.append(
            pg.transform.scale(
                self.spriter.image_at(
                    pg.Rect(290, 184, NUMBER_SPRITE_WIDTH,
                            NUMBER_SPRITE_HEIGHT), -1), NUMBER_FINAL_SIZE))
        self.score_images.append(
            pg.transform.scale(
                self.spriter.image_at(
                    pg.Rect(304, 184, NUMBER_SPRITE_WIDTH,
                            NUMBER_SPRITE_HEIGHT), -1), NUMBER_FINAL_SIZE))
        self.score_images.append(
            pg.transform.scale(
                self.spriter.image_at(
                    pg.Rect(318, 184, NUMBER_SPRITE_WIDTH,
                            NUMBER_SPRITE_HEIGHT), -1), NUMBER_FINAL_SIZE))
        self.score_images.append(
            pg.transform.scale(
                self.spriter.image_at(
                    pg.Rect(332, 184, NUMBER_SPRITE_WIDTH,
                            NUMBER_SPRITE_HEIGHT), -1), NUMBER_FINAL_SIZE))

        self.score_images_small = []
        for number in self.score_images:
            self.score_images_small.append(
                pg.transform.scale(number, NUMBER_FINAL_SIZE_SMALL))

        self.gameover_text = pg.transform.scale(
            self.spriter.image_at(pg.Rect(395, 58, 96, 30), -1),
            GAMEOVER_TEXT_SIZE)
        self.final_score_area = pg.transform.chop(
            pg.transform.scale(
                self.spriter.image_at(pg.Rect(2, 258, 114, 60), -1),
                (228, 120)), pg.Rect(24, 0, 138, 0))
        self.new_sprite = pg.transform.scale(
            self.spriter.image_at(pg.Rect(110, 500, 18, 12), -1), (30, 19))
        self.get_ready = pg.transform.scale(
            self.spriter.image_at(pg.Rect(292, 58, 96, 30), -1),
            GAMEOVER_TEXT_SIZE)

        self.restart()