Hola!!!
Me da muchisima ilusion mostrarles un proyecto que me costo realizar, es un juego de batalla de barcos simple pero muy disfrutable con una buena logica detras, para hacerlo tuve que superar varios desafios que no hubiera podido superar de no ser por la ayuda de chat gpt, realmente aprendi bastante con esto, me gustaria que lo probaran y me dieran su opinion, mejoras, sugerencias o lo que sea.
Solo como recomendacion al ejecutarlo asegurate que la consola donde se muestre sea de buen tamaño para que se pueda visualizar sin problema el tablero.
Aqui dejo el codigo.
<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