【问题标题】:Pygame window won't stay openPygame 窗口不会保持打开状态
【发布时间】:2017-10-02 00:06:11
【问题描述】:

我决定自己尝试制作吃蛇圆点游戏。当我尝试运行我拥有的东西时,我无法让我的 pygame 窗口保持打开状态。我怎样才能让它保持打开状态?

import pygame
import time
import random

red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
black = (0,0,0)
white = (255,255,255)

snake_width = 20
snake_height = 20

pygame.init()

game_width = 800
game_height = 600

gameDisplay = pygame.display.set_mode((game_width,game_height))
pygame.display.set_caption('Snake Game!')
clock = pygame.time.Clock()

class game:
    def _init_(self):
        snake_startx = (game_width/2)
        snake_starty = (game_heiht/2)

        x = thingx
        y = thingy
        x_change = 0

        gameExit = False
        while not gameExit:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    quit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x_change = -5
            elif event.key == pygame.K_RIGHT:
                x_change = 5

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_DOWN:
                x_change = -5
            elif event.key == pygame.K_UP:
                x_change = 5

            snake(white, thing_startx, thing_starty, snake_width, 
            snake_height, x_change)

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


class snake:

    def _init_(self, color, thingx, thingy, thingw, thingh, things):
        color = white
        thingx = snake_startx
        thingy = snake_starty
        thingw = snake_width
        thingh = snake_height
        things = x_change

        pygame.draw.rect(gameDisplay, white, [snake_startx,               
        snake_starty, 
        snake_width, snake_height,])


game()
pygame.quit()
quit()

【问题讨论】:

  • 你在学习什么教程?
  • 你的代码有很多问题,但第一个问题是你的游戏中的 _init_ 函数实际上从未被调用,所以你永远不会进入你的 while 循环(尝试放置一些 print 语句在那里进行测试。将其重命名为__init__(双下划线,在python中专门定义),它至少应该调用所有这些东西(即使它现在已经坏了)。
  • 我建议你使用 Sentdex 的 Pygame 初学者指南。可以在 youtube 上找到。

标签: python pygame


【解决方案1】:

不得不重写一半以上的代码。我不建议您遵循您使用的指南。此外,如果您是 python 语言的初学者,我不建议您立即研究面向对象。首先了解数据类型和循环。你仍然可以在没有面向对象的情况下制作 pygame 项目,但如果你知道如何使用 OOP,那么仍然可以使用它。

import pygame
import time
import random

red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
black = (0,0,0)
white = (255,255,255)

snake_width = 20
snake_height = 20

pygame.init()

game_width = 800
game_height = 600

x_change = 0
y_change = 0

gameDisplay = pygame.display.set_mode((game_width,game_height))
pygame.display.set_caption('Snake Game!')
clock = pygame.time.Clock()
gameDisplay.fill(black)

class snake:

    def __init__(self, color, thingw, thingh, movementspeedX, movementspeedY):
        self.color = color
        self.width = thingw
        self.height = thingh
        self.Xspeed = movementspeedX
        self.Yspeed = movementspeedY
        self.snake_startx = (game_width/2)
        self.snake_starty = (game_height/2)
        self.Xpos = self.snake_startx
        self.Ypos = self.snake_starty


    def Draw(self):

        pygame.draw.rect(gameDisplay, self.color, pygame.Rect([self.Xpos, self.Ypos, self.width, self.height]))

    def Update(self):
        self.Xpos += self.Xspeed
        self.Ypos += self.Yspeed







SnakeObject = snake(white, snake_width, snake_height, x_change, y_change)
SnakeObject.Draw()

gameRunning = True
while gameRunning:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            print("QUIT")
            pygame.quit()
            gameRunning = False
            quit() 

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                SnakeObject.Xspeed = -5
                SnakeObject.Yspeed = 0
            elif event.key == pygame.K_RIGHT:
                SnakeObject.Xspeed = 5
                SnakeObject.Yspeed = 0
            elif event.key == pygame.K_DOWN:
                SnakeObject.Yspeed = 5
                SnakeObject.Xspeed = 0
            elif event.key == pygame.K_UP:
                SnakeObject.Yspeed = -5
                SnakeObject.Xspeed = 0

    print(SnakeObject.Yspeed)
    print(SnakeObject.Xspeed)
    SnakeObject.Update()
    SnakeObject.Draw()
    pygame.display.update()
    clock.tick(60)

【讨论】:

  • 我可以做到只有一个块 - 不会继续扩展。
  • 我对此感到困惑的是,我一直在使用一个指南,该指南只是用 def 而不是类来定义事物。这就是我目前如何制作我试图创建的大部分工作代码的方式。谢谢您的帮助。我试图弄清楚课程是如何运作的,因为这似乎是大多数人做事的方式
  • 也许还没有研究面向对象——涉及类。我花了大约 4 年的时间才部分理解 OOP(面向对象编程)以及如何部分使用它。注意:当我说 4 年时,我花了 4 年时间才对 Python 有足够的信心来研究 OOP
猜你喜欢
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
相关资源
最近更新 更多