簡體   English   中英

為什么主循環停止后程序沒有停止?

[英]Why is the program not stopping after the main loop is stopped?

我正在嘗試制作自己的 Snake 版本。 我正在嘗試對其進行設置,以便在撞到牆時,通過設置 run = False 來停止主循環運行。 這在我使用退出按鈕關閉程序時有效,但由於某種原因在檢測到碰撞時不起作用。 有什么幫助嗎?

注意:我確實嘗試將 gameOver() function 移出 updateScreen() function 並將其單獨放在循環的末尾,但這也不起作用。

import pygame
import time
import os

pygame.init()

width, height = (500, 500)
win = pygame.display.set_mode((width, height))
pygame.display.set_caption("Snake")
win.fill((0, 0, 0))

# Snake Class
class Snake:
    def __init__(self, x, y, width, height, color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.len = []
        self.xvel = 0
        self.yvel = 0

    def draw(self, window):
        win.fill((0, 0, 0))
        pygame.draw.rect(window, self.color, (self.x, self.y, self.width, self.height))

    def move(self):
        self.x += self.xvel
        self.y += self.yvel

    def checkCol(self):
        # Check if edge is hit
        if self.x <= 0 or self.x + self.width >= width:
            return True
        elif self.y <= 0 or self.y + self.height >= height:
            return True
        else:
            return False

sn = Snake(100, 100, 15, 15, (0, 255, 0))

# MAIN LOOP
def main():
    run = True
    FPS = 15
    clock = pygame.time.Clock()

    fontStyle = pygame.font.SysFont(None, 50)

    def updateScreen():
        sn.move()
        sn.draw(win)

        gameOver()

        pygame.display.update()

    def gameOver():
        if sn.checkCol():
            run = False
            print("check")

    def message(msg, color):
        m = fontStyle.render(msg, True, color)
        win.blit(m, [width / 2, height / 2])

    while run:
        clock.tick(FPS)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False

        keys = pygame.key.get_pressed()

        if keys[pygame.K_w]:
            sn.yvel = -10
            sn.xvel = 0
        if keys[pygame.K_s]:
            sn.yvel = 10
            sn.xvel = 0
        if keys[pygame.K_a]:
            sn.xvel = -10
            sn.yvel = 0
        if keys[pygame.K_d]:
            sn.xvel = 10
            sn.yvel = 0

        updateScreen()

    message("Game Over!", (255, 0, 0))

main()

滿足條件時使用break

  if keys[pygame.K_d]:
        sn.xvel = 10
        sn.yvel = 0
break

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM