Juego del Snake en Python

Pagina en estado de actualizacion......

El dia de hoy les traigo el ultimo programa del semestre, es un pequeño programa creado en pygame, el cual consta del juego del Snake.
Cabe resaltar que este codigo lo obtuve originalmente de youtube y lo modifique a mis anchas tras completar la version original.
Dejo el link de referencia: https://www.youtube.com/watch?v=Dm32c_G_Cik

En fin dejo los archivos para su descarga, solo da en descargar para obtener el archivo comprimido y descomprime:

https://drive.google.com/open?id=1j79KXn10i8AnEhOh9XjMlE50TbkfyCXt

pd:Es recomendable instalar las fuentes de la carpeta fuentes

En fin Dejo las capturas del Juego:

El logo es una runa de la saga de libros Shadow Hunters, quize agregar la pantalla de carga con dicho logo en honor a una persona del salón a quien quiero y amo mucho, aunque nos hayamos distanciado quiero decir que aún siento mucho por ella.






Codigo:

El codigo esta dividido basicamente en 4 archivos de codigo pyhton:

Pantalla de carga (load_Screen):

import Tkinter as tk # Python 2
import tkinter as tk # Python 3
import Imagenes #Libreria especial Creada por mi para la carga de Imagenes
import time #Libreria para el manejo de tiempos y cronometros

class load_window():
    root=object
    def __init__(self): #Declaro el constructor de Clase
        self.root = tk.Tk() #Creo la ventana Tk
        # The image must be stored to Tk or it will be garbage collected.
        imagen=Imagenes.get_imagen("logo2.png",1000,1000) #Llamo la funcion get_imagen para cargar una imagen a python
        label = tk.Label(self.root, image=imagen,bg="black") #creo un label, el cual contendra la imagen
        self.root.geometry("+470+200") #establesco la posicion de la pantalla de carga en el monitor
        self.root.overrideredirect(True) #Le establesco la propiedad de una ventana traslucida
        self.root.lift() #Le digo que al cargarse debera aparecer arriba de todas las ventanas creadas
        self.root.wm_attributes("-topmost", True) #le establesco que no debera poseer los botones de minimizar, maximizar y cierre
        #self.root.wm_attributes("-disabled", True) #Si no estuviera comentada y no existiese la linea anterior desabilitaria las funciones de los botones antes comentados
        self.root.wm_attributes("-transparentcolor", "black") #Le digo que la ventana debera actuar con transparencia en todo tono negro
        label.pack() #cargo el label

        # Establezco eventos para el raton
        self.root.bind("", lambda e:self.exit()) #Si el mouse deja la ventana traslucida
        self.root.bind("",lambda e:self.exit()) #o le doy click sobre la imagen
        #debera ejecutar la funcion exit
        self.root.mainloop()
    def exit(self):
        print "entro"
        time.sleep(5) #espera 5s
        self.root.destroy() #cierra esta ventana
        import Snake #importa la libreria Snake correspondiente al archivo numero 2
        """Nota: La importancia de if __name__=='__main__': 
        en python es el siguiente:
        Si no es colocado e importo dicho archivo como libreria, al momento de hacer la importacion todas
        las instrucciones de dicho archivo se ejecutaran, en mi caso utilizo esa funcionalidad para ejecutar la ventana
        del juego sin mas lineas de codigo, pues como podran observar en ese archivo, esa linea no la utilize.
        De colocarla al momento de hacer la importacion, el codigo escrito no deberia ejecutarse como tal.
        """

c=load_window() #Creo un objeto que a si vez crea la ventana de carga

Snake: Corresponde al archivo de ejecucion principal del juego, en ciertas palabras su exoesqueleto.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygame
from pygame.locals import *
import sys #Importo la libreria sys para manejar comandos del sistema
import Graficos #Importo otra libreria creada por mi
import time #Importo la libreria time para manejar tiempos
import random #importo random para ciertas acciones aleatorias
pygame.init() #Inicio pygame
ventana=pygame.display.set_mode((800,600)) #Establezco un modo de pantalla de 800x600 pixeles
pygame.display.set_caption("My Snake Game") #Establezco el titulo
graficos=Graficos.graficos(ventana) #Creo un objeto de la libreria Graficos pasandole las caracteristicas de la pantalla que ya cree

#variables
fase=0 #Esta variable define las fases del menu. Se explica mas adelante en el codigo
seleccionmenu=0 #Guarda las posibles selecciones hechas en el menu
orientacion=0 #Controla la orientacion de la serpiente. Leer el codigo mas adelante
puntuacion=0 #Maneja la puntuacion, se relaciona con el marcador. Leer y analizar codigo mas adelante
tema=1 #Define el tema por default del juego
seleccionGameOver=0 #Controla la seleccion del juego cuando el jugador ha perdido


while True: #Creo el loop principal del programa
    """Numero de Fases"""
    if fase==0: #Fase 1: Correspondiente al menu en si, al cargarse=
        graficos.Fondo() #Cargare un fondo al programa para borrar los graficos anteriores y actualizar la pantalla
        graficos.Titulo(seleccionmenu) #Carga los textos y mensajes en la pantalla principal, el parametro seleccion menu
        #funciona para manejar la posicion del sombreado segun la opcion a seleccionar en el menu. Analizar codigo del archivo graficos.
        pass
    elif fase==1: #Fase 2: Corresponde al juego en si
        graficos.Fondo() #Borra los graficos anteriores y coloca el fondo
        graficos.ScoreBoard() #Actualiza el marcador
        graficos.Drawcomida() #Dibuja la pepita de comida tras la cual debemos ir
        if graficos.DibujarSnake(orientacion)==1: #dibuja la serpiente mandando como paramentro la orientacion de la misma, esta
            #funcion devolvera un valor, si el valor es uno es que la serpiente colisiono consigo misma y perdimos
            fase=4 #Si esto pasa pasamos a la pantalla de Game Over
        pass
    elif fase==2: #Fase 2: Correspondiente al selector de Temas
        graficos.Fondo() #Borro los graficos anteriores y coloco el fondo
        graficos.temas(tema) #Despliego los textos y mando como parametro la variable tema. Analizar el archivo graficos para funcionamiento de dicho paramentro
        pass
    elif fase ==3: #Fase 3: correspondiente a los creditos
        graficos.Fondo() #Borro los graficos anteriores y coloco el fondo
        graficos.Creditos() #Muestro los textos correspondientes
        pass
    elif fase==4: #Fase 4: Correspondiente a la pantalla de Game Over
        graficos.gameover(seleccionGameOver) #Despliego los textos y mando como parametro la seleccion del juegador (continuar/rendirse). Analizar codigo

    """Comandos Pygame General"""
    for evento in pygame.event.get(): #Declaro un for para recorrer o checar toda accion por teclado y/o mouse
        if evento.type==QUIT: #Si se le pica a la x de la ventana
            pygame.quit() #Cierro pygame
            sys.exit() #Mato el proceso del programa
        elif evento.type==KEYDOWN: #Sino: si e presionado una tecla
            """Instrucciones para la fase 0"""
            if fase==0: #Chela si la variable fase a cambiado a 0, si si
                if evento.key==pygame.K_DOWN: #Checa si se presiono la tecla flecha_abajo
                    if seleccionmenu==0: #si si, si la seleccion es 0
                        seleccionmenu=1 #Cambio la seleccion a 1
                    elif seleccionmenu==1: #Si es 1 la seleccion
                        seleccionmenu=2 #La cambio a 2
                    elif seleccionmenu==2: #Misma tematica
                        seleccionmenu=0
                elif evento.key == pygame.K_UP: #Si se presiono la tecla flecha Arriba
                    if seleccionmenu==2: #Si, si, si la seleccion es 2
                        seleccionmenu=1 #cambio la seleccion a 1
                    elif seleccionmenu==1: #Misma tematica
                        seleccionmenu=0
                    elif seleccionmenu==0:
                        seleccionmenu=2
                elif evento.key == pygame.K_z: #Si se presiona la tecla z
                    if seleccionmenu==0: #Si la seleccion es 0
                        fase=1 #Entra a la fase 1
                    elif seleccionmenu==1: #Si es 1
                        fase=2 #entra a la fase 2
                    elif seleccionmenu==2: #Si es 2
                        fase=3 #Entra a la fase 3
                """Instrucciones para fase 1"""
            elif fase==1: #Si estamos en la fase 1
                """En esta fase deberemos checar constantemente las pulsaciones del teclado para dirigir a la serpiente."""
                """Imaginar la orientacion correspondiente a los angulos de un circulo. 0°:derecha 90°: Arriba 180°:Izquierda 270°:Abajo"""
                if (evento.key==K_s or evento.key==K_DOWN) and orientacion!=90: #Si se presiona K o flecha_abajo y la orientacion es diferente de 90, la condicion adicional es para evitar que se regrese por donde vino (se vaya en reversa)
                    orientacion=270 #La orientacion se setea a 270
                if (evento.key==K_w or evento.key==K_UP) and orientacion!=270:#Mismas tematicas
                    orientacion=90
                if (evento.key==K_a or evento.key==K_LEFT) and orientacion!=0:
                    orientacion=180
                if (evento.key==K_d or evento.key==K_RIGHT) and orientacion!=180:
                    orientacion=0
                """Instrucciones para fase 2"""
            elif fase==2:
                if evento.key==pygame.K_DOWN: #Si se presiona la tecla Flecha_Arriba
                    if tema==1: #Si el tema es 1
                        tema=2 #Cambia al tema 2
                    elif tema==2: #Mismas tematicas
                        tema=3
                    elif tema==3:
                        tema=4
                    elif tema==4:
                        tema=1
                elif evento.key == pygame.K_UP: #Si es flecha abajo
                    if tema==4: #Misma tematica que el anterior pero en orden inverso
                        tema=3
                    elif tema==3:
                        tema=2
                    elif tema==2:
                        tema=1
                    elif tema==1:
                        tema=4
                elif evento.key == pygame.K_x: #Si se presiona x
                    fase=0 #Se vuelve al menu o fase 0
                """Instrucciones para fase 3"""
            elif fase==3: #Fase 3: Creditos
                if evento.key==pygame.K_x: #Si se presiona x
                    fase=0 #Regresa al menu
                """Instrucciones para fase 4"""
            elif fase==4: #Fase 4: Game Over
                if evento.key==pygame.K_DOWN: #Si se presiona Flecha_Abajo
                    if seleccionGameOver==0:#Si la seleccion es 0
                        seleccionGameOver=1 #cambio la seleccion a 1
                    elif seleccionGameOver==1: #Y continua las mismas tematicas
                        seleccionGameOver=0
                elif evento.key == pygame.K_UP:
                    if seleccionGameOver==0:
                        seleccionGameOver=1
                    elif seleccionGameOver==1:
                        seleccionGameOver=0
                elif evento.key == pygame.K_z: #Si se presiona z
                    if seleccionGameOver==0: #Si la seleccion finalizo en 0
                        fase=1 #Regreso a la fase 1
                    elif seleccionGameOver==1: #Si no
                        fase=0 #Regreso al menu
                    del graficos.lrecs[:] #Tras esto borro el array lrecs. Analizar codigo en Graficos
                    orientacion=random.choice([0,180]) #Y la proxima vez que se cargue el juego estableceremos una orientacion al azar
    pygame.display.update() #Actualizo la pantalla
    time.sleep(0.07) #Duerme el programa por 0.07 segundos
    pass

Graficos:

import pygame
from pygame.locals import *
import time
import random
import sys
pygame.init()

#Defino las librerias, no las volvere a comentar puesto su uso ya se definio con anterioridad

def settext(text,font,size,color): #Defino una funcion para manejar el texto y su formato
    """text: Texto a escribir
    font: Fuente a seleccionar
    size: tamano de letra
    color: color de letra"""
    if font==1: #Si selecciono esta fuente y la guardo en una variable Fuente
        Fuente=pygame.font.Font("fuentes/8-BIT WONDER.TTF",size) #Debera cargar esta fuente
    if font==2: #Misma tematica
        Fuente=pygame.font.Font("fuentes/04B_30__.TTF",size)
    if font==3:
        Fuente= pygame.font.Font("fuentes/Fipps-Regular.otf", size)
    if font==4:
        Fuente= pygame.font.Font("fuentes/baby blocks.ttf", size)
    texto=Fuente.render(text,True,color) #Creo el texto, con el color deseado
    return texto #Retorno el texto ya creado con la fuente deseada

class graficos(): #Defino la clase objetos
    """Defino las variables"""
    ventana=object #Defino una variable ventana que contendra las caracteristicas mandadas por parametro de la clase Snake
    Pcomida = (200, 200) #Defino las coordenadas iniciales de la comida de la serpiente
    puntuacion=0 #Seteo la puntuacion inicial en 0
    secciones= [(80, 80), (80, 100), (80, 120), (80, 140), (80, 160), (80, 180), (80, 200), (80, 220), (80, 240),(80, 260), (80, 280), (80, 300)] #Defino las coordenadas iniciales de los cuadros queconforman el cuerpo de la serpiente, cada par es un cuadro
    lrecs=[] #Defino este array que contendra los cuadros o cuerpo de la serpiente
    selector=0 #Usado para manejar selecciones.

    fondo = (1, 50, 102) #Defino el color del fondo
    COLOR_LETRA = (255, 255, 255) #El color de Letra
    COLOR_OBJETOS = (216, 27, 5) #El color de objetos como los sombreados y esas cosas

    def __init__(self,ventana): #Creo el constructor
        self.ventana=ventana #Copeara lo mandado como parametro al atributo ventana
        pass
    def Fondo(self): #Defino la funcion que dibuja el fondo
        self.ventana.fill(self.fondo) #Dibujo el fondo
    def Titulo(self,seleccion): #Defino la funcion que despliega el titulo "Menu principal"
        """Seleccionmenu se convierte en el parametro seleccion de la funcion"""
        if seleccion==0: #Si la seleccion es 0
            pygame.draw.rect(self.ventana,self.COLOR_OBJETOS,(110,200,430,40)) #Dibujara un rectangulo consombreado sobre estas coordenadas
        elif seleccion==1: #Si es 1
            pygame.draw.rect(self.ventana,self.COLOR_OBJETOS,(110,250,450,40)) #Sobre estas coordenadas
        elif seleccion==2: #Y asi
            pygame.draw.rect(self.ventana,self.COLOR_OBJETOS,(110,300,430,40))

        #Y coloco todos los textos en pantalla
        self.ventana.blit(settext("Snake",1,65,self.COLOR_LETRA),(20,50))
        self.ventana.blit(settext("UN JUGADOR",2,45,self.COLOR_LETRA),(120,200))
        self.ventana.blit(settext("TEMAS",2,45,self.COLOR_LETRA),(120,250))
        self.ventana.blit(settext("CREDITOS", 2, 45, self.COLOR_LETRA), (120, 300))
        self.ventana.blit(settext("Presione Z para seleccionar",1,15,self.COLOR_LETRA),(10,550))
        pass

    def temas(self,tema): #Defino la funcion que controla los temas
        if tema==1: #Si es tema seleccionado es el numero 1
            #Defino el fondo, color de letra y objetos con estos valores
          self.fondo=(1,50,102)
          self.COLOR_LETRA=(255,255,255)
          self.COLOR_OBJETOS=(216,27,5)
          pygame.draw.rect(self.ventana, self.COLOR_OBJETOS, (18, 100, 280, 50)) #Y dibujo un rectangulo de color establecido sobre la seleccion elegida
        elif tema==2: #Misma tematica
            self.fondo=(155,16,0)
            self.COLOR_LETRA=(255,255,255)
            self.COLOR_OBJETOS=(0,142,254)
            pygame.draw.rect(self.ventana, self.COLOR_OBJETOS, (18, 150, 280, 50))
        elif tema==3: #Misma tematica
            self.fondo=(118,56,187)
            self.COLOR_LETRA=(255,255,255)
            self.COLOR_OBJETOS=(255,131,0)
            pygame.draw.rect(self.ventana, self.COLOR_OBJETOS, (18, 200, 280, 50))
        elif tema==4: #Misma tematica
            self.fondo = (0, 214, 0)
            self.COLOR_LETRA = (255, 255, 255)
            self.COLOR_OBJETOS = (255, 195, 0)
            pygame.draw.rect(self.ventana, self.COLOR_OBJETOS, (18, 250, 280, 50))

        #Dibujo en pantalla los textos y elementos con los valores actualizados
        self.ventana.blit(settext("Selecctor de Tema", 2, 45, self.COLOR_LETRA), (20, 10))
        self.ventana.blit(settext("Tema 1", 1, 45, self.COLOR_LETRA), (20, 100))
        self.ventana.blit(settext("Tema 2", 1, 45, self.COLOR_LETRA), (20, 150))
        self.ventana.blit(settext("Tema 3", 1, 45, self.COLOR_LETRA), (20, 200))
        self.ventana.blit(settext("Tema 4", 1, 45, self.COLOR_LETRA), (20, 250))
        self.ventana.blit(settext("Presione x para Guardar y Regresar", 1, 15, self.COLOR_LETRA), (10, 550))


    def Creditos(self): #Funcion que maneja los creditos
        #Simplemente despliega los textos correspondientes
        self.ventana.blit(settext("CREDITOS: ",4,80,self.COLOR_LETRA),(10,30))
        self.ventana.blit(settext("Autor: Braulio Lobo, Sin Fines de Lucro",3,15,self.COLOR_LETRA),(20,250))
        self.ventana.blit(settext("Link: https://www.youtube.com/watch?v=Dm32c_G_Cik",3,15,self.COLOR_LETRA),(20,280))
        self.ventana.blit(settext("Modificado por: Ambrocio Isaias Laureano Castro",3,15,self.COLOR_LETRA), (20, 320))
        self.ventana.blit(settext("Presione x para volver",1,15,self.COLOR_LETRA), (10, 550))

    def gameover(self,seleccion): #Maneja la pantalla de GameOver
        """seleccionGameOver se maneja aqui como el parametro seleccion"""
        self.ventana.blit(settext("Game Over",1,56,self.COLOR_LETRA), (140, 250))
        if seleccion==0: #Si la seleccion es 0 "Continuar"
            #Despliego los textos
            self.ventana.blit(settext("Continuar",1,16,self.COLOR_OBJETOS), (140, 350)) #Pero pinto el color de letra del valor seleccionado de otro color segun el tema del juego
            self.ventana.blit(settext("Me Rindo",1,16,self.COLOR_LETRA), (140, 450))
        elif seleccion==1: #Misma tematica "Merindo"
            self.ventana.blit(settext("Continuar", 1, 16,self.COLOR_LETRA ), (140, 350))
            self.ventana.blit(settext("Me Rindo", 1, 16, self.COLOR_OBJETOS), (140, 450))

        pass
    def DibujarSnake(self,orientacion): #Creo la funcion que dibujara y controlara a la serpiente
        for i in self.secciones: #creo un for que recorrera todas las secciones de la serpiente
            x, y = self.getxy(i) #Obtengo las de cada seccion y las guardo en las variables X y Y

            #Despues agrego a la variable Lrecs (que es como el array que refiere al cuerpo construido de la serpiente) la seccion correspoendiente a dibujar
            self.lrecs.append(pygame.draw.rect(self.ventana,self.COLOR_LETRA,(x+1,y+1,18,18))) #Le digo que se desplegara en la ventana, con el mismo color que las letras, en tal coordenada x y tal coordenada y, con 18 pixeles de ancho por 18 de alto
            if len(self.lrecs)==len(self.secciones): #cada que se repita el ciclo, si el cuerpo de la serpiente es igual de largo a el numero de secciones
                """En otras palabras si ya se dibujo la cola de la sepriente"""
                del self.lrecs[0] #Borro una seccion de la serpiente para simular que va avanzando
            if self.colision() == 1: #Si por casualidad esta choca con una parte de su cuerpo (checar la funcion colision para mayor entendimiento)
                return 1 #Retornaremos 1 para cambiar de fase en el archivo Snake para mostrar la pantalla de GameOver
            """si no se cumple ningula de las anteriores condiciones dibuja la cola o una seccion mas de la serpiente"""
            #Pero antes de eso comprovamos si la serpiente  ha salido de la pantalla
            if self.secciones.index(i)==len(self.secciones)-1: #entonces si ya se ha dibujado la cola de la serpiente
                """Checamos donde se dibujo por ultima vez"""
                if x==0 and orientacion==180: #Si la ultima coordenada en x=0 y va hacia la izquierda
                    x=1000 #La proxima coordenada a usar en x=1000 correspondiente a aparecer del lado derecho de la pantalla
                elif x==800 and orientacion==0: #Si la ultima coordenada en x=800 y va hacia la derecha
                    x=0 #La proxima coordenada a usar en x=0 es decir aparecera la serpiente por el lado izquierdo de la pantalla

                """Mismo aplica para la orientacion en y en forma similar"""
                if y==0 and orientacion==90:
                    y=800
                if y==800 and orientacion==270:
                    y=0

                #Casi Por ultimo
                if orientacion==0: #Si la orientacion es 0
                    self.secciones.append((x+20,y)) #La proxima seccion se dibujara en las coordenadas x+20, y es decir sumaremos 20 pixeles al eje x
                #Situaciones similares con las demas condiciones
                elif orientacion==90:
                    self.secciones.append((x, y-20))
                elif orientacion==180:
                    self.secciones.append((x-20, y))
                elif orientacion==270:
                    self.secciones.append((x, y+20))

                #La letra i dado las caracteristicas del for un python almacenara las coordenadas de la secciona a dibujar de la serpiente
                #en ese instante
                if i!= self.Pcomida: #Si no concide con las coordenadas de donde esta la comida
                    del self.secciones[0] #Borro una coordenada de las secciones para almacenar una nueva al repetir el ciclo
                    del self.lrecs[0] #Borro una parte de la serpiente para meter otra el repetir el ciclo
                    return self.Pcomida #Retorno la posicion de la comida
                else: #Si la cabeza colisiona con la comida, es decir coinciden las coordenadas
                    self.puntuacion=self.puntuacion+1 #Sumo un ponto
                    self.Pcomida= (random.randint(0,25)*20,random.randint(0,25)*20) #Coloco otra pepita de comida en coordenadas random multiplicando los rangos por 20 para que sean multiplos de coordenadas que aparescan en la pantalla y no fuera de la ventana
                    self.Drawcomida() #Mando a dibujar la comida en sus nuevas posiciones
                break
        return 0 #Si llego a este punto significa que la serpiente no se comio a si misma asi que retorno 0

    def Drawcomida(self):
             pygame.draw.rect(self.ventana, self.COLOR_OBJETOS, (self.Pcomida[0], self.Pcomida[1], 18, 18))

    def ScoreBoard(self):
            self.ventana.blit(settext("Score: " + str(self.puntuacion),1,15,self.COLOR_LETRA), (10, 10))

    def getxy(self,c):
        x=c[0] #guardo en x el valor del primer valor del primer par de coordenadas del array secciones
        y=c[1]#guardo en Y el valor del segundo valor del primer par de coordenadas del array secciones
        return x,y #retorno las coordenadas

    def colision(self):
        """Ahora, si suponemos que en el array lrecs se esta guardando el cuerpo de la serpiente entonces:
        el cuerpo debera estar desde la posicion 0 hasta la penultima posicion
        y la cabeza deberia ser la ultima posicion del array

        0 seccion
        X Cabeza
        ~ Lengua jejej

        0 1 2 3 4 5 6
        0 0 0 0 0 0 X~

        """
        cuerpo=self.lrecs[0:len(self.lrecs)-2] #En fin obtengo las coordenadas de todos los cuadros que corresponden al cuerpo
        cabeza=self.lrecs[len(self.lrecs)-1] #Obtengo las coordenadas de la cabeza
        if cabeza in cuerpo: #Si las coordenadas de la cabeza coinciden con alguna coordenada del cuerpo se supone que perdio
            self.puntuacion=0 #entonces la puntuacion se resetea a 0
            del self.secciones[:] #Borro todas las secciones
            #Y vuelvo a colocar las coordenadas iniciales de donde empezo la serpiente
            self.secciones=[(80, 80), (80, 100), (80, 120), (80, 140), (80, 160), (80, 180), (80, 200), (80, 220), (80, 240),(80, 260), (80, 280), (80, 300)]
            return 1 #Y devuelvo un 1, para que se retorne en la funcion DibujarSnake para que a su vez retorne el valor 1 para cambiar a la fase 4 en el archov Snake
        return 0 #Si no sucede solo retorno 0 para que continue normalmente el juego

Imagenes: Solamente para cargar la imagen del archivo LOAD_SCREEN, este codigo no lo comentare dado que viene ya en varios programas anteriores

from PIL import Image,ImageTk
import Tkinter

def get_imagen(nombre,x,y):
    imagen = Image.open(nombre)
    imagen.thumbnail((x,y), Image.ANTIALIAS)
    return ImageTk.PhotoImage(imagen)

Comentarios

  1. muy buen trabajo, eres un exelente programador, yo estoy empezando en esto, me puedes decir como llevo tu creacion a un ejecutable .exe?

    ResponderEliminar
    Respuestas
    1. Hola Legner Morales, gracias por tu comentario. En cuanto a tu pregunta:

      Para crear un ejecutable de python para windows realmente existen muchar formas de hacerlo, aunque realmente no es dificil, una forma de hacerlo es por medio de un modulo de python llamado pyinstaller, el cual basicamente se encarga de generar los archivos necesarios para obtener un executable para windows.

      Eliminar

Publicar un comentario