Python游戏重启

2024-04-25 02:22:57 发布

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

所以我在学习python,我完成了游戏,一切正常,但现在我不知道如何重新启动游戏,我的意思是当游戏结束时,下一步是什么?如何重新开始 我将为我的完整代码添加一个link,下面是到目前为止所做的工作

非常感谢你

if Bullet_state is "fire":
        fire(BulletX, BulletY)
        BulletY -= Bullet_MovementY
    player(playerX, playerY)
    score(textX, textY)
    pygame.display.update()

Tags: 代码游戏ifislinkfirescorestate
1条回答
网友
1楼 · 发布于 2024-04-25 02:22:57

对于重启逻辑,保持当前游戏循环,但添加一个标志以指示游戏已结束。在循环中,检查此标志,如果设置了该标志,则显示重新启动提示。还将初始化过程封装在函数中,以便在每次重新启动时调用

注意,我在Python3.8中对此进行了测试

试试这个代码。当比分达到3分时,游戏结束并显示重新启动提示

import pygame
import random
import math

pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('Space Invadors')
icon = pygame.image.load('1.png')
pygame.display.set_icon(icon)
#Background
Background = pygame.image.load('background.png')

def SetGameStart():    # initialize variables
    global Player_Image,playerX,playerY,Key_Movement,Enemy_Image,EnemyX,EnemyY,Enemy_MovementX,Enemy_MovementY
    global Bullet_Image,BulletX,BulletY,Bullet_MovementX,Bullet_MovementY,Bullet_state,Score
    # Player
    Player_Image = pygame.image.load('player.png')
    playerX = 370
    playerY = 480
    Key_Movement = 0
    # Enemy
    Enemy_Image = pygame.image.load('monster2.png')
    EnemyX = random.randint(0, 735)
    EnemyY = random.randint(50, 150)
    Enemy_MovementX = 1.5
    Enemy_MovementY = 40
    # Bullet
    Bullet_Image = pygame.image.load('bullet.png')
    BulletX = 0
    BulletY = 480
    Bullet_MovementX = 0
    Bullet_MovementY = 10
    Bullet_state = "Ready"

    Score = 0

def Fire(x, y):
    global Bullet_state
    Bullet_state = "Fire"
    screen.blit(Bullet_Image, (x + 16, y + 10))


def player(x, y):
    # blit is draw! draw an image on the screen
    screen.blit(Player_Image, (x, y))


def Enemy(x, y):
    screen.blit(Enemy_Image, (x, y))

def is_Collided(BulletX, BulletY, EnemyX, EnemyY):
    distance = math.sqrt(math.pow(BulletX - EnemyX, 2) + math.pow(BulletY - EnemyY, 2))
    if distance < 27:
        return True
    else:
        return False
        

SetGameStart()  # initialize variables
GameDone = False

def text_objects(text, font):
    textSurface = font.render(text, True, (0,200,0))
    return textSurface, textSurface.get_rect()

Close = True
while Close:
    screen.fill((0, 0, 0))
    screen.blit(Background, (0, 0))

    if GameDone:  # pause game loop, show restart prompt
        largeText = pygame.font.SysFont("comicsansms",20)
        TextSurf, TextRect = text_objects("Game Over.    Press Space to restart.", largeText)
        TextRect.center = ((800/2),(600/2))
        screen.blit(TextSurf, TextRect)
        pygame.display.update() 
        for event in pygame.event.get():
           if event.type == pygame.QUIT:
               Close = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_q:  # press Q to quit
                Close = False
                break
            if event.key == pygame.K_SPACE:  # press space to restart
                GameDone = False
                SetGameStart()  # initialize variables
        continue  # skip game process

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            Close = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                Key_Movement = -4
            if event.key == pygame.K_RIGHT:
                Key_Movement = 4
            if event.key == pygame.K_SPACE:
                # to fix the Pressing on space will reload the Bullet
                if Bullet_state is "Ready":
                    BulletX = playerX
                    Fire(BulletX, playerY)
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                Key_Movement = 0
    playerX += Key_Movement
    if playerX <= 0:
        playerX = 0
    elif playerX >= 736:
        playerX = 736
    # Enemy movement limit
    EnemyX += Enemy_MovementX
    if EnemyX <= 0:
        Enemy_MovementX = 1.5
        EnemyY += Enemy_MovementY
    elif EnemyX >= 736:
        Enemy_MovementX = -1.5
        EnemyY += Enemy_MovementY
    if BulletY <= 0:
        BulletY = 480
        Bullet_state = "Ready"
    if Bullet_state is "Fire":
        Fire(BulletX, BulletY)
        BulletY -= Bullet_MovementY
    Collision = is_Collided(EnemyX, EnemyY, BulletX, BulletY)
    if Collision:
        BulletY = 480
        Bullet_state = "Ready"
        Score += 1
        print(Score)
        EnemyX = random.randint(0, 735)
        EnemyY = random.randint(50, 150)
    Enemy(EnemyX, EnemyY)
    player(playerX, playerY)
    pygame.display.update() 
    if Score == 3:
        GameDone = True

提示

RestartGame

相关问题 更多 >