0

I have been recently writing a python game with pygame. Basically, it is a game in which you have to collect as much 'powerups' as possible, and if you have more than the other player, you can 'eat' him. However, while it works for the first player, whenever the second player gets more than the first, the first one just disappears. Here is my code:

import pygame,sys,random
from pygame.locals import *

class Player(pygame.sprite.Sprite):
    playerscore = 0
    def __init__(self,loc,x,y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(loc)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.movex = 0
        self.movey = 0
        self.walls = None
        allsprites_list.add(self)   

    def update(self):
        self.rect.x += self.movex 
        block_hit_list = pygame.sprite.spritecollide(self, self.walls, False)
        for block in block_hit_list:
            if self.rect.x > 0:
                self.rect.right = block.rect.left
            else:
                self.rect.left = block.rect.right           
        self.rect.y += self.movey
        block_hit_list = pygame.sprite.spritecollide(self, self.walls, False)
        for block in block_hit_list:
            if self.rect.y > 0:
                self.rect.bottom = block.rect.top
            else:
                self.rect.top = block.rect.bottom        
        eatingupdate()
        for player in player_hit_list:
            if self.playerscore > player.playerscore:
                allsprites_list.remove(player)
            elif self.playerscore < player.playerscore:
                allsprites_list.remove(self)     

    def movement(self,event,playertype):
        self.playertype = playertype
        if self.playertype == 1:    
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    self.movex = -10
                elif event.key == pygame.K_RIGHT:
                    self.movex = 10
                elif event.key == pygame.K_UP:
                    self.movey = -10
                elif event.key == pygame.K_DOWN:
                    self.movey = 10
        if self.playertype == 2:
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_a:
                    self.movex = -10
                elif event.key == pygame.K_d:
                    self.movex = 10
                elif event.key == pygame.K_w:
                    self.movey = -10
                elif event.key == pygame.K_s:
                    self.movey = 10

    def winning(self):
        self.image = pygame.image.load('Data/dotl.png')
        player_list.remove(self)

    def losing(self):
        self.image = pygame.image.load('Data/circle.png')
        player_list.add(self)

class Powerup(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('Data/powerup.png')
        self.rect = self.image.get_rect()

def eatingupdate():
    if player1.playerscore > player2.playerscore:
        player2.losing()
        player1.winning()
    elif player2.playerscore > player1.playerscore:
        player1.losing()
        player2.winning()

class Wall(pygame.sprite.Sprite):
    def __init__(self, x, y, width, height):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface([width, height])
        self.image.fill((255,255,255))
        self.rect = self.image.get_rect()
        self.rect.y = y
        self.rect.x = x

pygame.init()

powerup_list = pygame.sprite.Group()
allsprites_list = pygame.sprite.Group()
player_list = pygame.sprite.Group()
wall_list = pygame.sprite.Group()

pygame.mixer.init()                         
pygame.mixer.music.load('Data/song.wav')   
pygame.mixer.music.set_volume(0.7)          
pygame.mixer.music.play(-1) 

player1 = Player('Data/circle.png',1390,430)
player1.walls = wall_list
player2 = Player('Data/circle.png',20,430)
player2.walls = wall_list

clock = pygame.time.Clock()

background_img = pygame.image.load('Data/background.jpg')
size = background_img.get_size()
pygame.display.set_caption('The TROLL Game')  
display = pygame.display.set_mode(size)

clock = pygame.time.Clock()

wall = Wall(0, 0, 10, 900)
wall_list.add(wall)
allsprites_list.add(wall)

wall = Wall(10, 0, 1440, 10)
wall_list.add(wall)
allsprites_list.add(wall)

wall = Wall(1430,0,10,900)
wall_list.add(wall)
allsprites_list.add(wall)

wall = Wall(0,845,1440,10)
wall_list.add(wall)
allsprites_list.add(wall)

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        player1.movement(event,1)
        player2.movement(event,2)

    powerupadd = 5

    if len(powerup_list) > 10:
        powerupadd = 0
    else:
        powerupadd += 1

    for i in range(powerup):
        powerup = Powerup()
        powerup.rect.x = random.randrange(background_img.get_width())
        powerup.rect.y = random.randrange(background_img.get_height())
        powerup_list.add(powerup)
        allsprites_list.add(powerup)
        powerupadd -= 1

    poweruphit_list1 = pygame.sprite.spritecollide(player1,powerup_list,True)
    powerup_list2 = pygame.sprite.spritecollide(player2,powerup_list,True)
    player_hit_list = pygame.sprite.spritecollide(player1 or player2,player_list, False)

    for powerup in poweruphit_list1:
        player1.playerscore += 1

    for powerup in poweruphit_list2:
        player2.playerscore += 1

    player1.update()
    player2.update()

    display.blit(background_img,(0,0))

    allsprites_list.draw(display)

    pygame.display.update()
    clock.tick(60)

Are there any careless mistakes? Any help is appreciated.

DJMcMayhem
  • 7,285
  • 4
  • 41
  • 61
Jamie Lin
  • 61
  • 2
  • if player disappears so it has to be removed somewhere - so first check all places where you remove player. Add `print()` to see what is going on in code. – furas Jan 28 '16 at 01:38
  • Welcome to StackOverflow. Please read and follow the posting guidelines in the help documentation. [Minimal, complete, verifiable example](http://stackoverflow.com/help/mcve) applies here. We cannot effectively help you until you post your *minimal* code and accurately describe the problem. At least show a trace of output. – Prune Jan 28 '16 at 01:39

0 Answers0