Python Pygame游戏导致分割错误(Pygame降落伞)

Python Pygame游戏导致分割错误(Pygame降落伞),python,pygame,fault,Python,Pygame,Fault,如果您玩游戏并赢了,单击屏幕将使游戏再次玩。在第二次游戏中,游戏分割在一两秒钟后出现错误 这段代码是一个编码类的介绍,其他许多人已经成功地编写了这个游戏。我不明白这里有什么问题 救命啊 导入系统 导入操作系统 导入pygame 随机输入 输入数学 #屏幕的静态位置 os.environ['SDL\u VIDEO\u CENTERED']=“1” #常数 黑色=(0,0,0) 白色=(255,255,255) 船宽=13 船舶高度=13 尺寸=宽度,高度=920570 顶部缓冲区=50 药丸高度=

如果您玩游戏并赢了,单击屏幕将使游戏再次玩。在第二次游戏中,游戏分割在一两秒钟后出现错误

这段代码是一个编码类的介绍,其他许多人已经成功地编写了这个游戏。我不明白这里有什么问题

救命啊

导入系统 导入操作系统 导入pygame 随机输入 输入数学 #屏幕的静态位置 os.environ['SDL\u VIDEO\u CENTERED']=“1” #常数 黑色=(0,0,0) 白色=(255,255,255) 船宽=13 船舶高度=13 尺寸=宽度,高度=920570 顶部缓冲区=50 药丸高度=30 药丸宽度=10 黄色=(157、185、45) 红色=(185,45,45) 蓝色=(45115185) 绿色=(5,94,16) #运行导入的模块 pygame.init() 类文本: 定义初始化(自身、大小、文本、颜色、xpos、YPO): self.font=pygame.font.SysFont(“不列颠粗体”,大小) self.image=self.font.render(文本,1,颜色) self.rect=self.image.get_rect() self.rect=self.rect.move(xpos、ypos) 等级船(pygame.sprite.sprite): 定义初始(自、x、y、侧): pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我) self.density=船舶高度*船舶宽度 自身速度=10 self.image=pygame.Surface((math.sqrt(self.density)、math.sqrt(self.density))).convert() self.rect=self.image.get_rect() self.rect=self.rect.move(x,y) self.type=侧面 self.score=文本(30,str(self.density-169),黑色,宽/4,高/17) self.score_2=文本(30,str(self.density-169),黑色,宽度*.75,高度/17) def更新(自我,药丸组): key=pygame.key.get_pressed() 如果self.type==“left”: 如果键[pygame.K_w]: 自校正y-=自校正速度 如果键[pygame.K_s]: 自校正y+=自校正速度 如果键[pygame.K_a]: self.rect.x-=自速度 如果键[pygame.K_d]: self.rect.x+=自速度 如果self.type==“left”: #边界条件 如果self.rect.right>宽度/2: self.rect.right=宽度/2 如果self.rect.left<0: self.rect.left=0 如果self.rect.top<50: self.rect.top=50 如果self.rect.bottom>570: self.rect.bottom=570 elif self.type==“right”: 如果键[pygame.K_UP]: 自校正y-=自校正速度 如果键[pygame.K_DOWN]: 自校正y+=自校正速度 如果键[pygame.K_左]: self.rect.x-=自速度 如果键[pygame.K_RIGHT]: self.rect.x+=自速度 #船舶2边界条件 如果self.rect.right>宽度: self.rect.right=宽度 如果self.rect.top高度: self.rect.bottom=高度 collisions=pygame.sprite.spritecollide(self,pill_组,True) 对于碰撞中的p: 自密度+=p密度*50 打印(自密度) self.score.image=self.score.font.render(str(self.density-169),1,黑色) self.score_2.image=self.score.font.render(str(self.density),1,黑色) ##如果自密度>500: ##self.play==False self.rect.width=self.rect.height=math.sqrt(self.density) self.image=pygame.transform.scale(self.image,(self.rect.width,self.rect.height)) 职业药丸(pygame.sprite.sprite): 定义初始值(自身、XPO、密度): pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我) 自密度=密度 自身速度=3 self.image=pygame.Surface((药丸宽度,药丸高度)).convert() self.image.fill(self.set_color()) self.rect=pygame.rect(xpos,-PILL_高度,10,30) self.rect=self.image.get_rect() self.rect=self.rect.move(xpos,高度/15) def设置颜色(自身): 如果self.density==1: 返回黄色 elif self.density==2: 返回红色 elif self.density==3: 返回蓝色 elif self.density==4: 返青 def更新(自我): 自校正y+=自校正速度 如果自校正y>高度: self.kill() def main(): #初始化本地变量 尺寸=宽度,高度=920570 fps=30 LeftWins=文本(30,“左船赢!”,黑色,宽/2.5,高/2) RightWins=文本(30,“右船获胜!”,黑色,宽/2.5,高/2) 获胜者=文本(30,“单击此处再次播放”,黑色,宽/2.6,高*.75) pygame.display.set_标题('Density')) screen=pygame.display.set_模式(大小,pygame.SRCALPHA) clock=pygame.time.clock() 播放=正确 循环计数器=0 垂直=pygame.Surface((1,高度-顶部缓冲区)).convert() 水平=pygame.Surface((宽度,1)).convert() #创建游戏对象 船舶左=船舶(宽度/4-船舶宽度/2,高度-(4*船舶高度),“左”) 船右=船((宽度*3)/4-船宽/2,高度-(4*船高),“右”) #创建组 ship_group=pygame.sprite.group() ship_组。添加(ship_左、ship_右) pill_group=pygame.sprite.group() #播放=正确 outro=真 尽管如此: #游戏性 游戏时: 对于pygame.event.get()中的事件: 如果event.type==pygame.QUIT:sys.exit() 如果循环计数器%10==0: pill=pill(random.randrange(0,(宽度/2)-pill_宽度),int(random.choice('11111111111111 222 334')) pill2=Pill(random.randrange((宽度/2)+Pill_宽度,宽度-Pill_宽度),int(random.choice('11111111111111111 222 334'))
import sys
import os
import pygame
import random
import math


#Force static position of screen
os.environ ['SDL_VIDEO_CENTERED'] = '1'

#constants
BLACK = (0,0,0)
WHITE = (255, 255, 255)
SHIP_WIDTH = 13
SHIP_HEIGHT = 13
SIZE = WIDTH, HEIGHT = 920, 570
TOP_BUFFER = 50
PILL_HEIGHT = 30
PILL_WIDTH = 10
YELLOW = (157, 185, 45)
RED = (185, 45, 45)
BLUE = (45, 115, 185)
GREEN = (5, 94, 16)

#Runs imported module
pygame.init()


class Text:
    def __init__(self, size, text, color, xpos, ypos):
        self.font = pygame.font.SysFont("Britannic Bold", size)
        self.image = self.font.render(text, 1, color)
        self.rect = self.image.get_rect()
        self.rect = self.rect.move(xpos, ypos)

class Ship(pygame.sprite.Sprite):
    def __init__ (self, x, y, side):
        pygame.sprite.Sprite.__init__(self)
        self.density = SHIP_HEIGHT * SHIP_WIDTH
        self.speed = 10
        self.image = pygame.Surface((math.sqrt(self.density), math.sqrt(self.density))).convert()
        self.rect = self.image.get_rect()
        self.rect = self.rect.move(x, y)
        self.type = side
        self.score = Text(30, str(self.density - 169), BLACK, WIDTH / 4 , HEIGHT/ 17)
        self.score_2 = Text(30, str(self.density - 169), BLACK, WIDTH * .75, HEIGHT / 17)

    def update(self, pill_group):
        key = pygame.key.get_pressed()

        if self.type == "left":
            if key[pygame.K_w]:
                self.rect.y -= self.speed
            if key[pygame.K_s]:
                self.rect.y += self.speed
            if key[pygame.K_a]:
                self.rect.x -= self.speed
            if key[pygame.K_d]:
                self.rect.x += self.speed

        if self.type == "left":
            #Boundary Conditions
            if self.rect.right > WIDTH/2:
                self.rect.right = WIDTH/2
            if self.rect.left < 0:
                self.rect.left = 0
            if self.rect.top < 50:
                self.rect.top = 50
            if self.rect.bottom > 570:
                self.rect.bottom = 570


        elif self.type == "right":
            if key[pygame.K_UP]:
                self.rect.y -= self.speed
            if key[pygame.K_DOWN]:
                self.rect.y += self.speed
            if key[pygame.K_LEFT]:
                self.rect.x -= self.speed
            if key[pygame.K_RIGHT]:
                self.rect.x += self.speed

                # Ship 2 boundary conditions
            if self.rect.right > WIDTH:
                self.rect.right = WIDTH
            if self.rect.top < TOP_BUFFER:
                self.rect.top = TOP_BUFFER
            if self.rect.left < WIDTH/2:
                self.rect.left = WIDTH/2
            if self.rect.bottom > HEIGHT:
               self.rect.bottom = HEIGHT

        collisions = pygame.sprite.spritecollide(self, pill_group, True)
        for p in collisions:
            self.density += p.density * 50
            print(self.density)

            self.score.image = self.score.font.render(str(self.density - 169), 1, BLACK)
            self.score_2.image = self.score.font.render(str(self.density), 1, BLACK)

            ##if self.density > 500:
               ##self.play == False


        self.rect.width = self.rect.height = math.sqrt(self.density)
        self.image = pygame.transform.scale(self.image, (self.rect.width, self.rect.height))


class Pill(pygame.sprite.Sprite):
    def __init__(self, xpos, density):
        pygame.sprite.Sprite.__init__(self)
        self.density = density
        self.speed = 3
        self.image = pygame.Surface((PILL_WIDTH, PILL_HEIGHT)).convert()
        self.image.fill(self.set_color())
        self.rect = pygame.Rect(xpos, -PILL_HEIGHT, 10, 30)
        self.rect = self.image.get_rect()
        self.rect = self.rect.move(xpos, HEIGHT/15)

    def set_color(self):
        if self.density == 1:
            return YELLOW
        elif self.density == 2:
            return RED
        elif self.density == 3:
            return BLUE
        elif self.density == 4:
            return GREEN

    def update(self):
        self.rect.y += self.speed

        if self.rect.y > HEIGHT:
            self.kill()


def main():
    #Initialize Local Vars
    size = width, height = 920, 570
    fps = 30
    LeftWins = Text(30, "Left Ship Wins!", BLACK, WIDTH / 2.5, HEIGHT / 2)
    RightWins = Text(30, "Right Ship Wins!", BLACK, WIDTH / 2.5, HEIGHT / 2)
    Winner = Text (30, "Click here to play again", BLACK, WIDTH / 2.6, HEIGHT * .75)
    pygame.display.set_caption('Density')
    screen = pygame.display.set_mode(SIZE, pygame.SRCALPHA)
    clock = pygame.time.Clock()
    play = True
    loop_counter = 0



    vertical = pygame.Surface((1, HEIGHT - TOP_BUFFER)).convert()
    horizontal = pygame.Surface((WIDTH, 1)).convert()


    #Create Game Objects
    ship_left = Ship(WIDTH/4 - SHIP_WIDTH/2, HEIGHT - (4 * SHIP_HEIGHT), "left")
    ship_right = Ship((WIDTH * 3) / 4 - SHIP_WIDTH / 2, HEIGHT - (4 * SHIP_HEIGHT), "right")

    #Create Groups
    ship_group = pygame.sprite.Group()
    ship_group.add(ship_left, ship_right)
    pill_group = pygame.sprite.Group()

    #play = True
    outro = True


    while True:
            #Gameplay
        while play:

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

            if loop_counter % 10 == 0:
                pill = Pill(random.randrange(0, (WIDTH/2) - PILL_WIDTH), int(random.choice('1111111111111111111122222334')))
                pill2 = Pill(random.randrange((WIDTH/2) + PILL_WIDTH, WIDTH - PILL_WIDTH), int(random.choice('1111111111111111111122222334')))
                pill_group.add(pill)
                pill_group.add(pill2)

            #Update Groups
            ship_group.update(pill_group)
            pill_group.update()

            #Draw/Blit Groups
            screen.fill(WHITE)
            screen.blit(ship_left.score.image, ship_left.score.rect)
            screen.blit(ship_right.score_2.image, ship_right.score_2.rect)
            ship_group.draw(screen)
            pill_group.draw(screen)
            screen.blit(vertical, (WIDTH/2, TOP_BUFFER))
            screen.blit(horizontal, (0, TOP_BUFFER))

            #60 / second one pill / 10 iterations
            loop_counter += 1

            #Limits frames per iteration of while loop
            clock.tick(60)
            # Writes to main surface
            pygame.display.flip()

            if (ship_left.density >= 500 or ship_right.density >= 500):
                play = False

        while outro:
            for event in pygame.event.get():
                if event.type == pygame.QUIT: sys.exit()
                if event.type == pygame.MOUSEBUTTONDOWN or pygame.key.get_pressed()[pygame.K_RETURN != 0]:
                    outro = False
                    play = True
                    ship_left.density = 0
                    ship_right.density = 0
                    for p in pill_group:
                        p.kill()
                    ship_left = Ship(WIDTH / 4 - SHIP_WIDTH / 2, HEIGHT - (4 * SHIP_HEIGHT), "left")
                    ship_right = Ship((WIDTH * 3) / 4 - SHIP_WIDTH / 2, HEIGHT - (4 * SHIP_HEIGHT), "right")
                    screen.blit(ship_left.image, ship_left.rect)
                    screen.blit(ship_right.image, ship_right.rect)

            #Draw/Blit Groups
            screen.fill(WHITE)

            if (ship_left.density >= 500):
                screen.blit(LeftWins.image, LeftWins.rect)
                screen.blit(Winner.image, Winner.rect)

            if (ship_right.density >= 500):
                screen.blit(RightWins.image, RightWins.rect)
                screen.blit(Winner.image, Winner.rect)

            #Limits frames per iteration of while loop
            clock.tick(60)

            # Writes to main surface
            pygame.display.flip()


if __name__ == "__main__":

    main()
def main():
    # The setup code from here ...
    while True:
        # Goes here

            #Gameplay
        while play:
            # The Gameplay code

        while outro:
            for event in pygame.event.get():
                if event.type == pygame.QUIT: sys.exit()
                if event.type == pygame.MOUSEBUTTONDOWN or pygame.key.get_pressed()[pygame.K_RETURN != 0]:
                    outro = False

            #Draw/Blit Groups
            screen.fill(WHITE)
            # The reset of outro