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

[0] Índice de Mensajes

Ir a la versión completa