Ayuda con python (tres en rayas)

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

Ayuda con python (tres en rayas)

Notapor c0na » Vie Oct 29, 2010 1:49 am

Hola amigos, es primera vez que posteo, siempre seguia el foro como visitante pero esta vez necesito su ayuda asi es que me registre.

En resumen necesito hacer el juego 3 en raya en python, soy principiante y solo se cosas basicas por lo demas se me da mejor hacer cosas matematicas que este tipo de programas con imagenes :S. Ya que me recomiendan que lo haga con funciones graficas, me piden lo siguiente:

El juego se inicia con un menu.
-LA PRIMER OPCION DEL MENU es solicitar el nombre del jugador representado por la cruz, se busca en el archivo records.txt y si no existe se lo agrega, se realiza lo mismo con el jugador representado por el circulo y se vuelve al menu.

-LA SEGUNDA OPCION DEL MENU es jugar, construya el tablero de juego y cada jugador por turno coloca una cruz o un circulo hasta completar tres en una linea o no queden cuadros vacios. El juego termina cuando uno de los jugadores consigue alinear sus tres figuras en una linea, o no quedan mas cuadros vacios en cuyo caso no hay ganador y concluye la partida.
*Si el jugador gana se incrementa su record, mostrando la posicion en el record de partidas ganadas y aceptando. se concluye el partido, se graba el record y se retorna al menu.

-LA TERCER OPCION DEL MENU es salir del juego, donde se termina la ejecucion del programa




Aca dejo el archivo records.py
http://www.mediafire.com/?hpgdfqmbm5tf9dv

y la idea que tengo o lo que llevo del programa, para ver quien me puede dar una mano...
http://www.mediafire.com/?6y8f49vsv26ogc1

(no encontre ninguna opcion para adjuntar cosas asi que las subi a mediafire :P)

Espero que alguien me pueda ayudar, desde ya muchas gracias chicos (:
Avatar de Usuario
c0na
 
Mensajes: 7
Registrado: Vie Oct 29, 2010 1:39 am

Re: Ayuda con python (tres en rayas)

Notapor carlostex » Vie Oct 29, 2010 2:51 am

Hola bienvenido.

Cual es tu duda específicamente, o que es lo que estas buscando, por que dejas los archivos de lo que ya tienes pero que hacemos con eso, ¿cuales son tus dudas?. si estas comenzando me imagino que te preguntarás como manejar gráficos, pySFML es bueno, y básicamente todo lo demás es pura lógica del juego, generalmente si eres bueno en matemáticas se te hará fácil organizar las instrucciones para hacer que todo funcione.

Para distribuir tu código te recomiendo usar sourceforge, que maneja el svn, averigua en internet como manejarlo es fácil, y también lo es distribuirlo. Es para subir tu código el cual podrás actualizar y descargar, además que es mas seguro por si le pasa algo a tu pc
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: Ayuda con python (tres en rayas)

Notapor c0na » Vie Oct 29, 2010 4:44 am

Hola carlostex (: primero que nada gracias por la bienvenida y por responder, pero te cuento que se te paso una O... porque soy niña ^^

Mi duda es como hago para trabajar con funciones graficas, osea se hacer el menu que me piden o almenos tengo una idea de como manejar lo de los datos al solicitar el nombre de cada jugador, mi problema esta en la segunda opcion. No tengo idea como hacer ese juego :/

Navegando por internet encontre unos cuantos ejemplos del mismo "tres en raya", pero ninguno con grafica todos eran en texto :(

Me podrias dar una mano?

Los programas que me dices no creo que los pueda usar ya que es un trabajo para la facu y todo lo que puedo usar es lo que me han enseñando nada mas. Y nos estamos guiadon por el libro de "Introducción a la programacion con python" (Andrés Marzal - Isabel Gracia) y lo ultimo que nos enseñaron es "Tipos estructurados: registros y ficheros"
Avatar de Usuario
c0na
 
Mensajes: 7
Registrado: Vie Oct 29, 2010 1:39 am

Re: Ayuda con python (tres en rayas)

Notapor Juanxo » Vie Oct 29, 2010 10:31 am

buenas c0na:

Lo primero bienvenida. En cuanto a tu problemilla, deberías especificar que tipo de gráficos te piden ( por consola, con ventanas como los juegos típicos u otro tipo). Básicamente lo de hacer uno con ventanas sin una librería externa me parece complicado.

Aquí tienes un post antiguo de un tres en raya: viewtopic.php?f=12&t=457

Un saludo
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Ayuda con python (tres en rayas)

Notapor algarafa » Vie Oct 29, 2010 11:54 am

¡Bienvenido a losersjuegos! Veo que habeís sacado a relucir mi antiguo tres en raya =) La verdad es que fijo que los hay mucho mejor escritos que ese, además de que los links que hay en ese post son antiguos y ya no funcionan. Si estás muy interesado en el ejemplo puedo buscar el CD en el que lo tengo y pasarte un link nuevo.
http://liberatumundo.wordpress.com/
Avatar de Usuario
algarafa
 
Mensajes: 135
Registrado: Lun Oct 27, 2008 6:12 pm
Ubicación: España

Re: Ayuda con python (tres en rayas)

Notapor hugoruscitti » Vie Oct 29, 2010 1:59 pm

c0na escribió: Y nos estamos guiadon por el libro de "Introducción a la programacion con python" (Andrés Marzal - Isabel Gracia) y lo ultimo que nos enseñaron es "Tipos estructurados: registros y ficheros"


m... en ese libro usan pythonG, supongo que los gráficos para crear las figuras del 3 en raya los
tendrías que obtener de ahí:

http://www3.uji.es/~dllorens/PythonG/

Imagen
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Ayuda con python (tres en rayas)

Notapor c0na » Vie Oct 29, 2010 5:55 pm

hola a todos!.. mil gracias por responder (:
tiene razón hugoruscitti con eso de que uso ese programa por el libro, y lo de graficos no lo tengo muy claro =( pero por suerte hoy mi profesor dara consulta asi es que me aclarare en todo y lo que no entienda espero poder pedir ayuda a uts.

Juanxo vi el tema antiguo que me dejaste pero no encontre el programa :S de todos modos tengo unos cuantos sacados de internet para guiarme, aun asi. Lo que me complica es el tema de si tengo que hacerlo con graficas no se como diablos se manejo eso :'( resaba por que me dieran un ejercicio de resolucion matematica ¬¬ ... plop

algarafa si puedes y no es mucha molestia te agradeceria un monton me enviaras el link con tu tres en raya asi le hecho un vistaso!


en fin muchas gracias a todos! :D soy muy amables ^^
Avatar de Usuario
c0na
 
Mensajes: 7
Registrado: Vie Oct 29, 2010 1:39 am

Re: Ayuda con python (tres en rayas)

Notapor Juanxo » Vie Oct 29, 2010 8:43 pm

jjajaja al final te has tenido que poner una foto para que se dejen de pensar que eres un tio xD

El problema con el ejemplo que te hemos comentado rafa y yo es que está en python y hace uso de una librería adicional (pygame), por lo que no se si cumplirá tus requisitos
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Ayuda con python (tres en rayas)

Notapor c0na » Vie Oct 29, 2010 10:58 pm

jaajja siii, tube que poner mi foto por eso :P

lo que me dices de python tienes razon =( no me han enseñado eso de pygame.. :/ asi es que no podre usarlo y para mas fui a ver que onda con el profe y nada, cero ayuda u.u no se que hare :(

Alguien que me pueda ayudaaar?? algun superman pleasee!
Avatar de Usuario
c0na
 
Mensajes: 7
Registrado: Vie Oct 29, 2010 1:39 am

Re: Ayuda con python (tres en rayas)

Notapor Juanxo » Vie Oct 29, 2010 11:35 pm

No se si te habrás mirado está documentacion: http://www3.uji.es/~dllorens/PythonG/ . Comentaste que no tendrías problemas con la lógica, así que creo que con que te cojas un par de funciones básicas, como es dibujar rectangulos, dibjuar dos lineas para hacer la X, dibujar un circulo para el otro personaje, mouse state para saber donde has pulsado, y alguna que otra más que viene especificada en la página que te he dado
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Ayuda con python (tres en rayas)

Notapor c0na » Sab Oct 30, 2010 2:20 am

me dijieron que posteara el codigo subiendolo a esta pagina asi todos podrian darme una mano corrigiendome =) espero se entienda..

http://pastebin.com/tsGg8YcC
Avatar de Usuario
c0na
 
Mensajes: 7
Registrado: Vie Oct 29, 2010 1:39 am

Re: Ayuda con python (tres en rayas)

Notapor carlostex » Sab Oct 30, 2010 3:34 am

Disculpa, de entrada pensé que eras niño, pero que bueno que hay chicas que les interese esto.
Bueno si tu profesor espera que lo hagas con lo que sabes lo mas seguro es que este pensando que lo hagan en la terminal, se pueden dibujar los carácteres, tambíen tengo una tres en raya, lo que te puede servir es la forma en la que se imprimen los dibujos, pues esta hecho para la terminal, solo que es en C++.
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: Ayuda con python (tres en rayas)

Notapor c0na » Sab Oct 30, 2010 5:20 am

Bueno :D actualizo el post ya que juanxo me dio una mano gigante y quedo en esto! para que lo revisen y comente quien tenga deseos de ayudar ^^
http://pastebin.com/SHmFky4E

*carlostex porfa enviame tu programa para sacar ideas de grafico, si?

Saludos a todos (:
Avatar de Usuario
c0na
 
Mensajes: 7
Registrado: Vie Oct 29, 2010 1:39 am

Re: Ayuda con python (tres en rayas)

Notapor carlostex » Sab Oct 30, 2010 5:44 pm

Si, aquí está http://sourceforge.net/projects/tres-en-raya/files/tres-en-raya.zip/download
La función que te sirve se llama rellenar, y es la que imprime los caracteres en la pantalla.
quizás lo vas a modificar al pasarlo a python, por que la forma en la que está la función es muy burda, pues es un programa que me pasaron hace tiempo y ni yo lo escribí, solo la parte de Inteligencia artificial, pero espero que te sirva como guía.
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: Ayuda con python (tres en rayas)

Notapor c0na » Dom Oct 31, 2010 6:10 am

Primero que nada agradecer muchisimo por la ayuda que me a brindado juanxo.. no se que seria de mi sin el (:
y segundo pedir la ayuda a todos los demas para encontrar el error en este codigo u.u

http://pastebin.com/MCnSJvVp

carlostex :S no encontre en el codigo q me enviaste la funcion "rellenar" por ningun lado :/
Avatar de Usuario
c0na
 
Mensajes: 7
Registrado: Vie Oct 29, 2010 1:39 am

Re: Ayuda con python (tres en rayas)

Notapor carlostex » Dom Oct 31, 2010 7:55 am

Ha ok, me faltó especificar, en el archivo gato.cpp en la línea 258 se encuentra la función void Pantalla::rellenar (int num, bool sim)
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: Ayuda con python (tres en rayas)

Notapor algarafa » Dom Oct 31, 2010 11:06 am

c0na escribió:hola a todos!.. mil gracias por responder (:
tiene razón hugoruscitti con eso de que uso ese programa por el libro, y lo de graficos no lo tengo muy claro =( pero por suerte hoy mi profesor dara consulta asi es que me aclarare en todo y lo que no entienda espero poder pedir ayuda a uts.

Juanxo vi el tema antiguo que me dejaste pero no encontre el programa :S de todos modos tengo unos cuantos sacados de internet para guiarme, aun asi. Lo que me complica es el tema de si tengo que hacerlo con graficas no se como diablos se manejo eso :'( resaba por que me dieran un ejercicio de resolucion matematica ¬¬ ... plop

algarafa si puedes y no es mucha molestia te agradeceria un monton me enviaras el link con tu tres en raya asi le hecho un vistaso!


en fin muchas gracias a todos! :D soy muy amables ^^

Ok, lo boy abuscar y te paso el link (igual tardo porque esta en alguna de mis cinco toneladas de CD's).
http://liberatumundo.wordpress.com/
Avatar de Usuario
algarafa
 
Mensajes: 135
Registrado: Lun Oct 27, 2008 6:12 pm
Ubicación: España

Re: Ayuda con python (tres en rayas)

Notapor algarafa » Dom Nov 07, 2010 3:47 pm

Ya he encontrado el programa (ando de examenes y apenas tengo tiempo). Te pongo el código, de imágenes puedes poner las que quieras dentro de el directorio img y con el nombre jugador1.png y jugador2.png El código está muy comentado por lo que es fácil de entender. No obstante cualquier duda aquí estamos.

Código: Seleccionar todo
import pygame
from pygame.locals import *
import sys

# ---------------------------------------------------------------------
# FUNCIONES DEL PROGRAMA
# ---------------------------------------------------------------------

# La primera función que definiremos, creara una matriz nula, con
# el número de filas y columnas que le pasemos como parámetro.
def crea_matriz_nula(filas, columnas):
   matriz = []
   for i in range(filas):
      matriz.append([None] * columnas)
   return matriz

# Necesitamos una función que compruebe donde esta el ratón en pantalla
# y que dependiendo de donde este y del boton pulsado modifique la
# matriz. Y de paso, también gestionaremos los eventos de cierre del
# juego.
def modifica_matriz_y_cierra():
   global casillas, matriz, le_toca_a_jugador1, le_toca_a_jugador2
   posicion_raton = pygame.mouse.get_pos()
   boton_pulsado = None
   for evento in pygame.event.get():
      if evento.type == MOUSEBUTTONDOWN:
         boton_pulsado = evento.button
      if evento.type == pygame.QUIT:
         sys.exit(0)
   raton = [posicion_raton[0], posicion_raton[1], boton_pulsado]
   filas = len(matriz)
   columnas = len(matriz[0])
   casilla = 0
   for fila in range(filas):
      for columna in range(columnas):
         if raton[0] >= casillas[casilla].left and raton[0] <=\
         casillas[casilla].right and raton[1] >= casillas[casilla]\
         .top and raton[1] <= casillas[casilla].bottom and raton[2]\
          == 1 and matriz[fila][columna] == None:
            if le_toca_a_jugador1:
               matriz[fila][columna] = 1
               le_toca_a_jugador1 = False
               le_toca_a_jugador2 = True
            elif le_toca_a_jugador2:
               matriz[fila][columna] = 2
               le_toca_a_jugador2 = False
               le_toca_a_jugador1 = True
         casilla += 1
         
# Ahora haremos una función, que dependiendo de el valor de la matriz,
# imprima en pantalla las fichas.
def actualiza_fichas(jugador1, jugador2, matriz):
   filas = len(matriz)
   columnas = len(matriz[0])
   for fila in range(filas):
      for columna in range(columnas):
         if matriz[fila][columna] == 1:
            screen.blit(jugador1, (200 * columna + 9, 200 * fila \
            + 9))
         elif matriz[fila][columna] == 2:
            screen.blit(jugador2, (200 * columna + 9, 200 * fila \
            + 9))
   # Ahora actualizamos la pantalla.
   pygame.display.flip()
   
# La suiguiente función, comprueba en el tablero todas las posibles
# maneras de ganar, y si alguien a ganado.
def ganador(matriz, jugador):
   ha_ganado = False
   if (matriz[0][0] == jugador and matriz[1][0] == jugador and matriz\
   [2][0] == jugador) or (matriz[0][1] == jugador and matriz[1][1] ==\
    jugador and matriz[2][1] == jugador) or (matriz[0][2] == jugador \
    and matriz [1][2] == jugador and matriz [2][2] == jugador) or\
     (matriz[0][0] == jugador and matriz [0][1] == jugador and \
     matriz[0][2] == jugador) or (matriz[1][0] == jugador and \
     matriz[1][1] == jugador and matriz[1][2] == jugador) or \
     (matriz[2][0] == jugador and matriz[2][1] == jugador and matriz\
     [2][2] == jugador) or (matriz[0][0] == jugador and matriz[1][1] \
     == jugador and matriz [2][2] == jugador) or (matriz[0][2] == \
     jugador and matriz[1][1] == jugador and matriz[2][0] == jugador):
        ha_ganado = True
   return ha_ganado
   
# Con la siguiente función, sabremos si ha habido un empate, es decir,
# si el tablero está lleno y no hay un ganador.
def hay_empate(matriz):
   empate = True
   filas = len(matriz)
   columnas = len(matriz[0])
   for fila in range(filas):
      for columna in range(columnas):
         if matriz[fila][columna] == None:
            empate = False
            break
   return empate         

# ---------------------------------------------------------------------
# PROGRAMA PRINCIPAL
# ---------------------------------------------------------------------

# Vamos a definir algunos aspectos de la pantalla y las matrices que
# que usaremos en el juego.
ancho_pantalla = 600
alto_pantalla = 600
screen = pygame.display.set_mode((ancho_pantalla, alto_pantalla))
pygame.display.set_caption('Tres en... ¡¡¡rock!!!')
matriz = crea_matriz_nula(3, 3)

# Ahora creemos el escenario, con sus casillas, etc. Para las lineas
# que dividen las distintas casillas, vamos a dejar un espacio sin nada
# colocado en el, porque como el fondo de la pantalla es negro,
# parecerá que hemos dibujado lineas. Cuando veais el resultado,
# entendereis mejor a que me refiero.
tamanyo_casillas = 199
# Ahora, vamos a dar valor a otra variable, para que el escenario quede
# perfecto, probad a darle valor 199 en vez de 200 y vereis a que me
# refiero.
tamanyo_casillas_especial = 200
casillas_color = (255, 255, 255)
casilla1 = pygame.Rect(0, 0, tamanyo_casillas, tamanyo_casillas)
casilla2 = pygame.Rect(200, 0, tamanyo_casillas, tamanyo_casillas)
casilla3 = pygame.Rect(400, 0, tamanyo_casillas_especial, tamanyo_casillas)
casilla4 = pygame.Rect(0, 200, tamanyo_casillas, tamanyo_casillas)
casilla5 = pygame.Rect(200, 200, tamanyo_casillas, tamanyo_casillas)
casilla6 = pygame.Rect(400, 200, tamanyo_casillas_especial, tamanyo_casillas)
casilla7 = pygame.Rect(0, 400, tamanyo_casillas, tamanyo_casillas_especial)
casilla8 = pygame.Rect(200, 400, tamanyo_casillas, tamanyo_casillas_especial)
casilla9 = pygame.Rect(400, 400, tamanyo_casillas_especial, tamanyo_casillas_especial)
casillas = [casilla1, casilla2, casilla3, casilla4, casilla5,\
casilla6, casilla7, casilla8, casilla9]
for i in range(len(casillas)):
      screen.fill(casillas_color, casillas[i])

# Ahora vamos a cargar las imágenes que usaremos en el juego.
jugador1 = pygame.image.load('img/jugador1.png')
jugador2 = pygame.image.load('img/jugador2.png')

# Ahora, definiremos algunas variables, como la que determinara a que
# jugador le toca mover, y otras que necesitaremos más adelante.
# Procuro ponerles un nombre descriptivo para no tener que explicarlas
# una a una. Bueno, procedamos.
le_toca_a_jugador1 = True
le_toca_a_jugador2 = False
ha_ganado_jugador1 = False
ha_ganado_jugador2 = False


# ---------------------------------------------------------------------
# CÓDIGO TEMPORAL PARA PROBAR EL PROGRAMA
# ---------------------------------------------------------------------

while True:
   modifica_matriz_y_cierra()
   actualiza_fichas(jugador1, jugador2, matriz)
   if ganador(matriz, 1):
      print '¡¡¡HA GANADO EL JUGADOR 1!!!'
      pygame.time.delay(2000)
      sys.exit(0)
   if ganador(matriz, 2):
      print '¡¡¡HA GANADO EL JUGADOR 2!!!'
      pygame.time.delay(2000)
      sys.exit(0)
   if hay_empate(matriz):
      print '¡¡¡HA HABIDO UN EMPATE!!!'
      pygame.time.delay(2000)
      sys.exit(0)


¡Un saludo! :wink:
http://liberatumundo.wordpress.com/
Avatar de Usuario
algarafa
 
Mensajes: 135
Registrado: Lun Oct 27, 2008 6:12 pm
Ubicación: España


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado