pilas/ejemplos/ejemplos/minijuegos/tres_en_raya/escena_juego.py
import pilas
from random import random
class Juego(pilas.escena.Base):
"Escena que Controla el juego"
def __init__(self):
pilas.escena.Base.__init__(self)
def iniciar(self):
pilas.fondos.Fondo('data/fondo.png')
self.pulsa_tecla_escape.conectar(self.cuando_se_presione_escape)
#creamos tablero
self.crear_tablero()
self.crear_pizarra() #servira para trazar lineas ganadoras
#creamos fichas
self.crear_fichas_1()
self.crear_fichas_2()
# turno = 0 para jugador 1
# turno = 1 para jugador 2
self.turno = int(random() * 2)
# estado = -1 cuando estamos jugando
# estado = 0 gana jugador 1
# estado = 1 gano jugador 2
# estado = 2 nadie gano
self.estado = -1
self.turno_o = pilas.imagenes.cargar('data/ficha1.png')
self.turno_x = pilas.imagenes.cargar('data/ficha2.png')
if self.turno == 0:
self.turno_actual = pilas.actores.Actor(self.turno_o, -163, 80)
self.turno_actual.escala = 0.5
else:
self.turno_actual = pilas.actores.Actor(self.turno_x, -163, 80)
self.turno_actual.escala = 0.5
self.conectar_fichas1_con_eventos()
self.conectar_fichas2_con_eventos()
def cuando_se_presione_escape(self, *k, **kv):
"Regresa al menu principal"
from . import escena_menu
pilas.cambiar_escena(escena_menu.EscenaMenu())
def crear_pizarra(self):
self.pizarra = pilas.actores.Pizarra()
def pintar_linea_horizontal(self, h):
self.pizarra.linea(-100, h, 100, h, pilas.colores.cyan, grosor=3)
def pintar_linea_diagonal_1(self):
self.pizarra.linea(-84, 84, 84, -84, pilas.colores.cyan, grosor=3)
def pintar_linea_diagonal_2(self):
self.pizarra.linea(84, 84, -84, -84, pilas.colores.cyan, grosor=3)
def pintar_linea_vertical(self, v):
self.pizarra.linea(v, -100, v, 100, pilas.colores.cyan, grosor=3)
def crear_tablero(self):
self.tablero_matriz = [[-1, -1, -1],[-1, -1, -1],[-1, -1, -1]]
# esta matriz se utiliza para saber que ficha se encuentra
# en cada lugar o si es una casilla vacia.
# 0 = ficha 1
# 1 = ficha 2
# -1 = no hay ficha
def crear_fichas_1(self):
self.ruta_ficha_vacia = 'data/ficha_vacia.png'
self.ruta_ficha_1 = 'data/ficha1.png'
self.ficha1_1 = pilas.actores.Boton(-84, 84, self.ruta_ficha_vacia, self.ruta_ficha_1, self.ruta_ficha_1)
self.ficha1_2 = pilas.actores.Boton(0, 84, self.ruta_ficha_vacia, self.ruta_ficha_1, self.ruta_ficha_1)
self.ficha1_3 = pilas.actores.Boton(84, 84, self.ruta_ficha_vacia, self.ruta_ficha_1, self.ruta_ficha_1)
self.ficha1_4 = pilas.actores.Boton(-84, 0, self.ruta_ficha_vacia, self.ruta_ficha_1, self.ruta_ficha_1)
self.ficha1_5 = pilas.actores.Boton(0, 0, self.ruta_ficha_vacia, self.ruta_ficha_1, self.ruta_ficha_1)
self.ficha1_6 = pilas.actores.Boton(84, 0, self.ruta_ficha_vacia, self.ruta_ficha_1, self.ruta_ficha_1)
self.ficha1_7 = pilas.actores.Boton(-84, -84, self.ruta_ficha_vacia, self.ruta_ficha_1, self.ruta_ficha_1)
self.ficha1_8 = pilas.actores.Boton(0, -84, self.ruta_ficha_vacia, self.ruta_ficha_1, self.ruta_ficha_1)
self.ficha1_9 = pilas.actores.Boton(84, -84, self.ruta_ficha_vacia, self.ruta_ficha_1, self.ruta_ficha_1)
def crear_fichas_2(self):
self.ruta_ficha_vacia = 'data/ficha_vacia.png'
self.ruta_ficha_2 = 'data/ficha2.png'
B = pilas.actores.Boton
self.ficha2_1 = pilas.actores.Boton(-84, 84, self.ruta_ficha_vacia, self.ruta_ficha_2, self.ruta_ficha_2)
self.ficha2_2 = pilas.actores.Boton(0, 84, self.ruta_ficha_vacia, self.ruta_ficha_2, self.ruta_ficha_2)
self.ficha2_3 = pilas.actores.Boton(84, 84, self.ruta_ficha_vacia, self.ruta_ficha_2, self.ruta_ficha_2)
self.ficha2_4 = pilas.actores.Boton(-84, 0, self.ruta_ficha_vacia, self.ruta_ficha_2, self.ruta_ficha_2)
self.ficha2_5 = pilas.actores.Boton(0, 0, self.ruta_ficha_vacia, self.ruta_ficha_2, self.ruta_ficha_2)
self.ficha2_6 = pilas.actores.Boton(84, 0, self.ruta_ficha_vacia, self.ruta_ficha_2, self.ruta_ficha_2)
self.ficha2_7 = pilas.actores.Boton(-84, -84, self.ruta_ficha_vacia, self.ruta_ficha_2, self.ruta_ficha_2)
self.ficha2_8 = pilas.actores.Boton(0, -84, self.ruta_ficha_vacia, self.ruta_ficha_2, self.ruta_ficha_2)
self.ficha2_9 = pilas.actores.Boton(84, -84, self.ruta_ficha_vacia, self.ruta_ficha_2, self.ruta_ficha_2)
def cambiar_visor_turno_o(self):
self.turno_actual.definir_imagen(self.turno_o)
def cambiar_visor_turno_x(self):
self.turno_actual.definir_imagen(self.turno_x)
def conectar_fichas1_con_eventos(self):
self.ficha1_1.conectar_presionado(self.press_ficha1_1)
self.ficha1_1.conectar_presionado(self.analizar_ganador)
self.ficha1_2.conectar_presionado(self.press_ficha1_2)
self.ficha1_2.conectar_presionado(self.analizar_ganador)
self.ficha1_3.conectar_presionado(self.press_ficha1_3)
self.ficha1_3.conectar_presionado(self.analizar_ganador)
self.ficha1_4.conectar_presionado(self.press_ficha1_4)
self.ficha1_4.conectar_presionado(self.analizar_ganador)
self.ficha1_5.conectar_presionado(self.press_ficha1_5)
self.ficha1_5.conectar_presionado(self.analizar_ganador)
self.ficha1_6.conectar_presionado(self.press_ficha1_6)
self.ficha1_6.conectar_presionado(self.analizar_ganador)
self.ficha1_7.conectar_presionado(self.press_ficha1_7)
self.ficha1_7.conectar_presionado(self.analizar_ganador)
self.ficha1_8.conectar_presionado(self.press_ficha1_8)
self.ficha1_8.conectar_presionado(self.analizar_ganador)
self.ficha1_9.conectar_presionado(self.press_ficha1_9)
self.ficha1_9.conectar_presionado(self.analizar_ganador)
def conectar_fichas2_con_eventos(self):
self.ficha2_1.conectar_presionado(self.press_ficha2_1)
self.ficha2_1.conectar_presionado(self.analizar_ganador)
self.ficha2_2.conectar_presionado(self.press_ficha2_2)
self.ficha2_2.conectar_presionado(self.analizar_ganador)
self.ficha2_3.conectar_presionado(self.press_ficha2_3)
self.ficha2_3.conectar_presionado(self.analizar_ganador)
self.ficha2_4.conectar_presionado(self.press_ficha2_4)
self.ficha2_4.conectar_presionado(self.analizar_ganador)
self.ficha2_5.conectar_presionado(self.press_ficha2_5)
self.ficha2_5.conectar_presionado(self.analizar_ganador)
self.ficha2_6.conectar_presionado(self.press_ficha2_6)
self.ficha2_6.conectar_presionado(self.analizar_ganador)
self.ficha2_7.conectar_presionado(self.press_ficha2_7)
self.ficha2_7.conectar_presionado(self.analizar_ganador)
self.ficha2_8.conectar_presionado(self.press_ficha2_8)
self.ficha2_8.conectar_presionado(self.analizar_ganador)
self.ficha2_9.conectar_presionado(self.press_ficha2_9)
self.ficha2_9.conectar_presionado(self.analizar_ganador)
# metodos para cada ficha 1
# controlan si hay una casilla vacia, para poner una ficha
# controla el visor de turnos y los turnos
def press_ficha1_1(self):
if self.estado == -1:
if self.turno == 0:
if self.tablero_matriz[0][0] == -1:
self.tablero_matriz[0][0] = 0
self.ficha1_1.pintar_presionado()
self.ficha1_1.escala = 0.8
self.ficha1_1.escala = [1], 0.1
self.turno = 1
self.cambiar_visor_turno_x()
def press_ficha1_2(self):
if self.estado == -1:
if self.turno == 0:
if self.tablero_matriz[0][1] == -1:
self.tablero_matriz[0][1] = 0
self.ficha1_2.pintar_presionado()
self.ficha1_2.escala = 0.8
self.ficha1_2.escala = [1], 0.1
self.turno = 1
self.cambiar_visor_turno_x()
def press_ficha1_3(self):
if self.estado == -1:
if self.turno == 0:
if self.tablero_matriz[0][2] == -1:
self.tablero_matriz[0][2] = 0
self.ficha1_3.pintar_presionado()
self.ficha1_3.escala = 0.8
self.ficha1_3.escala = [1], 0.1
self.turno = 1
self.cambiar_visor_turno_x()
def press_ficha1_4(self):
if self.estado == -1:
if self.turno == 0:
if self.tablero_matriz[1][0] == -1:
self.tablero_matriz[1][0] = 0
self.ficha1_4.pintar_presionado()
self.ficha1_4.escala = 0.8
self.ficha1_4.escala = [1], 0.1
self.turno = 1
self.cambiar_visor_turno_x()
def press_ficha1_5(self):
if self.estado == -1:
if self.turno == 0:
if self.tablero_matriz[1][1] == -1:
self.tablero_matriz[1][1] = 0
self.ficha1_5.pintar_presionado()
self.ficha1_5.escala = 0.8
self.ficha1_5.escala = [1], 0.1
self.turno = 1
self.cambiar_visor_turno_x()
def press_ficha1_6(self):
if self.estado == -1:
if self.turno == 0:
if self.tablero_matriz[1][2] == -1:
self.tablero_matriz[1][2] = 0
self.ficha1_6.pintar_presionado()
self.ficha1_6.escala = 0.8
self.ficha1_6.escala = [1], 0.1
self.turno = 1
self.cambiar_visor_turno_x()
def press_ficha1_7(self):
if self.estado == -1:
if self.turno == 0:
if self.tablero_matriz[2][0] == -1:
self.tablero_matriz[2][0] = 0
self.ficha1_7.pintar_presionado()
self.ficha1_7.escala = 0.8
self.ficha1_7.escala = [1], 0.1
self.turno = 1
self.cambiar_visor_turno_x()
def press_ficha1_8(self):
if self.estado == -1:
if self.turno == 0:
if self.tablero_matriz[2][1] == -1:
self.tablero_matriz[2][1] = 0
self.ficha1_8.pintar_presionado()
self.ficha1_8.escala = 0.8
self.ficha1_8.escala = [1], 0.1
self.turno = 1
self.cambiar_visor_turno_x()
def press_ficha1_9(self):
if self.estado == -1:
if self.turno == 0:
if self.tablero_matriz[2][2] == -1:
self.tablero_matriz[2][2] = 0
self.ficha1_9.pintar_presionado()
self.ficha1_9.escala = 0.8
self.ficha1_9.escala = [1], 0.1
self.turno = 1
self.cambiar_visor_turno_x()
#metodos para cada ficha 2
def press_ficha2_1(self):
if self.estado == -1:
if self.turno == 1:
if self.tablero_matriz[0][0] == -1:
self.tablero_matriz[0][0] = 1
self.ficha2_1.pintar_presionado()
self.ficha2_1.escala = 0.8
self.ficha2_1.escala = [1], 0.1
self.turno = 0
self.cambiar_visor_turno_o()
def press_ficha2_2(self):
if self.estado == -1:
if self.turno == 1:
if self.tablero_matriz[0][1] == -1:
self.tablero_matriz[0][1] = 1
self.ficha2_2.pintar_presionado()
self.ficha2_2.escala = 0.8
self.ficha2_2.escala = [1], 0.1
self.turno = 0
self.cambiar_visor_turno_o()
def press_ficha2_3(self):
if self.estado == -1:
if self.turno == 1:
if self.tablero_matriz[0][2] == -1:
self.tablero_matriz[0][2] = 1
self.ficha2_3.pintar_presionado()
self.ficha2_3.escala = 0.8
self.ficha2_3.escala = [1], 0.1
self.turno = 0
self.cambiar_visor_turno_o()
def press_ficha2_4(self):
if self.estado == -1:
if self.turno == 1:
if self.tablero_matriz[1][0] == -1:
self.tablero_matriz[1][0] = 1
self.ficha2_4.pintar_presionado()
self.ficha2_4.escala = 0.8
self.ficha2_4.escala = [1], 0.1
self.turno = 0
self.cambiar_visor_turno_o()
def press_ficha2_5(self):
if self.estado == -1:
if self.turno == 1:
if self.tablero_matriz[1][1] == -1:
self.tablero_matriz[1][1] = 1
self.ficha2_5.pintar_presionado()
self.ficha2_5.escala = 0.8
self.ficha2_5.escala = [1], 0.1
self.turno = 0
self.cambiar_visor_turno_o()
def press_ficha2_6(self):
if self.estado == -1:
if self.turno == 1:
if self.tablero_matriz[1][2] == -1:
self.tablero_matriz[1][2] = 1
self.ficha2_6.pintar_presionado()
self.ficha2_6.escala = 0.8
self.ficha2_6.escala = [1], 0.1
self.turno = 0
self.cambiar_visor_turno_o()
def press_ficha2_7(self):
if self.estado == -1:
if self.turno == 1:
if self.tablero_matriz[2][0] == -1:
self.tablero_matriz[2][0] = 1
self.ficha2_7.pintar_presionado()
self.ficha2_7.escala = 0.8
self.ficha2_7.escala = [1], 0.1
self.turno = 0
self.cambiar_visor_turno_o()
def press_ficha2_8(self):
if self.estado == -1:
if self.turno == 1:
if self.tablero_matriz[2][1] == -1:
self.tablero_matriz[2][1] = 1
self.ficha2_8.pintar_presionado()
self.ficha2_8.escala = 0.8
self.ficha2_8.escala = [1], 0.1
self.turno = 0
self.cambiar_visor_turno_o()
def press_ficha2_9(self):
if self.estado == -1:
if self.turno == 1:
if self.tablero_matriz[2][2] == -1:
self.tablero_matriz[2][2] = 1
self.ficha2_9.pintar_presionado()
self.ficha2_9.escala = 0.8
self.ficha2_9.escala = [1], 0.1
self.turno = 0
self.cambiar_visor_turno_o()
# comprueba si a ocurrido tres en raya o empate
def nadie_gano(self):
for i in range(3):
for j in range(3):
if self.tablero_matriz[i][j] == -1:
return False
return True
def analizar_ganador(self):
self.posicion_texto = [0, -180]
## gano player 1
if (self.tablero_matriz[0][0] == self.tablero_matriz[0][1] == self.tablero_matriz[0][2] == 0):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 1!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 0
self.pintar_linea_horizontal(84)
t.color = (pilas.colores.blanco)
elif (self.tablero_matriz[0][0] == self.tablero_matriz[1][0] == self.tablero_matriz[2][0] == 0):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 1!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 0
self.pintar_linea_vertical(-84)
t.color = (pilas.colores.blanco)
if (self.tablero_matriz[1][0] == self.tablero_matriz[1][1] == self.tablero_matriz[1][2] == 0):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 1!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 0
self.pintar_linea_horizontal(0)
t.color = (pilas.colores.blanco)
elif (self.tablero_matriz[0][1] == self.tablero_matriz[1][1] == self.tablero_matriz[2][1] == 0):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 1!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 0
self.pintar_linea_vertical(0)
t.color = (pilas.colores.blanco)
if (self.tablero_matriz[0][2] == self.tablero_matriz[1][2] == self.tablero_matriz[2][2] == 0):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 1!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 0
self.pintar_linea_vertical(84)
t.color = (pilas.colores.blanco)
elif (self.tablero_matriz[2][0] == self.tablero_matriz[2][1] == self.tablero_matriz[2][2] == 0):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 1!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 0
self.pintar_linea_horizontal(-84)
t.color = (pilas.colores.blanco)
if (self.tablero_matriz[0][0] == self.tablero_matriz[1][1] == self.tablero_matriz[2][2] == 0):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 1!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 0
self.pintar_linea_diagonal_1()
t.color = (pilas.colores.blanco)
if (self.tablero_matriz[0][2] == self.tablero_matriz[1][1] == self.tablero_matriz[2][0] == 0):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 1!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 0
self.pintar_linea_diagonal_2()
t.color = (pilas.colores.blanco)
## gano player 2
if (self.tablero_matriz[0][0] == self.tablero_matriz[0][1] == self.tablero_matriz[0][2] == 1):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 2!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 1
self.pintar_linea_horizontal(84)
t.color = (pilas.colores.blanco)
elif (self.tablero_matriz[0][0] == self.tablero_matriz[1][0] == self.tablero_matriz[2][0] == 1):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 2!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 1
self.pintar_linea_vertical(-84)
t.color = (pilas.colores.blanco)
if (self.tablero_matriz[1][0] == self.tablero_matriz[1][1] == self.tablero_matriz[1][2] == 1):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 2!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 1
self.pintar_linea_horizontal(0)
elif (self.tablero_matriz[0][1] == self.tablero_matriz[1][1] == self.tablero_matriz[2][1] == 1):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 2!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 1
self.pintar_linea_vertical(0)
t.color = (pilas.colores.blanco)
if (self.tablero_matriz[0][2] == self.tablero_matriz[1][2] == self.tablero_matriz[2][2] == 1):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 2!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 1
self.pintar_linea_vertical(84)
t.color = (pilas.colores.blanco)
elif (self.tablero_matriz[2][0] == self.tablero_matriz[2][1] == self.tablero_matriz[2][2] == 1):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 2!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 1
self.pintar_linea_horizontal(-84)
t.color = (pilas.colores.blanco)
if (self.tablero_matriz[0][0] == self.tablero_matriz[1][1] == self.tablero_matriz[2][2] == 1):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 2!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 1
self.pintar_linea_diagonal_1()
t.color = (pilas.colores.blanco)
if (self.tablero_matriz[0][2] == self.tablero_matriz[1][1] == self.tablero_matriz[2][0] == 1):
if self.estado == -1:
t = pilas.actores.Texto("Gana Jugador 2!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 1
self.pintar_linea_diagonal_2()
t.color = (pilas.colores.blanco)
temp_nadie_gana = self.nadie_gano()
if temp_nadie_gana == True:
if self.estado == -1:
t = pilas.actores.Texto("Nadie ha ganado, vuelve a intentarlo!",
self.posicion_texto[0],
self.posicion_texto[1])
self.estado = 2
t.color = (pilas.colores.blanco)