class TestPersistencia(unittest.TestCase): def setUp(self): self.tablero = TableroCelular(4, 5) self.tablero.rellenar_matriz_al_azar(6) self.tablero2 = TableroCelular(5,6) self.tablero.rellenar_matriz_al_azar(15) self.persistencia = Persistencia() def test_cargar_y_guardar_mostrar_matriz(self): print('TEST-GUARDADO-1') self.persistencia.guardar('juego.s', self.tablero.matriz, 'tablero1') print('TEST-GUARDADO-2') self.persistencia.guardar('tablero.s', self.tablero2.matriz, 'tablero2') print('TEST-CARGAR-MATRIZ') print('Clave tablero1') print(self.persistencia.cargar('juego.s', 'tablero1')) print('Clave tablero2') print(self.persistencia.cargar('tablero.s', 'tablero2'))
class Menu(object): def menu(self): while True: try: numero1 = self.leer_entero('Ingrese modo de juego: \n' '1- Modo normal \n' '2- Modo vida estatica \n' '3- Salir \n') self.persistencia = Persistencia() self.tablero = TableroCelular(0, 0) if numero1 == 1: '''MODO NORMAL''' self.creacion_de_tableros() elif numero1 == 2: while True: try: '''MODO VIDA ESTATICA''' cargar = self.leer_entero( 'Desea cargar algun modo de vida estatico pasado?: \n' '1- si \n' '2- no,continuar \n') if cargar == 2: self.modo_estatico() return self.menu() elif cargar == 1: direccion = self.leer_teclado( 'Ingrese ruta del archivo sin comillas: ') clave = self.leer_teclado( 'Ingrese posicion de guardado sin comillas: ' ) lista_posicion_tablero = self.persistencia.cargar_vida_estatica( direccion, clave) self.modo_estatico_cargado( lista_posicion_tablero[0], lista_posicion_tablero[1]) else: raise NumeroNoEstaEnMenu except PatronesMayoresALaDimencion: print("Ingresar patron mas chico") except (KeyboardInterrupt, EOFError): condicion = self.leer_entero( 'Desea guardar el ultimo punto del modo de vida estatico? 1-Si 2-Salir' ) if condicion == 1: ruta = self.leer_teclado( 'Ingrese la ruta del archivo sin comillas:' ) clave = self.leer_teclado( 'Ingrese la clave para guardar el tablero sin comillas:' ) self.persistencia.guardar_vida_estatica_tupla( ruta, self.posicion_tupla_actual, self.tablero.matriz, clave) return self.menu() elif condicion == 2: return self.menu() except NumeroNoEstaEnMenu: print('Por favor, elegí 1 o 2.') except FileNotFoundError: print( 'Archivo no encontrado. Ingresar ruta valida.') except TypeError: print('Ingrese una posición de carga valida.') except KeyError: print( 'Ingresar una clave valida en un archivo correcto.' ) except PermissionError: print('Ingrese una ruta valida.') elif numero1 == 3: print('El Programa se cerro correctamente!') break else: raise NumeroNoEstaEnMenu except (NumeroNoEstaEnMenu): print('Por favor, ingrese un numero del 1 al 3.') except (KeyboardInterrupt, EOFError): print('Error atrapado de Ctrl-C') def creacion_de_tableros(self): while True: try: numero2 = self.leer_entero( 'Elija una opción para crear el tablero: \n' '1- Patron al azar \n' '2- Crear tablero manualmente \n' '3- Cargar tablero \n' '4- Volver al menu \n') if numero2 == 1: '''MODO NORMAL - PATRON AL AZAR''' fila = self.leer_entero( 'Ingrese el tamaño de la fila de la matriz:') columna = self.leer_entero( 'Ingrese el tamaño de la columna de la matriz:') while True: try: self.tablero = TableroCelular(fila, columna) cantidad_de_celulas = self.leer_entero( 'Ingrese la cantidad de celulas vivas:') self.tablero.rellenar_matriz_al_azar( cantidad_de_celulas) # MODO self.modo_normal() break except IndexError: print( 'La cantidad de celdas vivas tiene que ser hasta ' + str( len(self.tablero.matriz) * len(self.tablero.matriz))) elif numero2 == 2: '''MODO NORMAL - CREAR MANUALMENTE''' fila = self.leer_entero( 'Ingrese el tamaño de la fila de la matriz:') columna = self.leer_entero( 'Ingrese el tamaño de la columna de la matriz:') self.tablero = TableroCelular(fila, columna) while True: '''COMENZAR JUEGO''' numero2_2_1 = self.leer_entero('Ingrese accion: \n' '1- Modificar celda \n' '2- Comenzar juego \n') if numero2_2_1 == 1: try: fila = self.leer_entero('Ingrese fila: ') columna = self.leer_entero('Ingrese columna: ') estado = self.leer_teclado( 'Ingrese estado "*" viva o "-" muerta (Sin comillas): ' ) self.tablero.rellenar_matriz_manualmente( fila, columna, estado) except IndexError: print( 'Ingrese fila o columna correcta entre 0 y ' + str(len(self.tablero.matriz) - 1)) except ValorCelularNoValido: print( 'Ingresar - o * en el valor_de_la_matriz') # MODO elif numero2_2_1 == 2: self.modo_normal() break else: raise NumeroNoEstaEnMenu elif numero2 == 3: '''MODO NORMAL - CARGAR''' while True: try: direccion = self.leer_teclado( 'Ingrese ruta del archivo sin comillas: ') clave = self.leer_teclado( 'Ingrese posicion de guardado sin comillas: ') self.tablero.matriz = self.persistencia.cargar( direccion, clave) # MODO self.modo_normal() break except FileNotFoundError: print( 'Archivo no encontrado. Ingresar ruta valida.') except TypeError: print('Ingrese una posición de carga valida.') except KeyError: print( 'Ingresar una clave valida en un archivo correcto.' ) except PermissionError: print('Ingrese una ruta valida.') elif numero2 == 4: break else: raise NumeroNoEstaEnMenu except NumeroNoEstaEnMenu: print('Por favor, ingrese un numero del 1 al 4.') def modo_normal(self): while True: try: self.tablero.imprimir_tablero() numero_de_modo_normal = self.leer_entero( 'Ingrese una accion: \n' '1- Siguiente paso \n' '2- Modificar tablero \n' '3- Guardar tablero \n' '4- Volver \n') if numero_de_modo_normal == 1: '''MODO NORMAL - SIGUIENTE PASO''' self.tablero.mutar_celulas_modo_normal() elif numero_de_modo_normal == 2: '''MODIFICAR TABLERO''' while True: try: fila = self.leer_entero( 'Ingrese posicion de fila:') columna = self.leer_entero( 'Ingrese posicion de columna:') valor = self.leer_teclado( 'Ingrese "*" o "-"(Sin comillas):') self.tablero.rellenar_matriz_manualmente( fila, columna, valor) break except IndexError: print( "Por favor ingrese un numero de fila comprendido entre 0 y " + str(len(self.tablero.matriz)) + "y columna comprendido entre 0 y " + str(len(self.tablero.matriz[0]))) except Exception: print(Exception) elif numero_de_modo_normal == 3: '''GUARDAR TABLERO''' while True: try: tablero = self.tablero.matriz ruta = self.leer_teclado( 'Ingrese la ruta del archivo sin comillas:') clave = self.leer_teclado( 'Ingrese la clave para guardar el tablero sin comillas:' ) self.persistencia.guardar(ruta, tablero, clave) break except Exception: print('Fallo la ruta del teclado') elif numero_de_modo_normal == 4: break else: raise NumeroNoEstaEnMenu except NumeroNoEstaEnMenu: print('Por favor ingrese un numero del 1 al 4') def modo_estatico(self): fila = self.leer_entero('Ingrese el tamaño de la fila de la matriz:') columna = self.leer_entero( 'Ingrese el tamaño de la columna de la matriz:') patrones = self.leer_entero('Cantidad de celdas vivas:') self.tablero = TableroCelular(fila, columna) dimencion_de_tablero = fila * columna lista_tuplas = [] cantidad_tableros = 0 if (patrones <= dimencion_de_tablero): for x in combinations(range(dimencion_de_tablero), patrones): self.posicion_tupla_actual = x self.tablero.matriz = self.tablero.matriz_nueva(fila, columna) self.tablero.contador_vidas_estaticas = 0 self.tablero.diccionario_de_celdas = {} encontro = True contador = 0 for posicion_tupla in x: # este for rellena los vivos con las combinaciones coordenadas = (posicion_tupla // len(self.tablero.matriz[0]), posicion_tupla % len(self.tablero.matriz[0])) self.tablero.rellenar_matriz_manualmente( coordenadas[0], coordenadas[1], '*') self.tablero.mutar_celulas() if self.tablero.matriz_antigua == self.tablero.matriz: self.tablero.imprimir_tablero() cantidad_tableros += 1 print('--------------------------------------') if cantidad_tableros > 0: print('Se encontraron ' + str(cantidad_tableros) + ' tableros estáticos.') else: print('No se encontraron tableros estáticos.') else: raise PatronesMayoresALaDimencion def modo_estatico_cargado(self, posicion_tupla_guardada, tablero): empezar = False self.tablero.matriz = tablero fila = len(self.tablero.matriz) columna = len(self.tablero.matriz[0]) contador_vivos = 0 patrones = len(posicion_tupla_guardada) dimencion_de_tablero = fila * columna cantidad_tableros = 0 if (patrones <= dimencion_de_tablero): for x in combinations(range(dimencion_de_tablero), patrones): self.tablero.matriz = self.tablero.matriz_nueva(fila, columna) self.tablero.contador_vidas_estaticas = 0 self.tablero.diccionario_de_celdas = {} if x == posicion_tupla_guardada: empezar = True for posicion_tupla in x: # este for rellena los vivos con las combinaciones coordenadas = (posicion_tupla // len(self.tablero.matriz[0]), posicion_tupla % len(self.tablero.matriz[0])) self.tablero.rellenar_matriz_manualmente( coordenadas[0], coordenadas[1], '*') if empezar: self.tablero.mutar_celulas() if self.tablero.matriz_antigua == self.tablero.matriz: self.tablero.imprimir_tablero() cantidad_tableros += 1 print('--------------------------------------') if cantidad_tableros > 0: print('Se encontraron ' + str(cantidad_tableros) + ' tableros estáticos.') else: print('No se encontraron tableros estáticos.') else: raise PatronesMayoresALaDimencion def leer_teclado(self, texto): while True: try: ingresado = str(input(texto)) break except (EOFError, KeyboardInterrupt): print('Error atrapado de Ctrl-C') return ingresado def leer_entero(self, texto): while True: try: ingresado = eval(input(texto)) if type(ingresado) == int: return ingresado else: raise Exception except (Exception, ValueError): print('Por favor ingrese un numero entero') except (EOFError, KeyboardInterrupt): print('Error atrapado de Ctrl-C')