(非常初学者)Pygame窗口不会保持开放状态

时间:2017-10-02 00:06:11

标签: python

所以我刚开始尝试编写代码并遵循一些指南。基本上我决定尝试让蛇自己吃点游戏。我完全想要通过它来解决问题并且必须解决所有问题,但我似乎已经陷入了最简单的事情。当我尝试运行我拥有的东西时,我不能让我的pygame窗口保持打开状态。我怎样才能保持开放状态?不需要对代码发表评论以及它有多糟糕我知道这很糟糕,只是希望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()

1 个答案:

答案 0 :(得分: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)