为什么Python / Pygame程序没有运行?

时间:2014-01-07 21:45:39

标签: python pygame

所以,我正在开发一个学校项目的游戏。我是Python / Pygame的新手,所以还有一些我不理解的东西。我创建了我的整个项目,没有定义函数,然后我了解了它们并将它们添加进去。自从我添加它们之后,Pygame窗口甚至都没有显示出来。怎么了?

我是StackOverflow的新手,不知道如何将其添加到代码示例中。有人可以帮我吗?感谢。

import pygame, math, sys, random
pygame.init()

#Variables
darkYellow = 204,204,0
grey = 102, 102, 102
black = 0, 0, 0
white = 255, 255, 255
red = 255,0,0
marroon = 120, 0, 0
green = 0,255,0
blue = 0,0,255
darkBlue = 0,0,128

resolution = 650, 600
myFont = pygame.font.SysFont("Times New Roman", 30)
myFont2 = pygame.font.SysFont("Times New Roman", 15)
myFont3 = pygame.font.SysFont("Times New Roman", 60)

redLeft = 150, 575
redRight = 280, 575
blackLeft = 370, 575
blackRight = 500, 575
radius = 20

def main():
    global window
    window = pygame.display.set_mode(resolution)
    pygame.display.set_caption('Harrys Game')
    window.fill(grey)
    pygame.display.update()

#Main menu
def mainMenu():

    rectWidth = 150
    rectHeight = 40

    #Draw buttons
    pygame.draw.rect(window, (white),(250, 150, rectWidth, rectHeight),0)
    pygame.draw.rect(window, (white),(250, 225, rectWidth, rectHeight),0)
    pygame.draw.rect(window, (white),(250, 300, rectWidth, rectHeight),0)
    highlight = pygame.draw.rect(window, (darkYellow),(250, 150, rectWidth,             rectHeight),0)
    pygame.display.update()

    playGameText = myFont.render("Play Game", 1, red)
    window.blit(playGameText, (260, 150))
    optionsText = myFont.render("Options", 1, red)
    window.blit(optionsText, (275, 225))
    exitText = myFont.render("Exit", 1, red)
    window.blit(exitText, (300, 300))
    pygame.display.update()

def grid():
    startBar = pygame.draw.lines(window, black, False, [(0,545.46),(541.7,545.46)], 5)
    bar2 = pygame.draw.lines(window, black, False, [(0,490.92),(541.7,490.92)], 5)
    bar3 = pygame.draw.lines(window, black, False, [(0,436.38),(541.7,436.38)], 5)
    bar4 = pygame.draw.lines(window, black, False, [(0,381.84),(541.7,381.84)], 5)
    bar5 = pygame.draw.lines(window, black, False, [(0,327.3),(541.7,327.3)], 5)
    bar6 = pygame.draw.lines(window, black, False, [(0,272.76),(541.7,272.76)], 5)
    bar7 = pygame.draw.lines(window, black, False, [(0,218.22),(541.7,218.22)], 5)
    bar8 = pygame.draw.lines(window, black, False, [(0,163.68),(541.7,163.68)], 5)
    bar9 = pygame.draw.lines(window, black, False, [(0,109.14),(541.7,109.14)], 5)
    bar10 = pygame.draw.lines(window, black, False, [(0,54.6),(541.7,54.6)], 5)

    #Draw side columns
    rightBar = pygame.draw.lines(window, black, False, [(541.7,600),(541.7,0)], 5)
    leftBar = pygame.draw.lines(window, black, False, [(108.3,600),(108.3,0)], 5)
    centreBar = pygame.draw.lines(window, black, False, [(325,0),(325,600)], 5)

    #Right column text
    label1 = myFont2.render("You rolled a:", 1, black)
    window.blit(label1, (545, 20))
    rollLabel = myFont2.render("Hit space", 1, black)
    window.blit(rollLabel, (545, 100))
    rollLabel2 = myFont2.render("to roll again", 1, black)
    window.blit(rollLabel2, (545, 117))


    #Display column numbers
    start1 = myFont.render("START", 1, black)
    window.blit(start1, (8, 545.46))
    side2 = myFont.render("2", 1, black)
    window.blit(side2, (54.15, 490.92))
    side3 = myFont.render("3", 1, black)
    window.blit(side3, (54.15, 436.38))
    side4 = myFont.render("4", 1, black)
    window.blit(side4, (54.15, 381.84))
    side5 = myFont.render("SAFE 5", 1, black)
    side6 = myFont.render("6", 1, black)
    window.blit(side6, (54.15, 272.76))
    side7 = myFont.render("7", 1, black)
    window.blit(side7, (54.15, 218.22))
    side8 = myFont.render("8", 1, black)
    window.blit(side8, (54.15, 163.68))
    side9 = myFont.render("9", 1, black)
    window.blit(side9, (54.15, 109.14))
    side10 = myFont.render("10", 1, black)
    window.blit(side10, (54.15, 54.6))
    finish11 = myFont.render("FINISH", 1, black)
    window.blit(finish11, (8, 0))

def counters():
    redCountLeft = pygame.draw.circle(window, marroon, redLeft, radius)
    redCountRight = pygame.draw.circle(window, marroon, redRight, radius)
    blackCountLeft = pygame.draw.circle(window, black, blackLeft, radius)
    blackCountRight = pygame.draw.circle(window, black, blackRight, radius)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
             pygame.quit(); sys.exit();
        if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            #Dice roll
            diceRoll = random.randint(1, 4)
            diceRollLabel = myFont3.render(str(diceRoll), 1, black)
            window.blit(diceRollLabel, (580, 35))
            print("Dice roll test", diceRoll)
            pygame.display.update()

2 个答案:

答案 0 :(得分:2)

您需要调用您的函数。定义函数时,解释器不执行该代码。当您希望运行该代码块时,需要稍后调用它,例如:

>>> def main():
...     print('hi')
... 
>>> # nothing printed
... 
>>> main()
hi

通常在Python中,您将有一个语句:

if __name__ == '__main__':
    main()

这意味着如果将此文件作为主python模块调用(使用python blah.py传递给python可执行文件),则运行main()函数。 main()函数将包含完整的程序逻辑,根据需要调用其他函数。

对于您的代码,您可能需要类似(未经测试的)

if __name__ == '__main__':
    main() # initialise the window
    while True:
        mainMenu() # draw the mainMenu
        grid()     # draw the grid
        counters() # draw the counters

        # process events in this loop
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                 pygame.quit(); sys.exit();
            if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                #Dice roll
                diceRoll = random.randint(1, 4)
                diceRollLabel = myFont3.render(str(diceRoll), 1, black)
                window.blit(diceRollLabel, (580, 35))
                print("Dice roll test", diceRoll)
                pygame.display.update()

答案 1 :(得分:1)

不应缩进

def grid()或者应该成为grid()函数一部分的行需要缩进4个空格