pygame文件执行后没有窗口

语法好像也
没问题
q w er t yu i o pa s d f g h j k l z x c v b n m

不给代码怎么知道问题?

【相关推荐】



  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7487518
  • 这篇博客你也可以参考下:pygame之飞机大战按键操作解决方案比较(1)
  • 您还可以看一下 尹成老师的尹成Python飞机大战实战课程中的 创建一个pygame窗体小节, 巩固相关知识点
  • 除此之外, 这篇博客: Pygame之五子棋和贪吃蛇游戏设计中的 面向对象编程之贪吃蛇 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    from random import randint
    from abc import ABCMeta, abstractmethod
    import pygame
    
    
    BLACK_COLOR = (0, 0, 0)
    FOOD_COLOR = (255, 100, 100)
    GREEN_COLOR = (0, 255, 0)
    UP = 0
    RIGHT = 1
    DOWM = 2
    LEFT = 3
    
    
    class GameObject(object, metaclass=ABCMeta):
    
        def __init__(self, x, y, color):
            self._x = x
            self._y = y
            self._color = color
    
        @property
        def x(self):
            return self._x
    
        @property
        def y(self):
            return self._y
    
        @abstractmethod
        def draw(self,screen):
            pass
    
    
    class Wall(GameObject):
    
        def __init__(self, x, y, width, height, color=BLACK_COLOR):
            super().__init__(x, y, color)
            self._width = width
            self._height = height
    
        @property
        def width(self):
            return self._width
    
        @property
        def height(self):
            return self._height
    
        def draw(self,screen):
            pygame.draw.rect(screen, self._color,
                             (self._x, self._y, self._width, self._height), 4)
    
    
    class Food(GameObject):
    
        def __init__(self, x, y, size, color=FOOD_COLOR):
            super().__init__(x, y, color)
            self._size = size
            self._hidden = False
    
        @property
        def size(self):
            return self._size
    
        def draw(self, screen):
            if not self._hidden:
                pygame.draw.circle(screen, self._color,
                                   (self._x + self._size // 2, self._y +
                                    self._size // 2),  self._size // 2, 0)
            self._hidden = not self._hidden
    
    
    class SnakeNode(GameObject):
    
        def __init__(self, x, y, size, color=GREEN_COLOR):
            super().__init__(x, y, color)
            self._size = size
    
        @property
        def size(self):
            return self._size
    
        def draw(self, screen):
            pygame.draw.rect(screen, self._color,
                             (self._x, self._y, self._size, self._size), 0)
            pygame.draw.rect(screen, BLACK_COLOR,
                             (self._x, self._y, self._size, self._size), 1)
    
    
    class Snake(GameObject):
    
        def __init__(self):
            self._dir = LEFT
            self._nodes = []
            for index in range(5):
                node = SnakeNode(290 + index * 20, 250, 20)
                self._nodes.append(node)
    
        @property
        def dir(self):
            return self._dir
    
        def draw(self, screen):
            for node in self._nodes:
                node.draw(screen)
    
        def collide(self, wall):
            head = self._nodes[0]
            return head.x < wall.x or head.x > (wall.x + wall.width - head.size) \
                   or head.y < wall.y or head.y > (wall.y + wall.height - head.size)
    
        def eat_food(self, food):
            head = self._nodes[0]
            if head.x == food .x and head.y == food.y:
                self._nodes.append(self._nodes[-1])
                return True
    
        def eat_me(self):
            head = self._nodes[0]
            for snake in self._nodes[4 :]:
                if head.x == snake.x and head.y == snake.y:
                    return True
    
        def move(self):
            head = self._nodes[0]
            x, y, size = head.x, head.y, head.size
            snake_dir = self._dir
            if snake_dir == UP:
                y -= size
            if snake_dir == RIGHT:
                x += size
            if snake_dir == DOWM:
                y += size
            if snake_dir == LEFT:
                x -= size
            new_head = SnakeNode(x, y, size)
            self._nodes.insert(0, new_head)
            self._nodes.pop()
    
        def change_dir(self, new_dir):
            if new_dir != self._dir and (self._dir + new_dir) % 2 != 0:
                self._dir = new_dir
    
    
    def main():
    
        def refresh():
            """刷新窗口"""
            screen.fill((242, 242, 242))
            snake.draw(screen)
            wall.draw(screen)
            food.draw(screen)
            pygame.display.flip()
    
        def handle_key_event(key_event):
            key = key_event.key
            if key == pygame.K_F2:
                reset_game()
            elif key in (pygame.K_w, pygame.K_a, pygame.K_s, pygame.K_d):
                if not game_over:
                    if key == pygame.K_w:
                        new_dir = UP
                    elif key == pygame.K_d:
                        new_dir = RIGHT
                    elif key == pygame.K_s:
                        new_dir = DOWM
                    elif key == pygame.K_a:
                        new_dir = LEFT
                    snake.change_dir(new_dir)
    
        def create_egg():
            row = randint(0, 29)
            col = randint(0, 29)
            return Food(10 + 20 * col, 10 + 20 * row, 20)
    
        def reset_game():
            nonlocal snake, food, game_over, total
            food = create_egg()
            snake = Snake()
            game_over = False
            total = 0
            pygame.event.clear() #清理事件
    
        pygame.init()
        total = 0
        wall = Wall(10, 10, 600, 600)
        food = create_egg()
        snake = Snake()
        score = pygame.font.SysFont('SimHei', 32)
        pygame.display.set_caption('贪吃蛇')
        screen = pygame.display.set_mode((620, 620))
        screen.fill((242, 242, 242))
    
        pygame.display.flip()
        clock = pygame.time.Clock()
    
        running = True
        game_over = False
        while running:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    running = False
                elif event.type == pygame.KEYDOWN:
                    handle_key_event(event)
            if not game_over:
                refresh()
                snake.eat_food(food)
                snake.move()
    
            if snake.collide(wall) or snake.eat_me():
                game_over = True
            if snake.eat_food(food):
                food = create_egg()
                total += 10
            score_board = score.render("score: %d" % total, True, [0, 0, 0])
            text_board = score_board.get_rect()
            text_board.center = (520, 25)
            screen.blit(score_board, text_board)
            pygame.display.update()
            clock.tick(10)
    
        pygame.quit()
    
    
    if __name__ == '__main__':
        main()
    #panda3D 用于3D游戏开发
    #软技能、 unix编程技术(好书)

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^