Errores de Pygame2Exe que no puedo arreglar

Hice un “Juego”. Me encanta jugarlo, y me gustaría distribuirlo a mis amigos sin tener que instalar Python y Pygame en sus computadoras.

Hice mucha investigación sobre Py2Exe y Pyinstaller. Revisé muchos tutoriales, correcciones, errores, pero ninguno de ellos parece ayudarme.

Pyinstaller es inútil porque no le gustan las fonts en Pygame, y Py2exe no comstackría los módulos integrados, por lo que encontré Pygame2exe, que es solo un script de configuración prefabricado para usar con py2exe que incluye pygame y fonts. Supuestamente se construye bien, pero el exe es inutilizable … Recibo el error:

“Microsoft Visual C ++ Runtime Library

¡Error de tiempo de ejecución!

Progtwig C: … \ dist \ Worm Game.exe

Esta aplicación ha solicitado al Runtime que termine de una manera inusual. Póngase en contacto con el equipo de asistencia de la aplicación para obtener más información “.

Simplemente no lo entiendo … ¡¡¡Por qué no puedo comstackr este juego !!!

Aquí está el código del juego, hecho con Python 2.7:

import pygame import random import os pygame.init() class Worm: def __init__(self, surface): self.surface = surface self.x = surface.get_width() / 2 self.y = surface.get_height() / 2 self.length = 1 self.grow_to = 50 self.vx = 0 self.vy = -1 self.body = [] self.crashed = False self.color = 255, 255, 0 def event(self, event): if event.key == pygame.K_UP: if self.vy != 1: self.vx = 0 self.vy = -1 else: a = 1 elif event.key == pygame.K_DOWN: if self.vy != -1: self.vx = 0 self.vy = 1 else: a = 1 elif event.key == pygame.K_LEFT: if self.vx != 1: self.vx = -1 self.vy = 0 else: a = 1 elif event.key == pygame.K_RIGHT: if self.vx != -1: self.vx = 1 self.vy = 0 else: a = 1 def move(self): self.x += self.vx self.y += self.vy if (self.x, self.y) in self.body: self.crashed = True self.body.insert(0, (self.x, self.y)) if (self.grow_to > self.length): self.length += 1 if len(self.body) > self.length: self.body.pop() def draw(self): x, y = self.body[0] self.surface.set_at((x, y), self.color) x, y = self.body[-1] self.surface.set_at((x, y), (0, 0, 0)) def position(self): return self.x, self.y def eat(self): self.grow_to += 25 class Food: def __init__(self, surface): self.surface = surface self.x = random.randint(10, surface.get_width()-10) self.y = random.randint(10, surface.get_height()-10) self.color = 255, 255, 255 def draw(self): pygame.draw.rect(self.surface, self.color, (self.x, self.y, 3, 3), 0) def erase(self): pygame.draw.rect(self.surface, (0, 0, 0), (self.x, self.y, 3, 3), 0) def check(self, x, y): if x  self.x +3: return False elif y  self.y +3: return False else: return True def position(self): return self.x, self.y font = pygame.font.Font(None, 25) GameName = font.render("Worm Eats Dots", True, (255, 255, 0)) GameStart = font.render("Press Any Key to Play", True, (255, 255, 0)) w = 500 h = 500 screen = pygame.display.set_mode((w, h)) GameLoop = True while GameLoop: MenuLoop = True while MenuLoop: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() elif event.type == pygame.KEYDOWN: MenuLoop = False screen.blit(GameName, (180, 100)) screen.blit(GameStart, (155, 225)) pygame.display.flip() screen.fill((0, 0, 0)) clock = pygame.time.Clock() score = 0 worm = Worm(screen) food = Food(screen) running = True while running: worm.move() worm.draw() food.draw() if worm.crashed: running = False elif worm.x = w-1: running = False elif worm.y = h-1: running = False elif food.check(worm.x, worm.y): score += 1 worm.eat() print "Score %d" % score food.erase() food = Food(screen) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() elif event.type == pygame.KEYDOWN: worm.event(event) pygame.display.flip() clock.tick(200) if not os.path.exists("High Score.txt"): fileObject = open("High Score.txt", "w+", 0) highscore = 0 else: fileObject = open("High Score.txt", "r+", 0) fileObject.seek(0, 0) highscore = int(fileObject.read(2)) if highscore > score: a = 1 else: fileObject.seek(0, 0) if score  200 and x  400 and y  260 and x  400 and y < 440: GameLoop = False loop = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: loop = False elif event.key == pygame.K_RIGHT: GameLoop = False loop = False screen.fill((0, 0, 0)) pygame.quit() 

También me encontré con este problema. Después de la investigación, encontré que el error de tiempo de ejecución está causado por la fuente. Noté que también usaste Ninguno como el nombre de la fuente. Recuerde que hay un aviso para usar el pygame2exe sobre la fuente, justo debajo de “Changes by arit:” en la página de pygame2exe , que deberíamos usar “fontname.ttf” para reemplazar None y colocar ese fontname.ttf en la carpeta correcta que El exe puede encontrar. Por ejemplo, puede usar “freesansbold.ttf” para reemplazar Ninguno al crear una fuente, y colocar freesansbold.ttf en la carpeta donde existe el archivo exe. Espero que ayude.

No creo que haya ningún problema con su código. De hecho, se comstack bien y yo también jugué. Buen juego.

Yo sugeriría mirar lo siguiente en tu computadora,

  1. Has instalado todas las actualizaciones de Microsoft
  2. Examine los progtwigs (Panel de control – Progtwigs y características) y vea si tiene las últimas bibliotecas de Microsoft Visual C ++ presentes.

Creo que si los dos anteriores están correctamente colocados, debería funcionar bien.

Probé esto en una máquina con la siguiente configuración: 1. Windows 7 con todos los parches de seguridad actualizados.

Mi respuesta:

Después de algunas semanas (tuve este problema incluso antes), me complace decir que resolví este problema. 🙂

Primera parte de mi problema ( http://sofes.miximages.com/python/WpkjR.png ): Lo resolví editando el script setup.py con la adición de la parte “excluye”. ¡Eso resultó en la creación exitosa de un archivo ejecutable!

Script de setup.py modificado:

 from distutils.core import setup import py2exe setup(windows=['source_static.py'], options={ "py2exe": { "excludes": ["OpenGL.GL", "Numeric", "copyreg", "itertools.imap", "numpy", "pkg_resources", "queue", "winreg", "pygame.SRCALPHA", "pygame.sdlmain_osx"], } } ) 

Por lo tanto, si tiene problemas similares, simplemente coloque esos módulos “faltantes” en esta línea “excluye”.

2ª parte:

Después de que logré crear un archivo ejecutable, tuve el siguiente problema: La aplicación ha solicitado al Runtime que termine de manera inusual. Póngase en contacto con … . Después de días y días de buscar y pensar cómo resolver este otro problema, encontré la manera de hacerlo. No podía creer que el problema fuera tan absurdo. El problema estaba en mi código, con la definición de la fuente:

 font1 = pygame.font.SysFont(None, 13) 

Después de cambiar ” Ninguno ” a algún nombre de fuente del sistema (para un ejemplo “Arial” (debe ser una cadena)), y comstackr, ¡no podía creer que mi archivo .exe funcionara!

 font1 = pygame.font.SysFont("Arial", 13) 

Por supuesto, puede usar su propia fuente, pero debe especificar su ruta y definirla en su progtwig.

Entonces, para todos ustedes que están experimentando estos problemas, sigan estos pasos y espero que tengan éxito. Realmente espero que esto te ayude, porque he perdido días y semanas tratando de resolver estos problemas. Incluso intenté hacer mi archivo .exe con todas las versiones de python y pygame, con muchos otros constructores y scripts de configuración .exe, pero sin suerte. Además de estos problemas, tuve muchos otros problemas antes, pero encontré respuestas a ellos en stackoverflow.com.

Estoy feliz de haber encontrado una manera de resolver estos problemas y de ayudarlos si se enfrentan a los mismos.

Pequeños consejos (cosas que también he hecho):

Primero: actualice su biblioteca de Microsoft Visual C ++ a la más reciente.

Segundo: si tiene imágenes o fonts similares a las que necesita su progtwig ejecutable, inclúyalas a la carpeta dist (donde se creó su archivo .exe).

Tercero: cuando esté haciendo su archivo .exe, incluya todos los archivos necesarios en la carpeta donde se encuentra su script setup.py (todos los archivos y directorios que usa su script principal).

Utiliza Python 2.7 x64 , pygame y py2exe .