Programación de juegos en Python - Tutorial 1
En este tutorial vamos a tomar contacto con el lenguaje python, y hacer un jueguecito muy simple en modo consola.
El objetivo es que nos familiaricemos con el lenguaje y veamos el sistema de la mayoria de los juegos, esto es:
procesar -> mostrar -> interactuar -> procesar ….
La idea del juego es que el ordenador elije un numero y nosotros tenemos que adivinarlo en menos de los intentos que le digamos.
El ordenador nos dará pistas de si nuestro numero es mayor o menor que el secreto.
Como veis, es muy simple, apenas 20 lineas …
Podeis descargaros el código fuente de aquÃ: Código fuente tutorial 1
IMPORTAR LIBRERIAS
El primer paso es importar las librerias (o bibliotecas) que vayamos a necesitar, en este caso usaremos la libreria random, que nos da la posibilidad de generar números aleatorios (esto es una de las bases de los juegos, los números aleatorios, ya hablaremos de las semillas, y que no son tan “aleatorios” como parecen más adelante).
Esto se hace con la siguiente instrucción:
import random
Las sentencias acaban tal cual, nada de puntos y comas al final. (A los que vengan de otros lenguajes les costará acostumbrarse a esto).
LA FUNCIÓN MAIN
Para ser clásicos y ordenados, crearemos una función main, que es la principal del programa, la que realizará todas las tareas.
Es conveniente acostumbrarse a trabajar con funciones, para tener mas abstracción, esto es, dividir el problema grande en problemas más pequeños (divide y vencerás).
En este juego solo vamos a usar la función principal (main).
Las funciones se definen de la siguiente manera:
def main():
# Esta es la funcion principal
#Esto no está dentro de la funcion principal
if __name__ == ‘__main__’: main()
Aquà viene una de las carácteristicas de python, y es que no usa llaves para englobar, usa código sangrado.
Asà definimos la función con def, luego el nombre de la funcion, despues dos puntos, y todo lo que esté sangrado pertenecerá a la función.
Todo lo que empiece por almuadilla (#) será interpretado como comentario y no vale más que para informar a quién lo lea.
La ultima instrucción es un truco para que se ejecute el main si todo va bien.
EMPEZAMOS EL DESARROLLO
Dentro de la función main, cambiamos el comentario por el siguiente código:
def main():
numero_secreto = random.randint(1, 60)
print “\nTienes que adivinar un numero !!!!\nEn cuantos intentos crees que lo conseguiras?”
intentos = input(”Introduce numero de intentos: “)
print “Bien asi que lo haras antes de “, intentos, ” intentos …\nA ver si es verdad !!\n”
acertado = 0
cont=1
En la primera instrucción generamos un número aleatorio y entero entre 1 y 60 y lo guardamos en la variable numero_secreto.
Informamos al usuario mediante la función print. Todo lo que vaya entre comillas aparecera en pantalla, y el retorno de carro es \n.
En la tercera instrucción le pedimos al usuario que nos de el número de intentos que tendrá y lo guardamos en la variable intentos.
NOTA: no pongais ningún caracter de salto de linea en la función input, o no funcionará.
Por último mostramos al usuario el numero de intentos y lo retamos a jugar.
Cabe destacar que para mostrar una varible en la funcion print hay que separar por comas la función.
La función print es mucho, pero muho más completa de lo que parece, al igual que input y su hermana gemela raw_input, estarÃa bién echarles un ojo …
Por último decimos que aún no lo ha acertado (acertado=0) y que va a realizar el primer intento (cont=1)
EL BUCLE PRINCIPAL
Este es el nucleo del juego, donde se realiza lo principal, vamos a ver el código:
while (not acertado and cont< =intentos):
print "\nIntento numero ", cont
num_user = input("Introduce un numero (entre 1 y 60): ")
if(num_user == numero_secreto):
acertado=1
break
elif(num_user > numero_secreto):
print “\nEl numero secreto es MENOR que ” , num_user
elif(num_user < numero_secreto):
print “\nEl numero secreto es MAYOR que ” , num_user
cont = cont + 1
Es un bucle while, que significa “mientras”, en este caso su tradución serÃa:
Mientras no lo haya acertado y el numero de intentos sea menor o igual a los que dijo, haz …
Y se repetirá una y otra vez hasta que pase alguna de las condiciones de salida.
Luego se informa al usuario de los intentos que lleva y le pedimos un nuevo número.
Ahora comparamos el número que nos ha dado con el secreto mediante la sentencia if (que se traduce como: SI “condicion”, haz …).
Si ha adivinado el número marcamos que ha acertado y utilizamos la sentencia break, que se encarga de parar el bucle que la contiene y salir (en este caso no harÃa falta, pero es necesario conocerla para evitar los “bucles infinitos sin control”).
La siguiente sentencia solo se ejecuta si no es correcta la de arriba, asi, si no es el numero secreto, miro si es mayor, y si lo es informo al usuario, sino, miro si es menor (aunque por lógica no haga falta) he informo al usuario.
Por último aumento el numero de intentos.
Y volveriamos al while … mostrar -> interactuar -> procesar -> mostrar …
GAME OVER
Si ha salido del bucle puede ser por dos motivos, que haya acertado el número, o que se le hayan acabado los intentos, vamos a ver cómo sabemos que ha ocurrido …
if(acertado):
print “\nGUUAAAUUU !!!! Lo acertaste !!!\n\n El numero secreto era ” , numero_secreto
print “\n\n Gracias por jugar !!!”
else:
print “\nOOOOHHHHHH !!!! Lo siento, pero NO has acertado …\nEl numero secreto era ” , numero_secreto
print “\n\n Gracias por jugar !!!”
Simple, miramos si ha acertado, y si es asi, mostramos mensaje de ganador, sino, mensaje de perdedor.
NOTAS FINALES
Para los que ya hayan programado les habrá parecido muy simple, muy básico, pero era necesario un juego en consola para acostumbrarnos un poco a python, pero ya no habrá más juegos por consola, los siguientes seran en sdl (pygame).
ESTE JUEGO NO ESTA TERMINADO …
Si quereis practicar un poco mientras salen nuevos tutoriales, podeis probar las siguientes mejoras:
- Cuando se acaba el juego, el jugador podrÃa querer volver a jugar, ¿podrias solucionar eso?
- Como todo programa informático, este script tiene bugs, y uno de ellos es que si en vez de insertar un número, introducimos una cadena (tu nombre, por ejemplo) el programa peta (petar es que no va, que se rompe). ¿Podrias solucionar esto? ( VendrÃa bién mirar la función type() … quizas te sirva de algo).
Como siempre, cualquier error, corrección y mejora serán bienvenidos.


August 21st, 2005 en 9:35 pm
Estoy deseando echarle un vistazo a la próxima entrega, aunque espero vaya un poco más cargadita ;D
August 22nd, 2005 en 3:18 pm
No esta mal para ser la primera entrega i el primer contacto con el lenguaje, aunque como bien dices, esto es algo bastante basico que, si has programado alguna vez, es lo primero que programas. A ver que tal el Proximo Capitulo, SDL. Esto se puede poner interesante…
Saludos
August 23rd, 2005 en 3:41 am
Pues yo antes de nada echarÃa un ojo por aquà para aprender más o menos cómo vá esto del python, porque asà en frÃo, hay cosas que pueden no entenderse. =) Me parece una iniciativa muy interesante ésto de enseñar a programar para juegos y espero que el tutorial no se quede sólo en sdl, y se enseñe algún aspecto en el que se pueda tirar de algo más avanzado, del tipo cliente/servidor o algo asÃ. =P EstarÃa bien que un servidor pensara un número y entre 3 o 4 haya que acertarlo el primero. Tampoco estarÃa mal sacar con otro .py el número que ha pensado el .randint, o cosas asÃ.
September 3rd, 2005 en 5:14 pm
¡Genial! TenÃa ganas de aprender Python, asà que me parece una buena manera, mediante juegos.
Por cierto, hay algunas faltas tipográficas y una negrita sin cerrar a medio camino…
September 10th, 2005 en 5:39 pm
[…] /08/21/programacion-de-juegos-con-python-presentacion” target=”_parent”>, primera parte y segúnda parte. La primera parte es ba […]
September 16th, 2005 en 3:50 pm
EL PATETICO PYTHON
De python se dice:
“El mejor lenguaje de programacion que se ha podido crear”
“Es como debiera ser java”
“El reemplazo de Perl”
“El lenguaje script perfecto”
Si es tan bueno como dicen, porque para el entorno grafico debe llamar a otro lenguaje de programacion para que le ayude a hacer lo que el no puede por si solo?
Es como si el GUI de Java necesitara de VB para hacer las aplicaciones de su maquina virtual.
Se que Python es script, y que TCL tambien lo es, acepto que usen librerias compiladas en C/C++ porque ninguno de ellos por si mismo compila, se que python inicio antes que TCL y que es mas rapido y robusto, pero deja mucho que desear el que las versiones libres de python que se consiguen traigan dentro al lenguaje TCL.
Es como si para que funcionara Linux, necesitara arrancar primero FreeBSD.
Para mi Windows sigue siendo un gestor de ventanas sobre DOS, que aunque hayan intentado ocultarlo, ni siquiera han podido hacer un instalador de WIndows sin DOS incluido.
No hay alguna API grafÃca que haya sido hecho en python propiamente, y que se pueda añadir al python sin que dependa de otros lenguajes??
September 16th, 2005 en 11:44 pm
Rodrigo, python es un lenguaje más, y como programador lo veo como una herramienta, me vale para algo determinado, si no te gusta, no te es cómodo o es “eticamente incorrecto” usas otro (esto es lo bueno de la diversidad), verás que todos en el fondo son iguales y todo depende del uso que le vayas a dar.
Y he de admitir que para aprender a hacer juegos va de maravilla, facil, sin problemas de compilación, multiplataforma, si vamos a hacer juegos en 2D que “cualquier hardware” puede soportar … ¿Para que queremos un destornillador de 100 € si con el de 1 € podemos apretar el tornillo sin problema?
Al fin y al cabo, esto es un tutorial para aprender a programar juegos, y no para aprender a programar en python.
September 24th, 2005 en 6:30 pm
Para poder escribir correctamente en castellano, esto es para poner acentos y demás, hay que poner:
# -*- coding: iso-8859-1 -*-
En la primera o segunda lÃnea del fichero adivinaNumero.py
La información completa se puede consultar en:
http://www.python.org/peps/pep-0263.html
Un saludo.
October 1st, 2005 en 10:28 am
Muchas gracias Antoine, lo probaré en el siguiente.
October 3rd, 2005 en 5:22 pm
parece que a Rodrigo no le gusta nada, este no sabe ni lo que quiere, para que se mete en cosas que no le agradan, mira he probado python y me va de perlas, no más que tengo excusas con mi distro de suse por no contar con ERIC ni BOA pero asà le jalo con kdevelop o otro IDE, aquà estamos para colaborarnos y corregirnos linux es un sistema genial, a pesar de que guindos nos gane la partida con la aceleración disponible para los juegos, pero como sabemos eso no es culpa de los programadores de LInux sino de los capitalistas ingenieros que crean las tarjetas 3D y los videojuegos.
cuando comprenderan que la sociedad tiene que ser libre. amén.
November 3rd, 2005 en 10:59 pm
Amen hermano (XD)
mmm,,, al parecer yo sobro aqui… …uso windows….
Pues esto de los tutoriales esta vien, todavia no cheko los demas, pero espero ver alguno donde muestre como hacer un rpg o algo por el estilo.
November 13th, 2005 en 3:32 am
SOY MUY NUEVO EN ESTO, NUNCA HABIA VISTO A PYTHON, PERO EL EJEMPLO ES EXCELENTE, MUY ILUSTRATIVO
FELICIDADES.
January 29th, 2006 en 10:56 pm
- Cuando se acaba el juego, el jugador podrÃa querer volver a jugar, ¿podrias solucionar eso? esto como se hace?? esque lo he intentao pero no me sale
February 19th, 2006 en 8:22 pm
facil al final de todo pones la funcion inicial que guarda todo el proceso osea main() y taran!!!!
el programa corre again =) lo estoy haciendo con algunas modificaciones las hare pequeñas para q el programa valla creciendo ^^ ok?
February 19th, 2006 en 8:23 pm
por cierto me refiero a la pregunta ” Cuando se acaba el juego, el jugador podrÃa querer volver a jugar, ¿podrias solucionar eso? esto como se hace?”
August 7th, 2006 en 9:42 am
Respondiendo a la primera pregunta:
[…]
kkk = raw_input(’¿Quieres volver a intentarlo (s/n)? ‘)
if kkk == ’s’:
main()
else: pass
A lo segundo, simplemente tienes que tratar el raw_Imput como si preguntara por una cadena de caracteres, asà que para que no de errores hay que anidarlo en str:
str(raw_input(’Nº de intentos: ‘))
[…]
Y problema solucionado.
August 7th, 2006 en 2:17 pm
Perdón, la segunda respuesta no es del todo correcta; si bien con str no da error, no se puede operar con la variable que la define, que es “intentos”.
Asà que, en mi opinión, lo mejor es algo como:
intentos = input(â€Introduce numero de intentos: “)
if type(intentos) == int: pass
else:
print ‘Esto no es ningún numero’
August 31st, 2006 en 5:00 pm
me gusta el tuto, si kereis aprender python muy rapidamente pasaros por esta pagina, de aqui aprendi:
http://www.freenetpages.co.uk/hp/alan.gauld/spanish/
Learning to program
GRACIAS
September 4th, 2006 en 1:44 pm
el link para bajar el codigo fuente no funciona
September 5th, 2006 en 5:10 pm
python es una huevada
November 11th, 2006 en 9:09 pm
ESTOIY LEYENDOE STO Y ESTA ABURRIDO ALEX SE COPIO ESTO Y NO LE FUNCIONO JEJE
January 2nd, 2007 en 5:25 pm
… como ejecuto el juego???
January 4th, 2007 en 8:39 pm
Para Dokan: en Linux, guarda el código fuente en AdivinaNumero.py, abre una consola en esa carpeta y escribe python AdivinaNumero.py
En Windows, no me acuerdo, supongo que tienes que guardar el fuente y ejecutarlo desde el IDE (creo)
January 13th, 2007 en 11:05 pm
he conseguido q funcione retocando algunas cosillas (por cierto, el link al archivo con el código fuente no va…)
respecto al comentario de Antoine, yo he solucionado el tema de los acentos y eñes poniendo por consejo de minid en este post :
#!/usr/bin/python
# -*- coding: utf-8 -*-
el problema es que todavÃa no consigo que no pete cuando se le da una cadena en vez de un número, seguà los cosejos de ZladMat, aunque como no funcionaba cambié el if por un while:
while type(intentos) int:
print “Esto no es ningún número!!!\n Vuelve a intentarlo….\nIntroduce número de intentos: ”
pero sigue sin funcionar y no se muy bien que más puedo intentar, (soy novato!!!)
algún consejo más???
gracias por el tuto
un saludo
February 10th, 2007 en 1:29 am
Hola, me gusto mucho pero le falto algo, quisiera saber como hago ahora para guardar lo que hice y probarlo despues
February 14th, 2007 en 7:28 pm
Es facil, copia el programa en un editor de textos, vi, joe, el bloc de notas, el que mas te guste. Guardalo con la extensión “.py” y siempre que quieras lo podras modificar o ejecutar. Por si acaso, para ejecutar un modulo es F5.
Un saludo
March 30th, 2007 en 10:12 pm
Me temo que el enlace del código fuente no funciona, a ver si podéis subirlo de nuevo pronto ^__^. Muchas gracias por este tutorial. Hace tiempo que dejé un proyecto en Fenix con el que estaba muy ilusionado y espero que con Pygame pueda avanzarlo un poco
April 17th, 2007 en 4:55 am
soy nuevo en esto quise aprender programacion y me intereso python porq dice q es mas funcional pero no lo entiendo nada!!
para hacer paginas webs y quiero poner algo en la parte superir digamos, dice q le pongamos algo entre las plantillas pero en el caso de python no se usa la misma forma y por eso no lo entiendo y quiero q alguien me allude para poder entenderlo, quiero aser juegos y porgramas pero no tengo idea de como desarrollar lo q se porfas alludenme!!!
aaron_1030@yahoo.com aaron-1030@hotmail.com aaron1030@gmail.com
July 26th, 2007 en 5:12 pm
el sexo es lo mejor
July 15th, 2008 en 7:58 pm
Hola, me gustó mucho este primer tuto, voy a probar con los otros
El tema de preguntar al usuario si desea seguir jugando lo solucioné “envolviendo” todo el programa en un ciclo q se ejecuta mientras el usuario no desee salir.
El error que tira cuando se ingresa una letra en los lugares en que se pide un número lo traté con excepciones (aunq tuve q investigar un poco para eso ya que no está tratado en el tuto).
Suerte.