2015-04-16 253 views
0

所以我一直在尋找如何在Windows上運行python腳本,但我無法在虛擬機上使用Windows xp 64位運行pygame腳本。我試着用不同版本的python,pyinstaller,py2exe和cx_freeze來運行它。無法在Windows上運行pygame腳本

我的主要問題是,我不確定這個問題到底是什麼。例如:當我像正常一樣運行腳本(使用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() 

任何幫助或者標識的問題,甚至幫我解決這些問題將高度讚賞。

+2

你真的在計算機上安裝了'pygame'嗎? – MattDMo

+0

也許是因爲你有幾個while循環和事件循環。 –

+0

我在安裝pygame時遇到了問題,但我認爲它已安裝。當我運行轉換後的exe文件時,它也應該無所謂,因爲即使沒有安裝python也應該可以運行。 – gxt

回答

0

這是相當長的代碼,但我的第一個建議是試圖擺脫一些while循環。你永遠不會實際循環,因爲你通過循環的第一次迭代使你的循環表達式成爲false。其實,第二次看,你做了一些時髦的事情。你可能會誤解編譯器。您的代碼從上到下閱讀。它不會跳到所有的地方。我認爲你試圖通過執行x=0來暫停循環,然後通過x+=1繼續。

其次,在遊戲循環中我喜歡這樣做:while True:。我想這是一個偏好的事情,但那只是我。

第三,在while x == 1:內部有一條if語句,表示if x == 400:。在if語句中,這是不可能的。

我可以提出很多建議我建議您在開始使用pygame之前,首先擴展您對python基本功能的知識。希望能幫助到你。

+0

是的,我知道代碼不好,但是這是我的第一場比賽,我直接在大約5小時內編碼。我真的不記得爲什麼我使用了這麼多while循環,我只知道它在linux上完美工作,但我無法讓它在Windows上運行。 – gxt

+0

好吧,我會嘗試重新檢查問題 – JGerulskis

+0

我很感激幫助。我得走了,但明天我會回來查看,也可能在這個問題上花費幾個小時。 (也可以自由地建議對代碼進行改進) – gxt