Pygame代码错误(多人游戏)

2024-05-14 18:51:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近用pygame编写了一个python游戏。基本上,这是一个游戏,你必须收集尽可能多的'力量',如果你比其他球员,你可以'吃'他。然而,当它对第一个玩家有效时,每当第二个玩家得到的比第一个玩家更多时,第一个玩家就消失了。这是我的密码:

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)

有什么粗心的错误吗?感谢您的帮助。你知道吗


Tags: rectimageselfeventaddifpygamelist

热门问题