2015-04-16 3 views
0

Итак, я смотрел, как запускать скрипты python на окнах, но я не могу запускать сценарии pygame, используя Windows XP 64 бит на виртуальной машине. Я попробовал просто запустить его с различными версиями python, pyinstaller, py2exe и cx_freeze.Невозможно запустить скрипт pygame на окнах

Моя основная проблема заключается в том, что я не уверен, в чем проблема. Например: когда я запускаю скрипт как обычно (используя python и ничего больше), скрипт открывает окно cmd, но мгновенно закрывает его снова, но когда я пытаюсь сначала преобразовать его в файл .exe, я получаю сообщение об ошибке, указывающее, что файл действителен , но для другого типа машины (довольно уверен, что это связано с 32-битным и 64-битным питоном, но я не уверен, как это исправить), и когда я запускаю его из 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

Ну, это довольно длинный код, но моим первым предложением было бы попытаться избавиться от некоторых из них, когда они были в циклах. Вы никогда не зацикливаетесь, потому что вы делаете свои выражения цикла ложными через первую итерацию цикла. Ну, на самом деле, на втором взгляде вы делаете какие-то напуганные вещи. Возможно, вы не понимаете компилятор. Ваш код читается сверху вниз. Он не будет просто прыгать повсюду. Я думаю, вы пытались почти приостановить свою петлю, выполнив x=0, а затем возобновите работу с x+=1.

Во-вторых, в игровых петлях мне нравится делать это: while True:. Думаю, это предпочтение, но это только я.

В-третьих, внутри while x == 1: у вас есть оператор if, говорящий if x == 400:. Это невозможно вернуть true в этом выражении if.

Есть много предложений, которые я мог бы сделать. Я рекомендую вам начать с расширения ваших знаний об основных функциях python, прежде чем вы начнете работу с pygame. Надеюсь, поможет.

+0

да, я знаю, что код плох, но это была моя первая игра, и я закодировал все это примерно через 5 часов подряд. Я серьезно не могу вспомнить, почему я использовал так много циклов, все, что я знаю, прекрасно работает на linux, но я просто не могу заставить его работать в окнах. – gxt

+0

Хорошо, я попробую перепроверить проблему – JGerulskis

+0

Я ценю помощь. Мне нужно идти, но завтра я проверю и, возможно, потрачу несколько часов на эту проблему. (также не стесняйтесь предлагать улучшения кода) – gxt

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