def turno(self): letras_minusculas, letras_mayusculas = string.ascii_letters[ 0:15], string.ascii_letters[26:41] letras_posibles = { l: n for l, n in zip(letras_minusculas, range(0, 16)) } mayusculas = {l: n for l, n in zip(letras_mayusculas, range(0, 16))} letras_posibles.update(mayusculas) letra_convertida = letras_posibles[self.letra] if self.tablero_o[self.numero][letra_convertida] == "L": print("Haz perdido") tablero.print_tablero(self.tablero_o, True) os.remove(os.path.join("partidas", self.nombre + ".txt")) return False else: self.tablero_a[self.numero][letra_convertida] = self.tablero_o[ self.numero][letra_convertida] tablero.print_tablero(self.tablero_a, True) return True
def game_end(): global comando, legos_tablero, board, board_showed, rank, user for fila in range(len(board)): for columna in range(len(board[0])): if board[fila][columna] == "L": board_showed[fila][columna] = "L" table.print_tablero(board_showed) puntaje = baldosas_descubiertas() * constant.POND_PUNT * legos_tablero print("\n-||Game over||-\n Felicidades tu puntuación es:\n\n" + " ----|| " + user, str(puntaje) + "pts ||----\n\n ------ ------") comando = " " if not path.isfile(rank): default_ranking(rank) with open(rank, "rt") as ranking: datos = ranking.readlines() datos = dato_a_lista(datos) for dato in range(len(datos)): if int(datos[dato][1]) < puntaje and dato + 1 != len(datos): datos = datos[:dato] + [[user, str(puntaje)]] + datos[dato:] break with open(rank, "w") as ranking: for dato in datos: ranking.writelines(fila_a_dato(dato) + "\n") imprimir_ranking()
def gameOver(tabla): global usuario global puntaje global baldDesc global numLegos print('Te has topado con un Lego! Perdiste la partida ' + usuario + '!') tablero.print_tablero(tabla) puntaje = numLegos * baldDesc * parametros.POND_PUNT print('Puntaje final : ' + str(puntaje)) rank = open('puntajes.txt', 'a') partida = usuario + ',' + ' ' + 'Puntaje:' + ' ' + str(puntaje) + ' \n' rank.write(partida)
def game_menu(tablero_enemigo, tablero_propio): print("-" * 6 + "Menú de Juego" + "-" * 6) print_tablero(tablero_enemigo, tablero_propio, utf8 = True) print("") print("[0] Redirse\n[1] Lanzar una bomba\n[2] Salir del programa") print("") choice = input("Ingresa tu elección: ") valid_options = ["0", "1", "2"] while choice not in valid_options:} print("La opción ingresada no esa válida") choice = input("Ingresa tu elección: ") return(int(choice))
def turno(self, tablero_sin_legos, tablero_con_numeros_y_legos): coordenada_1 = self.numero coordenada_2 = self.letra if tablero_con_numeros_y_legos[coordenada_1][coordenada_2] == "L": print("Haz perdido") tablero.print_tablero(tablero_con_numeros_y_legos, True) exit() else: tablero_sin_legos[coordenada_1][ coordenada_2] = tablero_con_numeros_y_legos[coordenada_1][ coordenada_2] tablero.print_tablero(tablero_sin_legos, True)
def partida(): global board, board_showed, menu_juego, comando, largo, ancho,\ legos_tablero baldosas_iniciales = baldosas_descubiertas() while True: table.print_tablero(board_showed) # table.print_tablero(board) // # Si se desea visualizar la posición de las minas descomentar # linea anterior if (largo * ancho) - baldosas_descubiertas() == legos_tablero: game_end() break menu(menu_juego, 0) if comando == "1": posicion = input("\nIngresa la coordenada de la baldosa" + "(Ej: A4)\n") if posicion[0].isupper() and posicion[1].isdigit() and\ int(posicion[1:]) < largo: columna = columna_a_index.index(posicion[0]) fila = int(posicion[1:]) if board[fila][columna] == "L": if baldosas_iniciales == 0: board[fila][columna] = " " agregar_lego(((largo * ancho) // legos_tablero) + 1, 1, [fila, columna]) baldosas_iniciales = 1 lego_alrededor(fila, columna) else: game_end() break else: lego_alrededor(fila, columna) if baldosas_iniciales == 0: baldosas_iniciales = 1 else: error(0) elif comando in ["2", "3"]: if guardar_tablero() and comando == "3": if salir(True): break elif comando == "0": if salir(True): break else: error(0)
def printJuego(tablaUsuario, mainTabla): global baldosasVacias global baldDesc if baldDesc == baldosasVacias: victoria() else: tablero.print_tablero(tablaUsuario) print('Seleccione una de las siguientes acciones:\n') print(' [1] Descubrir una baldosa\n') print(' [2] Guardar la partida\n') print(' [0] Salir de la partida\n') opcion = input('Indique su opcion (0, 1 o 2): ') if opcion.isdigit(): mainJuego(tablaUsuario, opcion, mainTabla) else: print('Respuesta Invalida!\n') printJuego(tablaUsuario, mainTabla)
def creacion_tablero(self, cantidad_legos, ancho, largo): #ancho hacia el lado y largo hacia abajo tablero = [] for i in range(0, largo): tablero.append([]) for j in range(0, ancho): tablero[i].append(" ") legos = 0 while legos < cantidad_legos: i = random.randint(0, largo - 1) j = random.randint(0, ancho - 1) if tablero[i][j] != "L": tablero[i][j] = "L" legos += 1 else: legos += 0 tab.print_tablero(tablero)
def menu_juego(partida): bomba_especial_utilizada = False letras = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' while True: print("--- Menu Juego ---") tablero.print_tablero(partida.tablero_rival, partida.tablero_propio, utf8=True) print("[0] Rendirse") print("[1] Lanzar una bomba") print("[2] Salir del programa") entrada_usuario = input("Ingresa tu eleccion: ") if entrada_usuario == "0": # Rendirse print("Te has rendido") puntaje = partida.calcular_puntaje() print(f"Tu puntaje fue de {partida.puntaje} puntos") partida.guardar_puntaje("puntajes.txt") break # por hacer guardar datos al rendirse en archivo elif entrada_usuario == "1": # Lanzar bomba apunto = func.lanzar_bomba(partida) elif entrada_usuario == "2": print("Saliendo...") salir = True return (salir) # por hacer terminar codigo para salir del programa de una break else: print("Entrada Invalida! Ingresa una opcion valida") continue # Turno Oponente if not (apunto): oponente_apunto = True while oponente_apunto and (partida.aliados_descubiertos < parametros.NUM_BARCOS): oponente_apunto = func.ataque_oponente(partida) print("El tablero actual es:") tablero.print_tablero(partida.tablero_rival, partida.tablero_propio) input("Presione enter para continuar: ") # Chequea ganador partida.ver_si_gano() if partida.terminada: print(f"Ha ganado {partida.ganador}!") partida.calcular_puntaje() print(f"Has conseguido {partida.puntaje} puntos!") print("Tablero final:") tablero.print_tablero(partida.tablero_rival, partida.tablero_propio) partida.guardar_puntaje("puntajes.txt") break salir = False return salir
def show(self): print_tablero(self.tablero)
if int(elec4) == 0: print("\nSeleccionaste una bomba regular") elec5 = input("Ingresa una coordenada (Formato: A0): ") #Se debe verificar que la coordenada ingresada sea válida #Para lo cual usamos las listas con las jugadas disponibles var = ft.check_its_ok(elec5, available_own_plays) while not var: print("Esta coordenada no cumple el formato, o ya no está disponible") elec5 = input("Ingresa una coordenada (Formato: A0): ") var = ft.check_its_ok(elec5, available_own_plays) print(f"Has disparado a la casilla {elec5}") enemy_visible_board = ft.update_enemy_board(elec5, blast_radius, enemy_visible_board, enemy_ships_board, "regular_bomb", available_own_plays, rows, columns)[0] available_own_plays = ft.update_enemy_board(elec5, blast_radius, enemy_visible_board, enemy_ships_board, "regular_bomb", available_own_plays, rows, columns)[1] barco_encontrado = ft.update_enemy_board(elec5, blast_radius, enemy_visible_board, enemy_ships_board, "regular_bomb", available_own_plays, rows, columns)[2] print_tablero(enemy_visible_board, own_board) if barco_encontrado == True: print("Has encontrado un barco enemigo, juega de nuevo") elec3 = game_menu(enemy_visible_board, own_board) else: #Ahora juega el enemigo, para esto, hago que de la lists available_enemy_plays se elija un elemento #al azar que representara la jugada del rival jugada_rival = random.choice(available_enemy_plays) own_board = ft.update_own_board(jugada_rival, own_board, available_enemy_plays)[0] available_enemy_plays = ft.update_own_board(jugada_rival, own_board, available_enemy_plays)[1] barco_aliado_encontrado = ft.update_own_board(jugada_rival, own_board, available_enemy_plays)[2] print(f"El oponente eligio la casilla {jugada_rival}") print_tablero(enemy_visible_board, own_board) while barco_aliado_encontrado: print("El oponente encontro uno de tus barcos, juega de nuevo") jugada_rival = random.choice(available_enemy_plays)
def cargar(usuario): archivos = os.listdir("partidas") partida_nueva = usuario + ".txt" respuesta = "0" if partida_nueva in archivos: ruta_partida = os.path.join("partidas", partida_nueva) archivo_partida = open(ruta_partida, "rt") lineas_partida = archivo_partida.readlines() archivo_partida.close() casillas_disponibles = int(lineas_partida[0].strip()) ancho = int(lineas_partida[1].strip()) alto = int(lineas_partida[2].strip()) coordenadas_legos = lineas_partida[3].strip() coordenadas_legos = coordenadas_legos.replace("[[", "") coordenadas_legos = coordenadas_legos.replace("]]", "") coordenadas_legos = coordenadas_legos.split("], [") nuevas_coord = [] for coord in coordenadas_legos: coord = coord.split(", ") nueva_coord = [int(coord[0]), int(coord[1])] nuevas_coord.append(nueva_coord) tablero_lista = lineas_partida[4].strip() tablero_lista = tablero_lista.replace("[[", "") tablero_lista = tablero_lista.replace("]]", "") tablero_lista = tablero_lista.split("], [") nuevo_tablero = [] for fila in tablero_lista: fila = fila.replace("'", "") nueva_fila = fila.split(", ") nuevo_tablero.append(nueva_fila) respuesta_valida = False while not respuesta_valida: lista_opciones = ["0", "1"] print("\n\t Tablero:\n") tab.print_tablero(nuevo_tablero) print("\nEsta es la partida que se esta cargando.") print("\nElija una entre las siguientes opciones:") print("\n[0] Confirmar carga.") print("[1] No cargar esta partida (volver al menú).") print("\nCARGANDO...") respuesta = input("Ingrese el número aquí: ") os.system('cls' if os.name == 'nt' else 'clear') if (respuesta.isdigit() is False) or (respuesta not in lista_opciones): print( "\nALERTA: Ingresó un número inválido. Intente nuevamente." ) else: respuesta_valida = True elif respuesta == "1": print("\nPartida no cargada.") casillas_disponibles = 0 ancho = 0 alto = 0 nuevas_coord = 0 nuevo_tablero = 0 else: print("\nALERTA: No existe partida guardada para este jugador.") respuesta = "1" casillas_disponibles = 0 ancho = 0 alto = 0 nuevas_coord = 0 nuevo_tablero = 0 return respuesta, casillas_disponibles, ancho, alto, nuevas_coord, nuevo_tablero
# Para utilizar los parámetros dentro de este archivo, tendríamos # que llamarlo de la forma: # variable = parametros.NUM_BARCOS # print(variable) # Forma 2: # import parametros as nombre_personalizado # En lugar de escribir parametros.CONSTANTE, escribimos # nombre_personalizado.CONSTANTE, por ejemplo: # variable = nombre_personalizado.NUM_BARCOS # print(variable) # Forma 3: #from parametros import CONSTANTE # Con esta forma, debemos mencionar cada constante que queramos importar # por ejemplo: #from parametros import NUM_BARCOS # Luego, lo llamaríamos así: # variable = NUM_BARCOS # print(variable) # Finalmente, un ejemplo de cómo usar la función print_tablero(): from tablero import print_tablero tablero_enemigo = [['X', ' ', 'X'], [' ', ' ', ' '], ['F', ' ', ' ']] tablero_propio = [['B', ' ', ' '], ['B', ' ', ' '], [' ', ' ', 'B']] print_tablero(tablero_enemigo, tablero_propio)
while decision_usuario_inicio == "1": decision_usuario_juego, letra, numero, letras_posibles = menu_de_juego.menu_de_juego( N, M) juego.letra, juego.numero = letra, numero # Descubrir una baldosa. if decision_usuario_juego == "1": turno = juego.turno() ganador = juego.ganador() puntaje = juego.puntaje() if turno == False: juego.guardar_ranking(str(puntaje)) exit() if ganador == True: juego.guardar_ranking(str(puntaje)) tablero.print_tablero(tablero_con_numeros_y_legos, True) exit() # Guardar la partida. if decision_usuario_juego == "2": juego.guardar() puntaje = juego.puntaje() # Salir de la partida con guardar. if decision_usuario_juego == "3": juego.guardar() puntaje = juego.puntaje() exit() # Salir de la partida sin guardar. if decision_usuario_juego == "4":
tablero_lista, usuario) menu = 0 if accion_2 == "2": menu = 0 os.system('cls' if os.name == 'nt' else 'clear') elif accion_2 == "3": os.system('cls' if os.name == 'nt' else 'clear') mj.guardar_partida(usuario, casillas_disponibles, ancho, alto, coordenadas_legos, tablero_lista) os.system('cls' if os.name == 'nt' else 'clear') elif accion_2 == "4": guardado_valido = False while not guardado_valido: lista_opciones = ["0", "1"] print("\n\t Tablero:\n") tab.print_tablero(tablero_lista) print( "\nEsta es la partida que se esta abandonando, ¿desea guardar?" ) print("\nElija una entre las siguientes opciones:") print("\n[0] Guardar.") print("[1] No guardar.") print("\nSALIENDO...") guardado = input("Ingrese el número aquí: ") os.system('cls' if os.name == 'nt' else 'clear') if (guardado.isdigit() is False) or (guardado not in lista_opciones): print( "\nALERTA: Ingresó un número inválido. Intente nuevamente." ) else:
def crear_tablero(N,M): # N: largo tablero (filas) # M: ancho tablero (columnas) cantidad_celdas = int(N) * int(M) cantidad_legos = math.ceil(int(N) * int(M) * parametros.PROB_LEGO) lista_de_legos_y_espacios = [] indice = 0 while indice < cantidad_legos: lista_de_legos_y_espacios.append("L") indice += 1 indice = 0 while indice < (cantidad_celdas - cantidad_legos): lista_de_legos_y_espacios.append(" ") indice +=1 random.shuffle(lista_de_legos_y_espacios) lista_de_espacios = [] for indice in lista_de_legos_y_espacios: if indice == "L": lista_de_espacios.append(" ") else: lista_de_espacios.append(" ") ### Lista de listas de espacios y L tablero_con_legos = [] i = 0 while i < (int(N) * int(M)): tablero_con_legos.append(lista_de_legos_y_espacios[i:i + int(M)]) i += int(M) ### Lista de listas de solo espacios tablero_sin_legos = [] i = 0 while i < (int(N) * int(M)): tablero_sin_legos.append(lista_de_espacios[i:i + int(M)]) i += int(M) ### Cuántos legos hay alrededor de cada baldosa, exceptuando las baldosas que tienen un lego lista_con_numeros_y_legos = [] i = 0 for i in range(int(N)): j = 0 for j in range(int(M)): #esquina superioir izquierda: if i == 0 and j == 0: legos_alrededor = 0 if tablero_con_legos[i][j] == " ": if tablero_con_legos[i][j + 1] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j + 1] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j] == "L": legos_alrededor += 1 else: legos_alrededor = legos_alrededor lista_con_numeros_y_legos.append(str(legos_alrededor)) else: lista_con_numeros_y_legos.append("L") #esquina superior derecha: if i == 0 and j == int(M) - 1: legos_alrededor = 0 if tablero_con_legos[i][j] == " ": if tablero_con_legos[i][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j] == "L": legos_alrededor += 1 else: legos_alrededor = legos_alrededor lista_con_numeros_y_legos.append(str(legos_alrededor)) else: lista_con_numeros_y_legos.append("L") #esquina inferior izquierda: if i == int(N) - 1 and j == 0: legos_alrededor = 0 if tablero_con_legos[i][j] == " ": if tablero_con_legos[i - 1][j] == "L": legos_alrededor += 1 if tablero_con_legos[i - 1][j + 1] == "L": legos_alrededor += 1 if tablero_con_legos[i][j + 1] == "L": legos_alrededor += 1 else: legos_alrededor = legos_alrededor lista_con_numeros_y_legos.append(str(legos_alrededor)) else: lista_con_numeros_y_legos.append("L") #esquina inferior derecha: if i == int(N) - 1 and j == int(M) - 1: legos_alrededor = 0 if tablero_con_legos[i][j] == " ": if tablero_con_legos[i - 1][j] == "L": legos_alrededor += 1 if tablero_con_legos[i - 1][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i][j - 1] == "L": legos_alrededor += 1 else: legos_alrededor = legos_alrededor lista_con_numeros_y_legos.append(str(legos_alrededor)) else: lista_con_numeros_y_legos.append("L") #barra lateral izquierda: if i != 0 and i != int(N) - 1 and j == 0: legos_alrededor = 0 if tablero_con_legos[i][j] == " ": if tablero_con_legos[i - 1][j] == "L": legos_alrededor += 1 if tablero_con_legos[i - 1][j + 1] == "L": legos_alrededor += 1 if tablero_con_legos[i][j + 1] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j + 1] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j] == "L": legos_alrededor += 1 else: legos_alrededor = legos_alrededor lista_con_numeros_y_legos.append(str(legos_alrededor)) else: lista_con_numeros_y_legos.append("L") #barra lateral derecha: if i != 0 and i != int(N) - 1 and j == int(M) - 1: legos_alrededor = 0 if tablero_con_legos[i][j] == " ": if tablero_con_legos[i - 1][j] == "L": legos_alrededor += 1 if tablero_con_legos[i - 1][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j] == "L": legos_alrededor += 1 else: legos_alrededor = legos_alrededor lista_con_numeros_y_legos.append(str(legos_alrededor)) else: lista_con_numeros_y_legos.append("L") #barra superior: if i == 0 and j != 0 and j != int(M) - 1: legos_alrededor = 0 if tablero_con_legos[i][j] == " ": if tablero_con_legos[i][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j + 1] == "L": legos_alrededor += 1 if tablero_con_legos[i][j + 1] == "L": legos_alrededor += 1 else: legos_alrededor = legos_alrededor lista_con_numeros_y_legos.append(str(legos_alrededor)) else: lista_con_numeros_y_legos.append("L") #barra inferior: if i == int(N) - 1 and j != 0 and j != int(M) - 1: legos_alrededor = 0 if tablero_con_legos[i][j] == " ": if tablero_con_legos[i][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i - 1][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i - 1][j] == "L": legos_alrededor += 1 if tablero_con_legos[i - 1][j + 1] == "L": legos_alrededor += 1 if tablero_con_legos[i][j + 1] == "L": legos_alrededor += 1 else: legos_alrededor = legos_alrededor lista_con_numeros_y_legos.append(str(legos_alrededor)) else: lista_con_numeros_y_legos.append("L") #centro sin bordes: if i != 0 and i != int(N) - 1 and j != 0 and j != int(M) - 1: legos_alrededor = 0 if tablero_con_legos[i][j] == " ": if tablero_con_legos[i - 1][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i - 1][j] == "L": legos_alrededor += 1 if tablero_con_legos[i - 1][j + 1] == "L": legos_alrededor += 1 if tablero_con_legos[i][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i][j + 1] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j - 1] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j] == "L": legos_alrededor += 1 if tablero_con_legos[i + 1][j + 1] == "L": legos_alrededor += 1 else: legos_alrededor = legos_alrededor lista_con_numeros_y_legos.append(str(legos_alrededor)) else: lista_con_numeros_y_legos.append("L") j += 1 i += 1 ### Lista de listas con los números y L correspondientes tablero_con_numeros_y_legos = [] i = 0 while i < (int(N) * int(M)): tablero_con_numeros_y_legos.append(lista_con_numeros_y_legos[i:i + int(M)]) i += int(M) tablero.print_tablero(tablero_sin_legos, True) return tablero_con_legos, tablero_sin_legos, tablero_con_numeros_y_legos