Buenas!
Tal como indiqué en otro post, por fin he conseguido recuperar mis archivos de mi antigua PC, y expongo aquí el código.
Se trata de un esbozo de un juego “conecta 3”, tomado en un principio como un experimento para ver si era posible realizarlo con Pilas-Engine.
Ahora mismo, se ejecuta perfecto y detecta si hay 3 figuras iguales en vertical o en horizontal, las cambia y vuelve a comprobar, hasta que ya no quedan combinaciones.
Faltaria implementar un método “Mueve_Una_Ficha” para realizar una nueva combinación que hiciera seguir el juego.
Alguien se anima a continuar con este proyecto, o a mejorar el código escrito hasta ahora?
Espero vuestras colaboraciones !!!
# -*- encoding: utf-8 -*-
import pilasengine
pilas = pilasengine.iniciar(ancho=800)
class ficha(pilasengine.actores.Actor):
def iniciar(self,x,y):
x = self.x
y = self.y
# Seteamos ficha eliminable a False
self.eliminable = False
self.transparencia = 100
self.transparencia = [0],5
self.esmono = pilas.azar(0,2)
self.en_vertical = False
def actualizar(self):
if self.esmono == 0:
self.imagen = 'data/mono.png'
self.escala = 0.7
elif self.esmono == 1:
self.imagen = 'data/aceituna.png'
self.escala = 2
elif self.esmono == 2:
self.imagen ='data/alien.png'
self.escala = 1
pilas.actores.vincular(ficha)
fondojuego = pilas.fondos.Galaxia(dy=-1)
puntaje = pilas.actores.Puntaje()
puntaje.x = 320
puntaje.y = 220
puntaje.color = pilas.colores.rojo
actor_cambios = pilas.actores.Puntaje()
actor_cambios.x = -370
actor_cambios.y = 220
grilla = [[pilas.actores.ficha(-300,150),pilas.actores.ficha(-150,150),pilas.actores.ficha(0,150),pilas.actores.ficha(150,150),pilas.actores.ficha(300,150)],
[pilas.actores.ficha(-300,0),pilas.actores.ficha(-150,0),pilas.actores.ficha(0,0),pilas.actores.ficha(150,0),pilas.actores.ficha(300,0)],
[pilas.actores.ficha(-300,-150),pilas.actores.ficha(-150,-150),pilas.actores.ficha(0,-150),pilas.actores.ficha(150,-150),pilas.actores.ficha(300,-150)]]
matriz_nueva = [[x.esmono for x in fila] for fila in grilla]
print ('matriz inicial:')
print(matriz_nueva)
def cambiar_ficha(fichas):
random_cambiar = pilas.azar(0,2)
distan = 150
puntaje.aumentar(100)
def cambiar_imagen():
if fichas in grilla[0]:
fichas.esmono = random_cambiar
fichas.y += distan
fichas.y = [(fichas.y)-distan],2
elif fichas in grilla[1]:
numero1 = grilla[1].index(fichas)
if grilla[0][numero1].eliminable == False:
fichas.esmono = grilla[0][numero1].esmono
fichas.y += distan
fichas.y = [fichas.y-distan],2
grilla[0][numero1].esmono = random_cambiar
grilla[0][numero1].y += distan
grilla[0][numero1].y = [(grilla[0][numero1].y)-distan], 2
else:
fichas.esmono = random_cambiar
fichas.y += distan
fichas.y = [(fichas.y)-distan],2
elif fichas in grilla[2]:
numero2 = grilla[2].index(fichas)
if grilla[1][numero2].eliminable == False:
fichas.esmono = grilla[1][numero2].esmono
fichas.y += distan
fichas.y = [fichas.y-distan],2
if grilla[0][numero2].eliminable == False:
grilla[1][numero2].esmono = grilla[0][numero2].esmono
grilla[1][numero2].y += distan
grilla[1][numero2].y = [grilla[1][numero2].y-distan],2
grilla[0][numero2].esmono = random_cambiar
grilla[0][numero2].y += distan
grilla[0][numero2].y = [(grilla[0][numero2].y)-distan], 2
else:
grilla[1][numero2].esmono = random_cambiar
grilla[1][numero2].y += distan
grilla[1][numero2].y = [(grilla[1][numero2].y)-distan],2
else:
fichas.esmono = random_cambiar
fichas.y += distan
fichas.y = [(fichas.y)-distan],2
"""fichas.esmono = random_cambiar
fichas.y += distan
fichas.y = [(fichas.y)-distan],2"""
global matriz_nueva # GLOBAL !!!!!
matriz_nueva = [[x.esmono for x in fila] for fila in grilla]
pilas.tareas.agregar(3, cambiar_imagen)
def cambiar_ficha_vertical(fichas_ver):
random_cambiar = pilas.azar(0,2)
distan_ver = 450
puntaje.aumentar(150)
def cambiar_imagen_ver():
fichas_ver.esmono = random_cambiar
fichas_ver.en_vertical = False
fichas_ver.y += distan_ver
fichas_ver.y = [fichas_ver.y - distan_ver],2
global matriz_nueva # GLOBAL !!!!!
matriz_nueva = [[x.esmono for x in fila] for fila in grilla]
print(matriz_nueva)
pilas.tareas.agregar(3, cambiar_imagen_ver)
def comprobar_horizontal():
#comprobamos las filas
#reseteamos las fichas por si alguna quedo True
for x in grilla:
for y in x:
if y.eliminable:
y.eliminable = False
if y.en_vertical:
y.en_vertical == False
lista_esmonos = [0,1,2]
#Comprobamos si quedan cambios por hacer
actor_cambios.definir(puntaje_variable = 14)
def comprobar_cambios():
if actor_cambios.valor < 1:
#print ('No hay cambios posibles')
#tarea_comprobar.terminar()
#print(tarea_comprobar)
pilas.avisar('Mueve una ficha!')
else:
pass
# Comprobamos verticales
def vertical():
#COLUMNA 0
if grilla[0][0].esmono == grilla[1][0].esmono and grilla[0][0].esmono == grilla[2][0].esmono:
print('vertical 0 !!!')
#if grilla[0][0].eliminable== False:
cambiar_ficha_vertical(grilla[0][0])
grilla[0][0].en_vertical = True #!!!!!!!!!!!!!!!
#if grilla[1][0].eliminable== False:
cambiar_ficha_vertical(grilla[1][0])
grilla[1][0].en_vertical = True
#if grilla[2][0].eliminable== False:
cambiar_ficha_vertical(grilla[2][0])
grilla[2][0].en_vertical = True
else:
print('no hay vertical 0')
actor_cambios.reducir(1)
#COLUMNA 1
if grilla[0][1].esmono == grilla[1][1].esmono and grilla[0][1].esmono == grilla[2][1].esmono:
print('vertical 1 !!!')
#if grilla[0][1].eliminable== False:
cambiar_ficha_vertical(grilla[0][1])
grilla[0][1].en_vertical = True
#if grilla[1][1].eliminable== False:
cambiar_ficha_vertical(grilla[1][1])
grilla [1][1].en_vertical = True
#if grilla[2][1].eliminable== False:
cambiar_ficha_vertical(grilla[2][1])
grilla[2][1].en_vertical = True
else:
print('no hay vertical 1')
actor_cambios.reducir(1)
#COLUMNA 2
if grilla[0][2].esmono == grilla[1][2].esmono and grilla[0][2].esmono == grilla[2][2].esmono:
print('vertical 2 !!!')
#if grilla[0][2].eliminable== False:
cambiar_ficha_vertical(grilla[0][2])
grilla[0][2].en_vertical = True
#if grilla[1][2].eliminable== False:
cambiar_ficha_vertical(grilla[1][2])
grilla[1][2].en_vertical = True
#if grilla[2][2].eliminable== False:
cambiar_ficha_vertical(grilla[2][2])
grilla[2][2].en_vertical = True
else:
print('no hay vertical 2')
actor_cambios.reducir(1)
#COLUMNA 3
if grilla[0][3].esmono == grilla[1][3].esmono and grilla[0][3].esmono == grilla[2][3].esmono:
print('vertical 3 !!!')
#if grilla[0][3].eliminable== False:
cambiar_ficha_vertical(grilla[0][3])
grilla[0][3].en_vertical = True
#if grilla[1][3].eliminable== False:
cambiar_ficha_vertical(grilla[1][3])
grilla[1][3].en_vertical = True
#if grilla[2][3].eliminable== False:
cambiar_ficha_vertical(grilla[2][3])
grilla[2][3].en_vertical = True
else:
print('no hay vertical 3')
actor_cambios.reducir(1)
#COLUMNA 4
if grilla[0][4].esmono == grilla[1][4].esmono and grilla[0][4].esmono == grilla[2][4].esmono:
print('vertical 4 !!!')
#if grilla[0][4].eliminable== False:
cambiar_ficha_vertical(grilla[0][4])
grilla[0][4].en_vertical = True
#if grilla[1][4].eliminable== False:
cambiar_ficha_vertical(grilla[1][4])
grilla[1][4].en_vertical = True
#if grilla[2][4].eliminable== False:
cambiar_ficha_vertical(grilla[2][4])
grilla[2][4].en_vertical = True
else:
print('no hay vertical 4')
actor_cambios.reducir(1)
#comprobar_cambios()
vertical()
def comprobar_monos():
print('comprobando monos')
#lista_monos_eliminables = []
control_monos_0 = 0
control_monos_1 = 0
control_monos_2 = 0
print('nueva grilla:')
global matriz_nueva
print(matriz_nueva)
for esmonos in lista_esmonos:
for llista in grilla:
#print('llargada llista ',len(llista))
# Si la del centro es diferente no comprueba nada mas
if llista[2].esmono != esmonos:
pass
#print('no00000 ES MONO !')
#actor_cambios.reducir(1)
#break
else:
#print('ES MONO')
for element_mono in llista :
if element_mono.esmono == esmonos:
element_mono.eliminable = True
if llista == grilla[0]:
control_monos_0 += 1
elif llista == grilla[1]: #element_mono in llista[1]:
control_monos_1 += 1
elif llista == grilla[2]: #element_mono in llista[2]:
control_monos_2 += 1
else:
# Si una es diferente y no hemos juntado 3
if control_monos_0 < 3:
for elemento_0_resetear in grilla[0]:
if elemento_0_resetear.eliminable and elemento_0_resetear.esmono == esmonos:
# Reseteamos las fichas y control a 0
elemento_0_resetear.eliminable = False
control_monos_0 = 0
else:
#break
pass
if control_monos_1 < 3:
for elemento_1_resetear in grilla[1]:
if elemento_1_resetear.eliminable and elemento_1_resetear.esmono == esmonos:
# Reseteamos las fichas y control a 0
elemento_1_resetear.eliminable = False
control_monos_1 = 0
if control_monos_2 < 3:
for elemento_2_resetear in grilla[2]:
if elemento_2_resetear.eliminable and elemento_2_resetear.esmono == esmonos:
# Reseteamos las fichas y control a 0
elemento_2_resetear.eliminable = False
control_monos_2 = 0
#Si la cuarta ficha es diferente deshabilitamos la quinta
if llista[3].esmono != esmonos and llista[4].esmono == esmonos:
llista[4].eliminable = False
if control_monos_0 > 2:
for element0mono in grilla[0]:
if element0mono.eliminable and element0mono.en_vertical == False and element0mono.esmono == esmonos:# and element0mono.en_vertical == False:
print('cambiando ficha fila 0') #,grilla.index(filasmono))
cambiar_ficha(element0mono)
else:
actor_cambios.reducir(1)
#print('no se cumplen condiciones en fila 0', esmonos)
comprobar_cambios()
if control_monos_1 > 2:
for element1mono in grilla[1]:
if element1mono.eliminable and element1mono.en_vertical == False and element1mono.esmono == esmonos:# and element1mono.en_vertical == False:
print('cambiando ficha fila 1')
cambiar_ficha(element1mono)
#lista_monos_eliminables.append(element2mono)
else:
actor_cambios.reducir(1)
#print('no se cumplen condiciones en fila 1', esmonos)
comprobar_cambios()
if control_monos_2 > 2:
for element2mono in grilla[2]:
if element2mono.eliminable and element2mono.en_vertical == False and element2mono.esmono == esmonos:# and element2mono.en_vertical == False:
print('cambiando ficha fila 2')
cambiar_ficha(element2mono)
#lista_monos_eliminables.append(element2mono)
else:
actor_cambios.reducir(1)
#print('no se cumplen condiciones en fila 2', esmonos)
comprobar_cambios()
comprobar_cambios()
comprobar_monos()
tarea_comprobar = pilas.tareas.siempre(7, comprobar_horizontal)
pilas.ejecutar()