无法在Windows上运行pygame脚本

时间:2015-04-16 21:59:31

标签: python windows pygame packaging

所以我一直在寻找如何在Windows上运行python脚本,但是我无法在虚拟机上使用windows xp 64位运行pygame脚本。我试过用不同版本的python,pyinstaller,py2exe和cx_freeze运行它。

我的主要问题是我不确定问题到底是什么。例如:当我像正常一样运行脚本(使用python而不是其他)时,脚本会打开一个cmd窗口,但会立即再次关闭它,但是当我尝试将其转换为.exe文件时,我收到一条错误消息,指出文件有效,但是对于另一种机器类型(非常确定这与32位和64位python有关,但我不确定如何修复它)当我从cmd运行它时,我得到一个错误,说''没有名为pygame的模块。 我还注意到,当简单地转移原始的game.py文件时,一些代码似乎搞砸了,变成了一条直线(我已经忘记了这个错误原因的名称是什么)

这是我试图运行的游戏的完整代码:

import sys, pygame, pygame.mixer, time
from pygame.locals import *
pygame.init()
pygame.mouse.set_visible(0)
w = 1 
while w == 1:
    for event in pygame.event.get():
        if event.type == KEYDOWN and event.key == K_ESCAPE:
            sys.exit()
        elif event.type == pygame.QUIT:
            sys.exit()

    shotgunsound = pygame.mixer.Sound("shotgun.wav")


    size = width, height = 600,400

    screen = pygame.display.set_mode(size)


    bird = pygame.image.load("bird.png")
    shotgun = pygame.image.load("fps_sprite_shotgun.png")
    post = pygame.image.load("post.png")
    ground = pygame.image.load("ground.png")
    text2 = pygame.image.load("text2.png")
    pygame.display.flip()
    skyblue = 0,125,200

    x = 0
    y = 100
    screen.blit(bird,(x,y))

    z = 1
    while z == 1:
        mx,my = pygame.mouse.get_pos()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == KEYDOWN and event.key == K_ESCAPE:
                sys.exit()
            elif event.type == MOUSEBUTTONDOWN and  mx > 400 and mx < 560 and my >100 and my <300:
                shotgunsound.play()
                z = 0
            elif event.type == MOUSEBUTTONDOWN:
                shotgunsound.play()

        screen.fill(skyblue)
        screen.blit(bird,(x,y))
        screen.blit(shotgun,(mx-300,my-200))
        screen.blit(post,(400,100))
        screen.blit(ground,(0,0))
        pygame.display.flip()
        x = x+1
        time.sleep(.01)
        if x == 400:
            screen.blit(text2,(0,0))
            pygame.display.flip()
            time.sleep(3)
            sys.exit()
    text1 = pygame.image.load("text1.png")

    screen.blit(text1, (0,0))

    pygame.display.flip()
    n = 1

    while n == 1:
        for event in pygame.event.get():
            if event.type == KEYDOWN and event.key == K_ESCAPE:
                sys.exit()
            elif event.type == pygame.QUIT:
                sys.exit()
            if event.type == MOUSEBUTTONDOWN:
                n = 0
    x = 0
    rpg = pygame.image.load("fps_sprite_rpg.png")
    w = 0
mx,my = pygame.mouse.get_pos()
t = 1
mx,my = pygame.mouse.get_pos()
green = 0,100,0
building = pygame.image.load("building.png")
rpgsound = pygame.mixer.Sound("rpg.wav")
while t ==1:
    mx,my = pygame.mouse.get_pos()
    for event in pygame.event.get():
                if event.type == KEYDOWN and event.key == K_ESCAPE:
                             sys.exit()
                elif event.type == pygame.QUIT:
                  sys.exit()
        elif event.type == MOUSEBUTTONDOWN and mx > 400 and mx < 600 and my > 100 and my < 300:
            rpgsound.play()
            t = 0
        elif event.type == MOUSEBUTTONDOWN:
            rpgsound.play()
    screen.fill(green)
    screen.blit(bird,(x,y))
    screen.blit(building,(400,50))
    screen.blit(rpg,(mx-300,my-200))
    x = x+1
    pygame.display.flip()
    if x == 400:
        screen.blit(text2,(0,0))
        pygame.display.flip()
        time.sleep(3)
        sys.exit()

final = pygame.image.load("FINAL.png")
screen.blit(final,(0,0))
pygame.display.flip()
time.sleep(3)
sys.exit()

任何帮助确定问题甚至帮助我解决问题都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

这是相当长的代码,但我的第一个建议是试图摆脱其中的一些循环。你永远不会实际循环,因为你通过循环的第一次迭代使你的循环表达式为假。实际上,第二眼看你做了一些时髦的事情。您可能误解了编译器。您的代码从上到下阅读。它不会只是跳到这个地方。我认为你试图通过x=0几乎暂停你的循环,然后继续x+=1

其次,在游戏循环中,我喜欢这样做:while True:。我想这是一个偏好的东西,但那只是我。

第三,在while x == 1:内,您有一条if语句if x == 400:。在if语句中,这是不可能的。

我可以提出很多建议,我建议您在开始使用pygame之前先扩展您对python基本功能的了解。希望它有所帮助。