2013-10-09 3 views
2

Я сделал скрипт в python 2.6. Когда я попытался запустить его на компьютере (Windows Vista Home Basic), он работал отлично, но когда я попытался сделать его в .exe, проблемы начались. Проблемы состояли в том, что когда я нажал на исполняемый файл на других компьютерах (Windows 7 и я думаю, что новая версия Windows Vista), он придумал окно с ошибкой и быстро исчезает. Он так быстро исчезает, что я не могу прочитать все сообщения об ошибках. Но я видел часть сообщения о том, что в строке 70 и строке 54 произошла ошибка, и что произошла ошибка «importError: DLL»; Указанный модуль не может быть найден'. По какой-то причине для меня это выглядит отлично. В случае, если я сделал скрипт в исполняемый файл с py2exe (последний). Строки выделены в сценарии ниже.Исполняемые проблемы

import pygame, random, sys 
from pygame.locals import * 

WINDOWWIDTH = 600 
WINDOWHEIGHT = 600 
RED = (255, 0, 0) 
WHITE = (255, 255, 255) 
BLACK = (0, 0, 0) 
TEXTCOLOR = WHITE 
BACKGROUNDCOLOR = BLACK 
FPS = 40 
ASTEROIDMINSIZE = 10 
ASTEROIDMAXSIZE = 40 
ASTEROIDMINSPEED = 1 
ASTEROIDMAXSPEED = 8 
ADDNEWASTEROIDRATE = 6 
PLAYERMOVERATE = 5 
MAXHEALTH = 3 

def terminate(): 
    pygame.quit() 
    sys.exit() 

def waitForPlayerToPressKey(): 
    while True: 
     for event in pygame.event.get(): 
      if event.type == QUIT: 
       terminate() 
      if event.type == KEYDOWN: 
       if event.key == K_ESCAPE: # pressing escape quits 
        terminate() 
       return 

def playerHasHitBaddie(playerRect, asteroids): 
    for a in asteroids: 
     if playerRect.colliderect(a['rect']): 
      return True 
    return False 

def drawText(text, font, surface, x, y): 
    textobj = font.render(text, 1, TEXTCOLOR) 
    textrect = textobj.get_rect() 
    textrect.topleft = (x, y) 
    surface.blit(textobj, textrect) 

# set up pygame, the window, and the mouse cursor 
pygame.init() 
mainClock = pygame.time.Clock() 
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT)) 
pygame.display.set_caption('Dodger') 
pygame.mouse.set_visible(False) 

# set up fonts 
(LINE 54)font = pygame.font.SysFont(None, 48) 

# set up sounds 
gameOverSound = pygame.mixer.Sound('gameover.wav') 
pygame.mixer.music.load('background.mid') 

# set up images 
playerImage = pygame.image.load('player.png') 
playerRect = playerImage.get_rect() 
baddieImage = pygame.image.load('asteroid.png') 
tokenImage = pygame.image.load('tokens.png') 

# show the "Start" screen 
drawText('Asteroid Shower', font, windowSurface, (WINDOWWIDTH/3), (WINDOWHEIGHT/3)) 
drawText('Press a key to start.', font, windowSurface, (WINDOWWIDTH/3) - 30, (WINDOWHEIGHT/3) + 50) 
drawText('By Sandy Goetjens', font, windowSurface, (WINDOWWIDTH/3) - 100, (WINDOWHEIGHT/3) + 100) 
(LINE 70)pygame.display.update() 
waitForPlayerToPressKey() 

topScore = 0 
while True: 
    # set up the start of the game 
    asteroids = [] 
    score = 0 
    playerRect.topleft = (WINDOWWIDTH/2, WINDOWHEIGHT - 50) 
    moveLeft = moveRight = moveUp = moveDown = False 
    reverseCheat = slowCheat = False 
    asteroidAddCounter = 0 
    pygame.mixer.music.play(-1, 0.0) 

    while True: # the game loop runs while the game part is playing 
     score += 1 # increase score 

     for event in pygame.event.get(): 
      if event.type == QUIT: 
       terminate() 

      if event.type == KEYDOWN: 
       if event.key == ord('z'): 
        reverseCheat = True 
       if event.key == ord('x'): 
        slowCheat = True 
       if event.key == K_LEFT or event.key == ord('a'): 
        moveRight = False 
        moveLeft = True 
       if event.key == K_RIGHT or event.key == ord('d'): 
        moveLeft = False 
        moveRight = True 
       if event.key == K_UP or event.key == ord('w'): 
        moveDown = False 
        moveUp = True 
       if event.key == K_DOWN or event.key == ord('s'): 
        moveUp = False 
        moveDown = True 

      if event.type == KEYUP: 
       if event.key == ord('z'): 
        reverseCheat = False 
        score = 0 
       if event.key == ord('x'): 
        slowCheat = False 
        score = 0 
       if event.key == K_ESCAPE: 
         terminate() 

       if event.key == K_LEFT or event.key == ord('a'): 
        moveLeft = False 
       if event.key == K_RIGHT or event.key == ord('d'): 
        moveRight = False 
       if event.key == K_UP or event.key == ord('w'): 
        moveUp = False 
       if event.key == K_DOWN or event.key == ord('s'): 
        moveDown = False 

      if event.type == MOUSEMOTION: 
       # If the mouse moves, move the player where the cursor is. 
       playerRect.move_ip(event.pos[0] - playerRect.centerx, event.pos[1] - playerRect.centery) 

     # Add new baddies at the top of the screen, if needed. 
     if not reverseCheat and not slowCheat: 
      asteroidAddCounter += 1 
     if asteroidAddCounter == ADDNEWASTEROIDRATE: 
      asteroidAddCounter = 0 
      asteroidSize = random.randint(ASTEROIDMINSIZE, ASTEROIDMAXSIZE) 
      newAsteroid = {'rect': pygame.Rect(random.randint(0, WINDOWWIDTH-asteroidSize), 0 - asteroidSize, asteroidSize, asteroidSize), 
         'speed': random.randint(ASTEROIDMINSPEED, ASTEROIDMAXSPEED), 
         'surface':pygame.transform.scale(baddieImage, (asteroidSize, asteroidSize)), 
         } 

      asteroids.append(newAsteroid) 

     # Move the player around. 
     if moveLeft and playerRect.left > 0: 
      playerRect.move_ip(-1 * PLAYERMOVERATE, 0) 
     if moveRight and playerRect.right < WINDOWWIDTH: 
      playerRect.move_ip(PLAYERMOVERATE, 0) 
     if moveUp and playerRect.top > 0: 
      playerRect.move_ip(0, -1 * PLAYERMOVERATE) 
     if moveDown and playerRect.bottom < WINDOWHEIGHT: 
      playerRect.move_ip(0, PLAYERMOVERATE) 

     # Move the mouse cursor to match the player. 
     pygame.mouse.set_pos(playerRect.centerx, playerRect.centery) 

     # Move the baddies down. 
     for a in asteroids: 
      if not reverseCheat and not slowCheat: 
       a['rect'].move_ip(0, a['speed']) 
      elif reverseCheat: 
       a['rect'].move_ip(0, -5) 
      elif slowCheat: 
       a['rect'].move_ip(0, 1) 

     # Delete baddies that have fallen past the bottom. 
     for a in asteroids[:]: 
      if a['rect'].top > WINDOWHEIGHT: 
       asteroids.remove(a) 

     # Draw the game world on the window. 
     windowSurface.fill(BACKGROUNDCOLOR) 

     # Draw the score and top score. 
     drawText('Score: %s' % (score), font, windowSurface, 10, 0) 
     drawText('Top Score: %s' % (topScore), font, windowSurface, 10, 40) 

     # Draw the player's rectangle 
     windowSurface.blit(playerImage, playerRect) 

     # Draw each baddie 
     for a in asteroids: 
      windowSurface.blit(a['surface'], a['rect']) 

     pygame.display.update() 

     # Check if any of the baddies have hit the player. 
     if playerHasHitBaddie(playerRect, asteroids): 
      if score > topScore: 
       topScore = score # set new top score 
      break 

     mainClock.tick(FPS) 

    # Stop the game and show the "Game Over" screen. 
    pygame.mixer.music.stop() 
    gameOverSound.play() 

    drawText('GAME OVER', font, windowSurface, (WINDOWWIDTH/3), (WINDOWHEIGHT/3)) 
    drawText('Press a key to play again.', font, windowSurface, (WINDOWWIDTH/3) - 80, (WINDOWHEIGHT/3) + 50) 
    pygame.display.update() 
    waitForPlayerToPressKey() 

    gameOverSound.stop() 
+0

используйте командную строку для выполнения сценария и отправьте сообщение об ошибке. Windows-key + r -> введите cmd, введите. используйте команду 'cd' для доступа к папке и введите имя исполняемого файла. – User

+0

извините, но что вы имеете в виду, используйте командную строку. Вы имеете в виду использование оболочки python? Я попытался запустить его из командной строки, но он не запустится. – user2727932

ответ

0

Чтобы получить полную ошибку вы можете сделать это в вашей программе:

try: 

    something_with_error 

except: 
    import traceback 
    traceback.print_exc() 
    input() 

Затем вы можете увидеть полную ошибку.

Смежные вопросы