繁体   English   中英

在 Pygame 中将开始屏幕切换到游戏

[英]Switch Start Screen to Game in Pygame

我想将开始屏幕切换到游戏。 当我按下回车键时应该会发生。 但是当我按下回车键时会发生什么实际上是退出游戏。

这是代码:

import random
from time import sleep

import pygame

screen = pygame.display.set_mode([800,600], 0 , 32)
startscreen = pygame.image.load(".\\img\\startscreen.png")

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

        if (event.type == pygame.KEYDOWN):
            if (event.key == pygame.K_RETURN):
                self.initialize()

    screen.blit(startscreen,(0,0))
    pygame.display.update()


class CarRacing:
    def __init__(self):

        pygame.init()

        self.display_width = 800
        self.display_height = 600
        self.black = (0, 0, 0)
        self.white = (255, 255, 255)
        self.clock = pygame.time.Clock()
        self.gameDisplay = None


    def initialize(self):

        self.crashed = False

        self.carImg = pygame.image.load('.\\img\\police.png')
        self.car_x_coordinate = (self.display_width * 0.45)
        self.car_y_coordinate = (self.display_height * 0.8)
        self.car_width = 49

        # enemy_car
        self.enemy_car = pygame.image.load('.\\img\\enemy_car_1.png')
        self.enemy_car_startx = random.randrange(200, 600)
        self.enemy_car_starty = -600
        self.enemy_car_speed = 5
        self.enemy_car_width = 49
        self.enemy_car_height = 100

        # Background
        self.bgImg = pygame.image.load('.\\img\\newroad.jpg')
        self.bg_x1 = (self.display_width / 4) - (360 / 4)
        self.bg_x2 = (self.display_width / 4) - (360 / 4)
        self.bg_y1 = 0
        self.bg_y2 = -600
        self.bg_speed = 3
        self.count = 0

        #Music
        self.back_music = pygame.mixer.music.load(".\\music\\spy_hunter_nes_music.mp3")
        self.back_music = pygame.mixer.music.play(-1)

    def car(self, car_x_coordinate, car_y_coordinate):
        self.gameDisplay.blit(self.carImg, (car_x_coordinate, car_y_coordinate))

    def racing_window(self):
        self.gameDisplay = pygame.display.set_mode((self.display_width, self.display_height))
        pygame.display.set_caption('Car Dodge')
        self.run_car()

    def run_car(self):

        while not self.crashed:

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.crashed = True
                # print(event)

                if (event.type == pygame.KEYDOWN):
                    if (event.key == pygame.K_LEFT):
                        self.car_x_coordinate -= 50

                    if (event.key == pygame.K_RIGHT):
                        self.car_x_coordinate += 50

            self.gameDisplay.fill(self.black)
            self.back_ground_road()

            self.run_enemy_car(self.enemy_car_startx, self.enemy_car_starty)
            self.enemy_car_starty += self.enemy_car_speed

            if self.enemy_car_starty > self.display_height:
                self.enemy_car_starty = 0 - self.enemy_car_height
                self.enemy_car_startx = random.randrange(200, 600)

            self.car(self.car_x_coordinate, self.car_y_coordinate)
            self.highscore(self.count)
            self.count += 1
            if (self.count % 100 == 0):
                self.enemy_car_speed += 1
                self.bg_speed += 1

            if self.car_y_coordinate < self.enemy_car_starty + self.enemy_car_height:
                if self.car_x_coordinate -15 > self.enemy_car_startx -15 and self.car_x_coordinate -15 < self.enemy_car_startx -15 + self.enemy_car_width -15 or self.car_x_coordinate -15 + self.car_width -15 > self.enemy_car_startx -15 and self.car_x_coordinate -15 + self.car_width -15 < self.enemy_car_startx -15 + self.enemy_car_width -15:
                    self.crashed = True
                    self.display_message("YOU LOSE !!!")

            if self.car_x_coordinate < 150 or self.car_x_coordinate > 650:
                self.crashed = True
                self.display_message("YOU LOSE !!!")

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

    def display_message(self, msg):
        font = pygame.font.SysFont("luckiestguy", 72, True)
        text = font.render(msg, True, (255, 255, 255))
        self.gameDisplay.blit(text, (400 - text.get_width() // 2, 240 - text.get_height() // 2))
        self.display_credit()
        pygame.display.update()
        self.clock.tick(60)
        sleep(1)
        car_racing.initialize()
        car_racing.racing_window()

    def back_ground_road(self):
        self.gameDisplay.blit(self.bgImg, (self.bg_x1, self.bg_y1))
        self.gameDisplay.blit(self.bgImg, (self.bg_x2, self.bg_y2))

        self.bg_y1 += self.bg_speed
        self.bg_y2 += self.bg_speed

        if self.bg_y1 >= self.display_height:
            self.bg_y1 = -600

        if self.bg_y2 >= self.display_height:
            self.bg_y2 = -600

    def run_enemy_car(self, thingx, thingy):
        self.gameDisplay.blit(self.enemy_car, (thingx, thingy))

    def highscore(self, count):
        font = pygame.font.SysFont("luckiestguy", 20)
        text = font.render("Score : " + str(count), True, self.white)
        self.gameDisplay.blit(text, (0, 0))

    def display_credit(self):
        font = pygame.font.SysFont("luckiestguy", 14)

if __name__ == '__main__':
    car_racing = CarRacing()
    car_racing.racing_window()

这是主要问题:

screen = pygame.display.set_mode([800,600], 0 , 32)
startscreen = pygame.image.load(".\\img\\startscreen.png")

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

        if (event.type == pygame.KEYDOWN):
            if (event.key == pygame.K_RETURN):
                self.initialize()

    screen.blit(startscreen,(0,0))
    pygame.display.update()

我希望你们能帮助我。 顺便说一下,这是我测试的项目。 我已经尝试了很多变化,但没有任何变化。

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

你在while self.initialize()使用self.initialize()self. 只能在class内使用

您应该使用running = True/False退出while循环,然后使用car_racing.initialize()

if __name__ == '__main__':
    screen = pygame.display.set_mode([800,600], 0 , 32)
    startscreen = pygame.image.load(".\\img\\startscreen.png")

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

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    #self.initialize()
                    running = False

        screen.blit(startscreen,(0,0))
        pygame.display.update()

    car_racing = CarRacing()
    car_racing.initialize()
    car_racing.racing_window()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM