Assistance with adding a second player to my Pygame :(

Discussion in 'Python' started by Alice Smith, Oct 8, 2020.

  1. Alice Smith

    Alice Smith

    Joined:
    Oct 8, 2020
    Messages:
    1
    Likes Received:
    0
    I am fairly new to Pygame, just started studying it this yezr infact and I was wondering if I could have some assistance with adding a second player to my Pygame program? I have tried a bunch of different things but can't seem to understand how to do it.
    The code displayed below is what I am using for my player Sprite:
    import pygame as pg
    from settings import *
    from random import choice, randrange, uniform
    vec = pg.math.Vector2

    class Spritesheet:
    def __init__(self, filename):
    self.spritesheet = pg.image.load(filename).convert()

    def get_image(self, x, y, width, height):
    image = pg.Surface((width, height))
    image.blit(self.spritesheet, (0, 0), (x, y, width, height))
    image = pg.transform.scale(image, (width // 2, height // 2))
    return image
    #This class is used fot loading and parsing the spritesheet used for this code
    #It also grabs desired images from the Spritesheet

    class Player(pg.sprite.Sprite):
    def __init__(self, game):
    self._layer = PLAYER_LAYER
    self.groups = game.all_sprites
    pg.sprite.Sprite.__init__(self, self.groups)
    self.game = game
    self.walking = False
    self.jumping = False
    self.current_frame = 0
    self.last_update = 0
    self.load_images()
    self.image = self.standing_frames[0]
    self.rect = self.image.get_rect()
    self.rect.center = (40, HEIGHT - 100)
    self.pos = vec(40, HEIGHT - 100)
    self.vel = vec(0, 0)
    self.acc = vec(0, 0)

    def load_images(self):
    self.standing_frames = [self.game.spritesheet.get_image(614, 1063, 120, 191),
    self.game.spritesheet.get_image(690, 406, 120, 201)]
    for frame in self.standing_frames:
    frame.set_colorkey(BLACK)
    self.walk_frames_r = [self.game.spritesheet.get_image(678, 860, 120, 201),
    self.game.spritesheet.get_image(692, 1458, 120, 207)]
    self.walk_frames_l = []
    for frame in self.walk_frames_r:
    frame.set_colorkey(BLACK)
    self.walk_frames_l.append(pg.transform.flip(frame, True, False))
    self.jump_frame = self.game.spritesheet.get_image(382, 763, 150, 181)
    self.jump_frame.set_colorkey(BLACK)

    def jump_cut(self):
    if self.jumping:
    if self.vel.y < -3:
    self.vel.y = -3

    def jump(self):
    # jump only if standing on a platform
    self.rect.y += 2
    hits = pg.sprite.spritecollide(self, self.game.platforms, False)
    self.rect.y -= 2
    if hits and not self.jumping:
    self.jumping = True
    self.vel.y = -PLAYER_JUMP

    def update(self):
    self.animate()
    self.acc = vec(0, PLAYER_GRAV)
    keys = pg.key.get_pressed()
    if keys[pg.K_LEFT]:
    self.acc.x = -PLAYER_ACC
    if keys[pg.K_RIGHT]:
    self.acc.x = PLAYER_ACC

    # apply friction
    self.acc.x += self.vel.x * PLAYER_FRICTION
    # equations of motion
    self.vel += self.acc
    if abs(self.vel.x) < 0.1:
    self.vel.x = 0
    self.pos += self.vel + 0.5 * self.acc
    # wrap around the sides of the screen
    if self.pos.x > WIDTH + self.rect.width / 2:
    self.pos.x = 0 - self.rect.width / 2
    if self.pos.x < 0 - self.rect.width / 2:
    self.pos.x = WIDTH + self.rect.width / 2

    self.rect.midbottom = self.pos

    def animate(self):
    now = pg.time.get_ticks()
    if self.vel.x != 0:
    self.walking = True
    else:
    self.walking = False
    # show walk animation
    if self.walking:
    if now - self.last_update > 180:
    self.last_update = now
    self.current_frame = (self.current_frame + 1) % len(self.walk_frames_l)
    bottom = self.rect.bottom
    if self.vel.x > 0:
    self.image = self.walk_frames_r[self.current_frame]
    else:
    self.image = self.walk_frames_l[self.current_frame]
    self.rect = self.image.get_rect()
    self.rect.bottom = bottom
    # show idle animation
    if not self.jumping and not self.walking:
    if now - self.last_update > 350:
    self.last_update = now
    self.current_frame = (self.current_frame + 1) % len(self.standing_frames)
    bottom = self.rect.bottom
    self.image = self.standing_frames[self.current_frame]
    self.rect = self.image.get_rect()
    self.rect.bottom = bottom
    self.mask = pg.mask.from_surface(self.image)
     
    Alice Smith, Oct 8, 2020
    #1
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.