所以我一直在寻找如何在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()
任何帮助确定问题甚至帮助我解决问题都将受到高度赞赏。
答案 0 :(得分:0)
这是相当长的代码,但我的第一个建议是试图摆脱其中的一些循环。你永远不会实际循环,因为你通过循环的第一次迭代使你的循环表达式为假。实际上,第二眼看你做了一些时髦的事情。您可能误解了编译器。您的代码从上到下阅读。它不会只是跳到这个地方。我认为你试图通过x=0
几乎暂停你的循环,然后继续x+=1
。
其次,在游戏循环中,我喜欢这样做:while True:
。我想这是一个偏好的东西,但那只是我。
第三,在while x == 1:
内,您有一条if语句if x == 400:
。在if语句中,这是不可能的。
我可以提出很多建议,我建议您在开始使用pygame之前先扩展您对python基本功能的了解。希望它有所帮助。