Colaboracion con codigo juego conecta 3

Buenas!

Tal como indiqué en otro post, por fin he conseguido recuperar mis archivos de mi antigua PC, y expongo aquí el código. :cold_sweat:

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 !!! :wink:

# -*- 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()

Hola jordinur,muy bueno el ejemplo,ahora que parece que ya tienes pc te vas a animar a hacer esos video tutoriles que prometistes.Hasta luego y espero respuesta