vamos a jugar un buejo de busca batalla naval, con una matriz (una lista dentro de una lista)
hacemos un campo de 5*5, de 25 casillas donde habra 3 bombas.
Matriz=[[A,A,A,A,B],[A,A,A,A,A],[B,A,A,A,A],[A,A,B,A,A],[A,A,A,A,A]]
Donde B es el Barco y A significa agua
C=input("Seleciona la Columna a atacar, del 1 a 5 = ")
F=input("Seleciona la Fila a atacar, del 1 a 5 = ")
C=C-1
F=F-1
if Matriz[F][C]==B:
print("cayo el barco")
Matriz[F][C]=A
elif
print("Haz fallado")
else
print("favor introducir una posicion valida")
En este caso la ubicacion de los barcos viene dado por la ubicacion dentro de las filas y columnas de la matriz. si la posicion que el usuario eligio, coincide con la direccion del barco, este hundira el barco y la posicion cambiara de B a A, para asi asiganar que ya no hay nada en esa ubicacion
Hola Bro sabes me parecio una idea super interesante el batleshipp, y pues me puse algunos dias a hacer una version un poco mas completa, no es por presumir ni nada solo que me gustaria compartir el codigo igual a alguien le sirve.
<code> import time #asi dara algo de tiempo para mejor visualización import os import random # Limpiar la pantalladefclear(): os.system('clear') defp(x): print(x) '''con esto abreviamos print xd no es muy util ya que tiene muchas limitaciones pero bueno '''#p = lambda x: print(x) otra forma de hacerlo game1 = 1 game2 = 1 game3 = 1 game4 = 1 game5 = 1 vidas_jugador = 3 vidas_bot = 3 partida = 1while game1: ifTrue: Agua = '-'#Las casillas del tablero A1 = Agua A2 = Agua A3 = Agua A4 = Agua A5 = Agua B1 = Agua B2 = Agua B3 = Agua B4 = Agua B5 = Agua C1 = Agua C2 = Agua C3 = Agua C4 = Agua C5 = Agua D1 = Agua D2 = Agua D3 = Agua D4 = Agua D5 = Agua E1 = Agua E2 = Agua E3 = Agua E4 = Agua E5 = Agua ifTrue: Bote = 'O' Bomba = 'X' Coordenadas = [ A1, A2, A3, A4, A5, B1, B2, B3, B4, B5, C1, C2, C3, C4, C5, D1, D2, D3, D4, D5, E1, E2, E3, E4, E5, ] Posiciones = [ 'A1', 'A2', 'A3', 'A4', 'A5', 'B1', 'B2', 'B3', 'B4', 'B5', 'C1', 'C2', 'C3', 'C4', 'C5', 'D1', 'D2', 'D3', 'D4', 'D5', 'E1', 'E2', 'E3', 'E4', 'E5', ] passifTrue: #El tablero, use def ya que cuando alteraba el valor de cada coordenada esta no se mostraba en el tablero, no se actualizaba el tablero#Asi que declaramos tablero dentro de una funcion para que se genere cada vez que se llamedeftabla(Coordenadas): tablero = f""" A B C D E ___ ___ ___ ___ ___ 1 | {Coordenadas[0]} | {Coordenadas[5]} | {Coordenadas[10]} | {Coordenadas[15]} | {Coordenadas[20]} | ¯¯¯ ¯¯¯ ¯¯¯ ¯¯¯ ¯¯¯ 2 | {Coordenadas[1]} | {Coordenadas[6]} | {Coordenadas[11]} | {Coordenadas[16]} | {Coordenadas[21]} | ¯¯¯ ¯¯¯ ¯¯¯ ¯¯¯ ¯¯¯ 3 | {Coordenadas[2]} | {Coordenadas[7]} | {Coordenadas[12]} | {Coordenadas[17]} | {Coordenadas[22]} | ¯¯¯ ¯¯¯ ¯¯¯ ¯¯¯ ¯¯¯ 4 | {Coordenadas[3]} | {Coordenadas[8]} | {Coordenadas[13]} | {Coordenadas[18]} | {Coordenadas[23]} | ¯¯¯ ¯¯¯ ¯¯¯ ¯¯¯ ¯¯¯ 5 | {Coordenadas[4]} | {Coordenadas[9]} | {Coordenadas[14]} | {Coordenadas[19]} | {Coordenadas[24]} | ¯¯¯ ¯¯¯ ¯¯¯ ¯¯¯ ¯¯¯ """return tablero tablero = tabla(Coordenadas) #Aqui declaramos que la variable tablero sera igual a la funcion#el tablero formas distintas""""print(''' A B C D E _____ _____ ____ _____ _____ 1 | ''',A1,''' | ''',B1,''' | ''',C1,'''| ''',D1,''' | ''',E1,''' | ¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯ _____ _____ ____ _____ _____ 2 | ''',A2,''' | ''',B2,''' | ''',C2,'''| ''',D2,''' | ''',E2,''' | ¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯ _____ _____ ____ _____ _____ 3 | ''',A3,''' | ''',B3,''' | ''',C3,'''| ''',D3,''' | ''',E3,''' | ¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯ _____ _____ ____ _____ _____ 4 | ''',A4,''' | ''',B4,''' | ''',C4,'''| ''',D4,''' | ''',E4,''' | ¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯ _____ _____ ____ _____ _____ 5 | ''',A5,''' | ''',B5,''' | ''',C5,'''| ''',D5,''' | ''',E5,''' | ¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯ ''')"""#otra manera de hacer el tablero'''tablero = """ A B C D E _____ _____ ____ _____ _____ 1 | {} | {} | {} | {} | {} | ¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯ 2 | {} | {} | {} | {} | {} | ¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯ 3 | {} | {} | {} | {} | {} | ¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯ 4 | {} | {} | {} | {} | {} | ¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯ 5 | {} | {} | {} | {} | {} | ¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯ """.format(A1, B1, C1, D1, E1, A2, B2, C2, D2, E2, A3, B3, C3, D3, E3, A4, B4, C4, D4, E4, A5, B5, C5, D5, E5) print(tablero) '''passwhile game2: print(''' bienvenido a el juego de \t\"BATLESHIPP"''') time.sleep(0.5) p('cargando...') print('''selecciona una opcion para continuar: 1. JUGAR 2. Como se juega? 3. Salir''') whileTrue: try: opcion = int(input('\n ingresa una opcion:... ')) if opcion == opcion in range(1,4): breakelse: print('intentalo de nuevo') except ValueError: print('ingrese una opcion valida') if opcion == 2: print('Cargando...') time.sleep(2) clear() print('''\tComo se juega? El juego consiste en encontrar la flota de barcos enemigos antes que tu rival(bot) encuentre los tuyos. El programa esta diseñado para que tanto los barcos del enemigo al igual que sus elecciones sean aleatorios en cambio tu si podras elegir libremente las posiciones de tus barcos y donde atacar. El tablero: Abarca un espacio de 5x5 Cantidad de barcos: 3 barcos para cada jugador El juego termina cuando uno de los jugadores hunde todos los barcos enemigos. ''') input(''' presiona cualquier tecla para volver al menu principal ''') clear() elif opcion == 1: game2 -= 1 print('Cargando...') time.sleep(2) clear() elif opcion == 3: game1 -= 1 game2 -= 1 game3 -= 1 game4 -= 1 game5 -= 1 print(' Saliendo...') while game3: # queda pendiente hacerlo con bucle for print('''Para iniciar coloca tus barcos Este sera el tablero:\n''') print(tablero) Barco1 = () Barco2 = () Barco3 = () Barcos = [] whilenot Barco1 in Posiciones: Barco1 = input('ingresa la coordenada de\ntu primer barco: ...').upper() if Barco1 notin Posiciones: print('Elige una coordenada Valida') else: print('OK') Barcos.append(Barco1) whilenot Barco2 in Posiciones: Barco2 = input('ingresa la coordenada de\ntu segundo barco: ...').upper() if Barco2 notin Posiciones: print('Elige una coordenada Valida') elif Barco2 == Barco1: print('No se puede colocar dos barcos\nen la misma posicion') Barco2 = () else: print('OK') Barcos.append(Barco2) whilenot Barco3 in Posiciones: Barco3 = input('ingresa la coordenada de\ntu tercer barco: ...').upper() if Barco3 notin Posiciones: print('Elige una coordenada Valida') elif Barco3 == Barco1 or Barco3 == Barco2: print('No se puede colocar dos barcos\nen la misma posicion') Barco3 = () else: print('OK') Barcos.append(Barco3) time.sleep(1) clear() print('Las posiciones de tus barcos\nson las siguientes: ',Barcos) game3 -= 1while game4: ifTrue: #saber en que posicion de la lista posiciones esta cada barco PBarco1 = ((Posiciones.index(Barco1))) Coordenadas[PBarco1] = Bote # reemplazar la posicion por un "Bote" En el tablero(lista de coordenadas) PBarco2 = ((Posiciones.index(Barco2))) Coordenadas[PBarco2] = Bote #remplaza una palabra por otra# print(text.replace('python', 'Go')) PBarco3 = ((Posiciones.index(Barco3))) Coordenadas[PBarco3]= Bote tablero = tabla(Coordenadas) #Para que se actualize el valor es necesario generar de nuevo el tablero (actualizarlo)#Aunque al hacer print(Coordenadas)muestre los cambios realizado, si no se genera el tablero de nuevo no se actualizara print('\n',tablero) passifTrue:#Logica del el bot print('Ahora el enemigo esta\nposicionando sus barcos') print('\nCargando...') Varco1 = random.choice(Posiciones) whileTrue: Varco2 = random.choice(Posiciones) if Varco2 == Varco1: passelse: breakwhileTrue: Varco3 = random.choice(Posiciones) if Varco3 == Varco1 or Varco3 == Varco2: passelse: break#limpiaremos el tablero#trate de hacerlo con un bucle for pero no funciono, se veia facil Coordenadas[PBarco1]= Agua Coordenadas[PBarco2]= Agua Coordenadas[PBarco3]= Agua tablero = tabla(Coordenadas) #posicionamos los barcos enemigos PVarco1 = ((Posiciones.index(Varco1))) Coordenadas[PVarco1] # PV1 = Coordenadas[PVarco1] PVarco2 = ((Posiciones.index(Varco2))) Coordenadas[PVarco2] # PV2 = Coordenadas[PVarco2] PVarco3 = ((Posiciones.index(Varco3))) Coordenadas[PVarco3] # PV3 = Coordenadas[PVarco3] # PVE = [PV1,PV2,PV3] time.sleep(5) p('\n"Listo"\n') time.sleep(1) p('El enemigo ha posicionado sus barcos') p('Es hora de jugar') input('\n presiona cualquier tecla para continuar') clear() passifTrue: print('\tHora de Atacar!!!') print('Naves: Jefe estamos listos\npara el bombardeo aereo\n') list_atack = [] list_atackR = [] Varcos = [Varco1,Varco2,Varco3] Ataque = () AtaqueR = () #podria ser lo que sea xd BarcosS= [] #Barcos supervivientes BarcosRD= [] #Barcos rivales destruidoswhile partida: print('Tus barcos restantes: \n',Barcos,' Vidas: ',vidas_jugador,'\nTe han atacado: \n',list_atackR) tablero = tabla(Coordenadas) print(tablero) print('Barcos rivales destruidos: \n',BarcosRD,len(BarcosRD),'/ 3') print('Haz atacado: \n',list_atack) #validamos que la coordenada sea validawhilenot Ataque in Posiciones: Ataque = input('Ingresa una coordenada\npara atacar: ...').upper() if Ataque notin Posiciones: print('Elige una coordenada Valida') else: print('atacando...\n') list_atack.append(Ataque) #definimos la coordenada del ataque PAtaque = ((Posiciones.index(Ataque))) if Ataque == Varco1 or Ataque == Varco2 or Ataque == Varco3: print('\tHundiste un barco') Coordenadas[PAtaque] = Bomba tablero = tabla(Coordenadas) vidas_bot -= 1#Vemos que barco ya derribamos BarcosRD.append(Ataque) else: print('\tFallamos el tiro') Coordenadas[PAtaque] = Bomba tablero = tabla(Coordenadas) time.sleep(2) print('\nTurno del rival:') print('te atacan...') time.sleep(3) #aqui se definen los ataques del bot pero no se tienen que repetir zzz = 1while zzz: AtaqueR = random.choice(Posiciones) whilenot AtaqueR in list_atackR: list_atackR.append(AtaqueR) zzz -= 1''' PAtaqueR = ((Posiciones.index(AtaqueR))) #Esto esra para imprimir el teclado #enemigo xd''' print('El rival ataco a: ...',AtaqueR,'\n') #vemos que barcos nos quedan:if AtaqueR in Barcos: Barcos.remove(AtaqueR) #Hacen lo mismo pero no se me habia #ocurrido el .remove xd''' #Posicion del barco destruido(mio) PBarcoD = (Barcos.index(AtaqueR)) Barcos.pop(PBarcoD) '''if AtaqueR==Barco1 or AtaqueR==Barco2 or AtaqueR ==Barco3: print('\tHundio uno de tus barcos') #Coordenadas[PAtaqueR] = Bomba#tablero = tabla(Coordenadas) vidas_jugador -= 1else: print('\tEl rival fallo el tiro') #Coordenadas[PAtaqueR] = Bomba#tablero = tabla(Coordenadas) time.sleep(3) if vidas_bot == 0: print('\tGANASTE !!!\nFelicidades eres Increible :D') partida -= 1 game4 -= 1 time.sleep(3) input('\nPresiona cualquier tecla\npara volver al menu principal') elif vidas_jugador == 0: print('Perdiste :(') print('Las naves enemigas estaban en : \n''\t',Varcos) time.sleep(3) input('\nPresiona cualquier tecla\npara volver al menu principal') partida -= 1 game4 -= 1else: pass clear() Ataque = () AtaqueR = () while game5: print('Gracias por jugar\nBuena partida\n\t\t"BATLESHIPP"') game2 += 1 game3 += 1 vidas_jugador = 3 vidas_bot = 3 partida = 1 print('Reiniciando el juego...') time.sleep(8) clear() break
wow la vedad me encanto la forma que le diste, me dan ganas de seuir aprendiendo y lograr algo asi
Ya te urgía sacarlo