1

juego de batalla naval con python

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

Escribe tu comentario
+ 2
1
495Puntos

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
1
2967Puntos
7 meses

wow la vedad me encanto la forma que le diste, me dan ganas de seuir aprendiendo y lograr algo asi

1
1104Puntos
6 meses

Ya te urgía sacarlo