Programación Web y Scripting > Python
Tres en raya
(1/1)
darkskaman:
Hola, estoy aprendiendo python y para coger soltura con la sintaxis he hecho un simple 3 en raya, es el primer juego que hago. ¿Qué mejoraríais?.
--- Código: Python ---# 3 en raya usando una listaimport random # para generar numeros aleatoriosimport os # para borrar la pantalla # VARIABLESmovpc=random.randint(0,8)ganador=0 tablero=[" "," "," ", " "," "," ", " "," "," " ] tableroins=["7","8","9", "4","5","6", "1","2","3" ] ins="Debes introducir los movimientos indicando un numero del 1 al 9 de este modo" # funcion para imprimir el tablerodef imprimetablero(): print " _"*6 print "|",tablero[6],"|",tablero[7],"|",tablero[8],"|" print " -"*6 print "|",tablero[3],"|",tablero[4],"|",tablero[5],"|" print " -"*6 print "|",tablero[0],"|",tablero[1],"|",tablero[2],"|" print " -"*6 # funcion para comprobar el ganadordef comprobarjugada(): # Humano if tablero[0]=="X": if tablero[1]=="X" and tablero[2]=="X": return 1 if tablero[3]=="X" and tablero[6]=="X": return 1 if tablero[4]=="X" and tablero[8]=="X": return 1 elif tablero[4]=="X": if tablero[3]=="X" and tablero[5]=="X": return 1 if tablero[1]=="X" and tablero[7]=="X": return 1 if tablero[2]=="X" and tablero[6]=="X": return 1 elif tablero[8]=="X": if tablero[2]=="X" and tablero[5]=="X": return 1 if tablero[7]=="X" and tablero[6]=="X": return 1 #maquina elif tablero[0]=="O": if tablero[1]=="O" and tablero[2]=="O": return 2 if tablero[3]=="O" and tablero[6]=="O": return 2 if tablero[4]=="O" and tablero[8]=="O": return 2 elif tablero[4]=="O": if tablero[3]=="O" and tablero[5]=="O": return 2 if tablero[1]=="O" and tablero[7]=="O": return 2 if tablero[2]=="O" and tablero[6]=="O": return 2 elif tablero[8]=="O": if tablero[2]=="O" and tablero[5]=="O": return 2 if tablero[7]=="O" and tablero[6]=="O": return 2 else: # final de la comprobacion si no ha ganado ninguno mantiene en 0 la variable ganador return 0 def resultado(ganador): if ganador==1: print "Ganaste !!" elif ganador==2: print "Eres un perdedor!!" else: print "Empate !!, continua intentandolo" # IMPRIME INSTRUCCIONESprint insprint " _"*6print "|",tableroins[0],"|",tableroins[1],"|",tableroins[2],"|"print " -"*6print "|",tableroins[3],"|",tableroins[4],"|",tableroins[5],"|"print " -"*6print "|",tableroins[6],"|",tableroins[7],"|",tableroins[8],"|"print " -"*6 # bucle; movimientos 5 humano (empieza) 4 maquinafor turno in range(1,6): # movimiento humano y comprobacion movhuman=int(raw_input("Inserta movimiento (1-9) ")) movhuman-=1 while movhuman>8 or movhuman<0 or tablero[movhuman]=="X" or tablero[movhuman]=="O": movhuman=int(raw_input("Inserta movimiento valido (1-9) ")) movhuman-=1 tablero[movhuman]="X" # impresion del turno humano os.system("clear") print "Humano:" imprimetablero() # comprueba si alguno de los 2 ha ganado ganado ganador=comprobarjugada() if ganador>0 and ganador<3: break # pc 4 turnos el ultimo no lo juega por falta de espacio en el tablero if turno < 5: #movimiento maquina genero el numero aleatorio con la resta aplicada, el while evita que la compu ponga ficha encima de las existentes movpc=random.randint(0,8) while tablero[movpc]=="X" or tablero[movpc]=="O": movpc=random.randint(0,8) tablero[movpc]="O" # Impresion turno maquina os.system("clear") print "Maquina:" imprimetablero() # comprueba si alguno de los 2 ha ganado ganador=comprobarjugada() if ganador>0 and ganador<3: break resultado(ganador)
Me gustaría hacerlo algo más complicado, usar un numero aleatorio para las jugadas del pc no le aporta dificultad. ¿Alguna sugerencia? Gracias de antemano.
Ariel Rodríguez:
Hola darkskaman,Puedes leer un poco sobre algoritmos de juego (Inteligencia artificial), especialmente Algoritmo MiniMax. el cual es un algoritmo de dos jugadores y sirve paras este caso. y así tu mismo decidirás que tan dificil va a ser la computadora.[/font] :suerte:
http://es.wikipedia.org/wiki/Minimax[/font]
Navegación
Ir a la versión completa