微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame 从游戏结束的地方开始

如何解决Pygame 从游戏结束的地方开始

游戏结束后,当我再次开始游戏时,它从相同的位置开始。 按 Backspace 退出推送模式(这样您也可以向上移动和向下移动)。

import pygame,sys


WIDTH,HEIGHT = 800,600
pygame.init()
win = pygame.display.set_mode((WIDTH,HEIGHT))
clock = pygame.time.Clock()
game_over = False



# Player Class


class Player:


    def __init__(self,x,y):
        self.x = int(x)
        self.y = int(y)
        self.rect = pygame.Rect(self.x,self.y,32,32)
        self.color = (250,120,60)
        self.velX = 0
        self.velY = 0
        self.left_pressed = False
        self.right_pressed = False
        self.up_pressed = False
        self.down_pressed = False
        self.speed = 6

        self.trail = []

        self.running = False


    def  main(self):
        self.update()
        self.check_collisons()
        self.draw()
        sparc.main()
       
    def draw(self):
        global win
        pygame.draw.rect(win,self.color,self.rect)
        
        pygame.draw.rect(win,(sparc.color),sparc.Rect)



    def check_collisons(self):
        if self.x >= 760:
            self.x = 760
        elif self.x <= 0 :
            self.x = 0
        if self.y >=570:
            self.y = 570
        elif self.y<=0:
            self.y = 0

    def update(self):
        self.velX = 0
        self.velY = 0

        if self.left_pressed and not self.right_pressed:
            self.velX = -self.speed
        if self.right_pressed and not self.left_pressed:
                self.velX = self.speed
        if self.up_pressed and not self.down_pressed :
             self.velY = -self.speed
        if self.down_pressed and not self.up_pressed :
            self.velY = self.speed

        self.x += self.velX
        self.y += self.velY

        self.rect = pygame.Rect(self.x,32)
        pos = self.rect.midbottom
        if self.trail:
            if self.trail[-1] != pos:
                self.trail.append(pos)
        else:
            self.trail = [pos,pos]

    def push(self):
        global win,player,game_over
        game_over = False
        win.fill((255,255,0))
        self.y = 570

        while self.running == False and game_over==False:


            for event in  pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        self.left_pressed = True
                    if event.key==pygame.K_RIGHT:
                        self.right_pressed = True
                    if event.key == pygame.K_BACKSPACE:
                        self.running = True
                        main_game()

                if event.type == pygame.KEYUP:
                    if event.key == pygame.K_LEFT:
                        player.left_pressed = False
                    if event.key == pygame.K_RIGHT:
                        player.right_pressed = False


            win.fill((12,24,36))

            player.main()
            pygame.draw.lines(win,(player.color),False,player.trail,2)




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






class Sparc:
    def __init__(self):
        self.x = WIDTH-40
        self.y = HEIGHT-40
        self.color = (255,255)
        self.Rect = pygame.Rect(self.x,30,30)
        self.velx = 2
        self.vely = 3




    def move(self):
        if self.Rect.y==HEIGHT-40:
            self.Rect.x -= self.velx
        if self.Rect.x<=5:
            self.Rect.x = 5
            self.Rect.y -=self.vely
        if self.Rect.y<=5:
            self.Rect.y = 5
            self.Rect.x +=self.velx
        if self.Rect.x>=WIDTH-40:
            self.Rect.x = WIDTH-40
            self.Rect.y+= self.vely







    def check_collisons(self):
        if self.Rect.colliderect(player.rect):
            you_lost()
    def main(self):

        self.check_collisons()
        self.move()





player = Player(WIDTH / 2,570)
sparc = Sparc()


def main_game():

    while player.running==  True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:

                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    player.left_pressed = True
                if event.key == pygame.K_RIGHT:
                    player.right_pressed = True
                if event.key == pygame.K_UP:
                     player.up_pressed = True
                if event.key == pygame.K_DOWN:
                    player.down_pressed = True
                if player.y >= 560:
                    if event.key == pygame.K_BACKSPACE:
                        player.running = False
                        player.push()
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT:
                    player.left_pressed = False
                if event.key == pygame.K_RIGHT:
                    player.right_pressed = False
                if event.key == pygame.K_UP:
                    player.up_pressed = False
                if event.key == pygame.K_DOWN:
                    player.down_pressed = False
        win.fill((12,36))
        player.main()
        pygame.draw.lines(win,2)
        clock.tick(60)
        pygame.display.flip()


def you_lost():
    global game_over
    game_over = True
    while game_over == True:
        win.fill((120,36))
        font = pygame.font.Font('freesansbold.ttf',32)
        text = font.render('GAME OVER',True,((255,100,0)))
        textRect = text.get_rect()
        textRect.center = (WIDTH // 2,HEIGHT// 2)
        win.blit(text,textRect)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                     pass

                    

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


player.push()

有什么办法可以重启吗? 当我按回车键时,游戏结束后一切都会重新启动。 我正在尝试构建这样的东西 - https://drive.google.com/file/d/1vAxbIKjbq8HRnjbAAUOffyH3efynjbXM/view?usp=sharing

如果您可以构建一个函数来填充路径之间的区域(您可以查看 docx 以获得更好的解释),那么请将其放在答案中。

解决方法

我相信您需要创建变量来存储状态。然后您可以在结束游戏时以该状态返回。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。