• Sábado 20 de Julio de 2024, 21:42

Autor Tema:  Tres en raya  (Leído 9764 veces)

darkskaman

  • Nuevo Miembro
  • *
  • Mensajes: 1
  • Nacionalidad: jm
  • 10111
    • Ver Perfil
Tres en raya
« en: Martes 7 de Agosto de 2012, 18:15 »
0
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
  1. # 3 en raya usando una lista
  2. import random # para generar numeros aleatorios
  3. import os # para borrar la pantalla
  4.  
  5. # VARIABLES
  6. movpc=random.randint(0,8)
  7. ganador=0
  8.  
  9. tablero=[" "," "," ",
  10.          " "," "," ",
  11.          " "," "," " ]
  12.  
  13. tableroins=["7","8","9",
  14.          "4","5","6",
  15.          "1","2","3" ]
  16.  
  17. ins="Debes introducir los movimientos indicando un numero del 1 al 9 de este modo"
  18.  
  19. # funcion para imprimir el tablero
  20. def imprimetablero():
  21.     print " _"*6
  22.     print "|",tablero[6],"|",tablero[7],"|",tablero[8],"|"
  23.     print " -"*6
  24.     print "|",tablero[3],"|",tablero[4],"|",tablero[5],"|"
  25.     print " -"*6
  26.     print "|",tablero[0],"|",tablero[1],"|",tablero[2],"|"
  27.     print " -"*6
  28.  
  29. # funcion para comprobar el ganador
  30. def comprobarjugada():
  31.     # Humano
  32.     if tablero[0]=="X":
  33.         if tablero[1]=="X" and tablero[2]=="X":
  34.             return 1
  35.         if tablero[3]=="X" and tablero[6]=="X":
  36.             return 1
  37.         if tablero[4]=="X" and tablero[8]=="X":
  38.             return 1
  39.     elif tablero[4]=="X":
  40.         if tablero[3]=="X" and tablero[5]=="X":
  41.             return 1
  42.         if tablero[1]=="X" and tablero[7]=="X":
  43.             return 1
  44.         if tablero[2]=="X" and tablero[6]=="X":
  45.             return 1
  46.     elif tablero[8]=="X":
  47.         if tablero[2]=="X" and tablero[5]=="X":
  48.             return 1
  49.         if tablero[7]=="X" and tablero[6]=="X":
  50.             return 1
  51.     #maquina
  52.     elif tablero[0]=="O":
  53.         if tablero[1]=="O" and tablero[2]=="O":
  54.             return 2
  55.         if tablero[3]=="O" and tablero[6]=="O":
  56.             return 2
  57.         if tablero[4]=="O" and tablero[8]=="O":
  58.             return 2
  59.     elif tablero[4]=="O":
  60.         if tablero[3]=="O" and tablero[5]=="O":
  61.             return 2
  62.         if tablero[1]=="O" and tablero[7]=="O":
  63.             return 2
  64.         if tablero[2]=="O" and tablero[6]=="O":
  65.             return 2
  66.     elif tablero[8]=="O":
  67.         if tablero[2]=="O" and tablero[5]=="O":
  68.             return 2
  69.         if tablero[7]=="O" and tablero[6]=="O":
  70.             return 2
  71.     else:
  72.     # final de la comprobacion si no ha ganado ninguno mantiene en 0 la variable ganador
  73.         return 0
  74.  
  75. def resultado(ganador):
  76.     if ganador==1:
  77.         print "Ganaste !!"
  78.     elif ganador==2:
  79.         print "Eres un perdedor!!"
  80.     else:
  81.         print "Empate !!, continua intentandolo"
  82.  
  83. # IMPRIME INSTRUCCIONES
  84. print ins
  85. print " _"*6
  86. print "|",tableroins[0],"|",tableroins[1],"|",tableroins[2],"|"
  87. print " -"*6
  88. print "|",tableroins[3],"|",tableroins[4],"|",tableroins[5],"|"
  89. print " -"*6
  90. print "|",tableroins[6],"|",tableroins[7],"|",tableroins[8],"|"
  91. print " -"*6
  92.  
  93. # bucle; movimientos 5 humano (empieza) 4 maquina
  94. for turno in range(1,6):
  95.    
  96.     # movimiento humano y comprobacion
  97.     movhuman=int(raw_input("Inserta movimiento (1-9) "))
  98.     movhuman-=1
  99.     while movhuman>8 or movhuman<0 or tablero[movhuman]=="X" or tablero[movhuman]=="O":
  100.         movhuman=int(raw_input("Inserta movimiento valido (1-9) "))
  101.         movhuman-=1
  102.     tablero[movhuman]="X"
  103.    
  104.     # impresion del turno humano
  105.     os.system("clear")
  106.     print "Humano:"
  107.     imprimetablero()
  108.    
  109.     # comprueba si alguno de los 2 ha ganado ganado
  110.     ganador=comprobarjugada()
  111.     if ganador>0 and ganador<3:
  112.         break
  113.    
  114.     # pc 4 turnos el ultimo no lo juega por falta de espacio en el tablero
  115.     if turno < 5:
  116.         #movimiento maquina genero el numero aleatorio con la resta aplicada, el while evita que la compu ponga ficha encima de las existentes
  117.         movpc=random.randint(0,8)
  118.         while tablero[movpc]=="X" or tablero[movpc]=="O":
  119.             movpc=random.randint(0,8)
  120.         tablero[movpc]="O"
  121.        
  122.         # Impresion turno maquina
  123.         os.system("clear")
  124.         print "Maquina:"
  125.         imprimetablero()
  126.        
  127.         # comprueba si alguno de los 2 ha ganado
  128.         ganador=comprobarjugada()
  129.         if ganador>0 and ganador<3:
  130.             break
  131.  
  132. resultado(ganador)
  133.  


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.
« última modificación: Miércoles 8 de Agosto de 2012, 18:05 por darkskaman »

Ariel Rodríguez

  • Nuevo Miembro
  • *
  • Mensajes: 8
  • Nacionalidad: pa
  • "Si lo puedes imaginar lo puedes crear"
    • Ver Perfil
Re:Tres en raya
« Respuesta #1 en: Martes 13 de Noviembre de 2012, 14:28 »
0
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]
Ariel R.