subida a repo propio

This commit is contained in:
luisgulo 2023-06-01 00:39:26 +02:00
commit 6b6b500cf0
53 changed files with 634 additions and 0 deletions

3
.idea/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

View file

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

10
.idea/juego_tanque.iml Normal file
View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

4
.idea/misc.xml Normal file
View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (juego_tanque)" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml Normal file
View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/juego_tanque.iml" filepath="$PROJECT_DIR$/.idea/juego_tanque.iml" />
</modules>
</component>
</project>

33
README.md Normal file
View file

@ -0,0 +1,33 @@
# tanques
Juego de tanques 2D desarrollado en Python con pygame
<p align="center"> <img src="capturas_juego/captura_inicio.png" width="400" height="300"> </p>
<p align="center"> <img src="capturas_juego/captura_fin.png" width="400" height="300"> </p>
Requisitos: Tener instalado python y pip
Como usarlo:
1.- Descargar codigo del repositorio:
$ cd
$ git clone https://gitea.soloconlinux.org.es/luisgulo/tanques.git
$ cd tanques
2.- Instalar modulo pygame
$ source venv/bin/activate
$ pip install pygame
3a.- Lanzar juego (modo directo):
$ chmod +x guerra_tanques.py
$ ./guerra_tanques.py
3b.- Lanzar juego (mediante python)
$ python ./guerra_tanques.py

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

47
clase_bala.py Normal file
View file

@ -0,0 +1,47 @@
import pygame
from pygame.sprite import Sprite
#from clase_tanque import Tanque
class Bala(Sprite):
''' Clase para gestionar las balas disparadas '''
def __init__(self, juego, direccion):
''' Crear objeto desde posicion del tanque '''
super().__init__()
self.screen = juego.screen
self.settings = juego.settings
self.color = self.settings.bala_color
# Crear rectangulo para la bala en posicion (0,0) y luego la colocamos
self.rect = pygame.Rect(0,0, self.settings.bala_ancho, self.settings.bala_largo)
self.rect.midtop = juego.tanque.rect.midtop
self.direccion_bala = direccion
# defecto
self.x = float(self.rect.x)
self.y = float(self.rect.y)
if self.direccion_bala == 'Arr':
self.x = float(self.rect.x)
self.y = float(self.rect.y)
if self.direccion_bala == 'Aba':
self.x = float(self.rect.x)
self.y = float(self.rect.y) + 64
if self.direccion_bala == 'Dcha':
self.x = float(self.rect.x) + 31
self.y = float(self.rect.y) + 30
if self.direccion_bala == 'Izda':
self.x = float(self.rect.x) - 31
self.y = float(self.rect.y) + 30
def update(self):
if self.direccion_bala == 'Arr':
self.y -= self.settings.bala_velocidad
if self.direccion_bala == 'Aba':
self.y += self.settings.bala_velocidad
if self.direccion_bala == 'Dcha':
self.x += self.settings.bala_velocidad
if self.direccion_bala == 'Izda':
self.x -= self.settings.bala_velocidad
self.rect.x = self.x
self.rect.y = self.y
def pintar_bala(self):
pygame.draw.rect(self.screen, self.color, self.rect)

28
clase_boton.py Normal file
View file

@ -0,0 +1,28 @@
import pygame.font
class Boton:
def __init__(self, juego, mensaje):
''' Inicializar atributos del boton '''
self.screen = juego.screen
self.screen_rect = self.screen.get_rect()
# Ajustar dimensiones y propiedades del boton
self.width, self.height = 200, 50
self.button_color = (0, 155, 0)
self.text_color = (255, 255, 255)
self.font = pygame.font.SysFont(None, 48)
# Crear objeto rectangular del boton y centrarlo
self.rect = pygame.Rect(0, 0, self.width, self.height)
self.rect.center = self.screen_rect.center
# Preparamos el mensaje del boton (1 sola vez)
self._preparar_mensaje(mensaje)
def _preparar_mensaje(self, mensaje):
''' Convertir el mensaje en imagen '''
self.msg_image = self.font.render(mensaje, True, self.text_color, self.button_color)
self.msg_image_rect = self.msg_image.get_rect()
self.msg_image_rect.center = self.rect.center
def dibujar_boton(self):
''' Dibujamos boton vacio y luego el texto '''
self.screen.fill(self.button_color, self.rect)
self.screen.blit(self.msg_image, self.msg_image_rect)

97
clase_enemigo.py Normal file
View file

@ -0,0 +1,97 @@
import pygame
import random
from pygame.sprite import Sprite
class Enemigo(Sprite):
''' Clase para representar un enemigo '''
def __init__(self, juego):
''' Inicializa al enemigo y lo coloca '''
super().__init__()
self.screen = juego.screen
self.direccion = 'Aba'
# Cargamos imagen del enemigo
direccion = random.randrange(1,5)
if direccion == 1:
self.direccion = 'Aba'
self.rutaImagen = 'imagenes/enemigo_abajo_01.png'
if direccion == 2:
self.direccion = 'Arr'
self.rutaImagen = 'imagenes/enemigo_arriba_01.png'
if direccion == 3:
self.direccion = 'Dcha'
self.rutaImagen = 'imagenes/enemigo_derecha_01.png'
if direccion == 4:
self.direccion = 'Izda'
self.rutaImagen = 'imagenes/enemigo_izquierda_01.png'
self.velocidad = 1
self.avance = random.randrange(25,200)
self.vEnemigo = True
self.image = pygame.image.load(self.rutaImagen)
self.rect = self.image.get_rect()
# Colocar al enemigo en su posicion
self.rect.x = self.rect.width
self.rect.y = self.rect.height
# guardamos posicion exacta del enemigo
self.x = float(self.rect.x)
self.y = float(self.rect.y)
def update(self):
''' Mover a los enemigos '''
if self.vEnemigo:
if self.direccion == 'Aba':
self.rutaImagen = 'imagenes/enemigo_abajo_01.png'
if self.direccion == 'Arr':
self.rutaImagen = 'imagenes/enemigo_arriba_01.png'
if self.direccion == 'Dcha':
self.rutaImagen = 'imagenes/enemigo_derecha_01.png'
if self.direccion == 'Izda':
self.rutaImagen = 'imagenes/enemigo_izquierda_01.png'
else:
if self.direccion == 'Aba':
self.rutaImagen = 'imagenes/enemigo_abajo_02.png'
if self.direccion == 'Arr':
self.rutaImagen = 'imagenes/enemigo_arriba_02.png'
if self.direccion == 'Dcha':
self.rutaImagen = 'imagenes/enemigo_derecha_02.png'
if self.direccion == 'Izda':
self.rutaImagen = 'imagenes/enemigo_izquierda_02.png'
self.vEnemigo = not self.vEnemigo
# Desplazar tanque enemigo
if self.avance <= 0:
self.avance = random.randrange(25,200)
direccion = random.randrange(1, 5)
if direccion == 1:
self.direccion = 'Aba'
self.rutaImagen = 'imagenes/enemigo_abajo_01.png'
if direccion == 2:
self.direccion = 'Arr'
self.rutaImagen = 'imagenes/enemigo_arriba_01.png'
if direccion == 3:
self.direccion = 'Dcha'
self.rutaImagen = 'imagenes/enemigo_derecha_01.png'
if direccion == 4:
self.direccion = 'Izda'
self.rutaImagen = 'imagenes/enemigo_izquierda_01.png'
else:
if self.direccion == 'Arr':
self.rect.y -= self.velocidad
if self.direccion == 'Aba':
self.rect.y += self.velocidad
if self.direccion == 'Dcha':
self.rect.x += self.velocidad
if self.direccion == 'Izda':
self.rect.x -= self.velocidad
# Restamos movimiento realizado
self.avance -= self.velocidad
# Cambiar direccion si se sale de pantalla
pantalla = self.screen.get_rect()
if self.rect.x <= pantalla.left: # choca lado izdo
self.direccion = 'Dcha'
if self.rect.x >= pantalla.right - 64:
self.direccion = 'Izda'
if self.rect.y <= pantalla.top:
self.direccion = 'Aba'
if self.rect.y >= pantalla.bottom - 64:
self.direccion = 'Arr'
self.image = pygame.image.load(self.rutaImagen)

11
clase_fondo.py Normal file
View file

@ -0,0 +1,11 @@
import pygame
class Fondo:
def __init__(self, juego):
self.screen = juego.screen
self.rutaImagen = 'imagenes/fondo.png'
self.image = pygame.image.load(self.rutaImagen)
def blitme(self):
''' Pintar fondo actual '''
self.screen.blit(self.image, (0, 0))

43
clase_puntuaciones.py Normal file
View file

@ -0,0 +1,43 @@
import pygame.font
class Puntuacion:
''' Clase par mostrar informacion de la puntuacion '''
def __init__(self, juego):
''' Inicializar puntuacion '''
self.screen = juego.screen
self.screen_rect = self.screen.get_rect()
self.settings = juego.settings
self.puntos = 0
self.nivel = 1
''' Ajuste de la fuente de la puntuacion '''
self.text_color = (30, 30, 30)
self.font = pygame.font.SysFont(None,48)
self.preparar_puntuacion()
self.preparar_nivel()
def preparar_puntuacion(self):
''' Convertir puntuacion en imagen renderizada '''
score_str = "Ptos: " + str(self.puntos)
self.score_image = self.font.render(score_str, True, self.text_color)
''' Puntuacion en parte superior derecha '''
self.score_rect = self.score_image.get_rect()
self.score_rect.right = self.screen_rect.right - 20
self.score_rect.top = 40
def preparar_nivel(self):
''' convertir texto en imagen '''
nivel_str = f"Nivel: {self.nivel}"
self.nivel_image = self.font.render(nivel_str, True, self.text_color)
''' Nivel en parte sup. derecha y debajo de los puntos '''
self.nivel_rect = self.nivel_image.get_rect()
self.nivel_rect.right = self.screen_rect.right - 20
self.nivel_rect.top = 10
def mostrar_puntacion(self):
''' dibujar la puntacion '''
self.preparar_puntuacion()
self.screen.blit(self.score_image, self.score_rect)
''' dibujar el nivel '''
self.preparar_nivel()
self.screen.blit(self.nivel_image, self.nivel_rect)

59
clase_tanque.py Normal file
View file

@ -0,0 +1,59 @@
import pygame
from settings import Settings
class Tanque:
''' Esta clase gestiona el tanque '''
def __init__(self, juego):
self.settings = Settings()
''' Iniciar tanque y fija su posicion '''
self.screen = juego.screen
self.screen_rect = juego.screen.get_rect()
''' Leer imagen y cargar su rectangulo '''
self.vTanque = True
self.rutaImagen = 'imagenes/tanque_arriba_01.png'
''' Permitir movimiento continuo con teclas '''
self.mover_derecha = False
self.mover_izquierda = False
self.mover_arriba = False
self.mover_abajo = False
self.image = pygame.image.load(self.rutaImagen)
self.rect = self.image.get_rect()
''' Posicion inicial (abajo en el centro) '''
self.rect.midbottom = self.screen_rect.midbottom
def update(self):
if self.mover_derecha:
ruta = 'imagenes/tanque_derecha_'
self.rect.x += self.settings.velocidad_tanque
if self.rect.x >= 800 - 64:
self.rect.x = 800 - 64
elif self.mover_izquierda:
ruta = 'imagenes/tanque_izquierda_'
self.rect.x -= self.settings.velocidad_tanque
if self.rect.x <= 0:
self.rect.x = 0
elif self.mover_arriba:
ruta = 'imagenes/tanque_arriba_'
self.rect.y -= self.settings.velocidad_tanque
if self.rect.y <= 0:
self.rect.y = 0
elif self.mover_abajo:
ruta = 'imagenes/tanque_abajo_'
self.rect.y += self.settings.velocidad_tanque
if self.rect.y >= 600 - 64:
self.rect.y = 600 - 64
else:
trocear = self.rutaImagen.split('_')
ruta = trocear[0] + '_' + trocear[1] + '_'
''' Simular moviento ruedas tanque '''
if self.vTanque == True:
ruta = ruta + '01.png'
else:
ruta = ruta + '02.png'
self.rutaImagen = ruta
self.image = pygame.image.load(ruta)
self.vTanque = not self.vTanque
def blitme(self):
''' Pintar tanque en posicion actual '''
self.screen.blit(self.image, self.rect)

21
clase_vidas.py Normal file
View file

@ -0,0 +1,21 @@
import pygame
from pygame.sprite import Sprite
class Vida(Sprite):
''' Clase para gestionar las vidas restantes '''
def __init__(self, juego):
super().__init__()
self.vidas_quedan = juego.vidas
self.screen = juego.screen
self.rutaImagen = 'imagenes/tanque_vida.png'
self.image = pygame.image.load(self.rutaImagen)
self.rect = self.image.get_rect()
# Colocar la vida en su posicion
self.rect.x = self.rect.width
self.rect.y = self.rect.height
# guardamos posicion exacta de la vida
self.x = float(self.rect.x)
self.y = float(self.rect.y)
def update(self):
self.image = pygame.image.load(self.rutaImagen)

244
guerra_tanques.py Executable file
View file

@ -0,0 +1,244 @@
#!/usr/bin/python
import sys
import time
import pygame
import random
from settings import Settings
from clase_tanque import Tanque
from clase_fondo import Fondo
from clase_bala import Bala
from clase_enemigo import Enemigo
from clase_puntuaciones import Puntuacion
from clase_vidas import Vida
from clase_boton import Boton
class GuerraTanque:
''' Clase general para gestionar recursos y juego '''
def __init__(self):
''' Inicializar el juego y crear recursos '''
pygame.init()
# Leemos valores de configuracion del juego
self.settings = Settings()
# Leemos numero de vidas
self.vidas = self.settings.vidas
self.juego_activo = False
# Puntuacion a Cero
self.puntuacion = 0
# Preparamos pantalla
self.screen = pygame.display.set_mode((self.settings.pantalla_ancho , self.settings.pantalla_alto))
pygame.display.set_caption("GUERRA DE TANQUES - 'ESC' para salir")
pygame.display.set_icon(pygame.image.load('imagenes/tanque_derecha_01.png'))
# Incluir Fondo
self.fondo_juego = Fondo(self)
# Incluimos la puntuacion
self.puntuacion = Puntuacion(self)
# Incluimos las vidas
self.tanques_que_nos_quedan = pygame.sprite.Group()
self._crear_vidas()
# Iniciar tanque
self.tanque = Tanque(self)
self.balas = pygame.sprite.Group()
self.mirando_hacia='Arr'
# Iniciar enemigos
self.enemigos = pygame.sprite.Group()
self._crear_escuadron()
self.ruido_cadenas = pygame.mixer.Sound('sonidos/ruido_cadenas_tanque.wav')
self.boton_iniciar = Boton(self, "Iniciar")
def run_game(self):
#pygame.mixer.Sound('sonidos/retro-sound.mp3').play()
#time.sleep(0.5)
#pygame.mixer.stop()
''' Bucle infinito del juego '''
while True:
self.fondo_juego
''' Leemos eventos de teclado y raton '''
self.chequear_eventos()
if self.juego_activo: # Solo si esta el juego activo
''' Actualizar tanque '''
self.tanque.update()
''' Gestionamos los disparos y las balas '''
self._actualizar_bala()
''' Gestionamos los enemigos '''
self.enemigos.update()
# Si chocamos con enemigo morimos
if pygame.sprite.spritecollideany(self.tanque,self.enemigos):
self._chequear_vidas()
''' Actualizar pantalla '''
self.actualizar_pantalla()
def _chequear_vidas(self):
# Chocamos con un tanque... Quitamos una vida
self.vidas -= 1
self.puntuacion.nivel -= 1
self.tanques_que_nos_quedan.remove()
# Situamos tanque en posicion inicial
self.tanque.rect.midbottom = self.screen.get_rect().midbottom
# Vaciamos de enemigos
self.enemigos.empty()
self.tanques_que_nos_quedan.empty()
# Cheequeamos si hay que pintar el game over
if self.vidas > 0:
pygame.mixer.Sound('sonidos/explosion_tanque.wav').play()
# Hacemos una pequeña pausa
time.sleep(0.5)
else:
self.puntuacion.nivel += 1
# Mensaje de GAME OVER
print("G A M E O V E R")
pygame.mixer.Sound('sonidos/game_over.wav').play()
self.juego_activo = False
pygame.mouse.set_visible(True)
def actualizar_pantalla(self):
''' Redibujar la pantalla '''
# Recargar imagenes y cambiar nueva pantalla
# Relleno de color del fondo
self.screen.fill(self.settings.color_fondo)
# Incluir recursos del juego
self.fondo_juego.blitme()
self.tanque.blitme()
if self.vidas == 0:
img_fin_juego = pygame.image.load('imagenes/game_over.png')
self.screen.blit(img_fin_juego, (120, 300))
pygame.display.set_caption("GUERRA DE TANQUES - 'ESC' para salir")
''' Balas/Disparos'''
for disparo in self.balas.sprites():
disparo.pintar_bala()
''' Escuadron enemigo '''
self.enemigos.draw(self.screen)
''' Vamos grabando la puntuacion del juego '''
self.puntuacion.mostrar_puntacion()
# Pintamos grupo de mini-tanques que indican la vida
self.tanques_que_nos_quedan.draw(self.screen)
# Dibujar boton de iniciar partida si juego inactivo
if not self.juego_activo:
self.boton_iniciar.dibujar_boton()
# Pintamos la ultima pantalla que hemos dibujado en memoria
pygame.display.flip()
def _crear_escuadron(self):
''' Crear un escuadron de 5 tanques enemigos '''
enemigo = Enemigo(self)
random.seed()
num_enemigos = 5
for i in range(num_enemigos):
enemigo = Enemigo(self)
enemigo.velocidad = (self.puntuacion.nivel / 4) + 0.5
iniX = int((800/num_enemigos) * int(i))
finX= int(iniX + (800/num_enemigos))
#print(f"iniX {iniX}")
#print(f"finX {finX}")
enemigo.x = random.randrange(iniX, finX)
y = 300
enemigo.y = random.randrange(0, y)
enemigo.rect.x = enemigo.x
enemigo.rect.y = enemigo.y
self.enemigos.add(enemigo)
def _crear_vidas(self):
''' Crear tantos mini-tanques de vidas como vidas queden '''
mini_tanque = Vida(self)
vidas_quedan = self.vidas
for i in range(vidas_quedan):
mini_tanque = Vida(self)
mini_tanque.x = (28 * i) + 5
mini_tanque.y = 0
mini_tanque.rect.x = mini_tanque.x
mini_tanque.rect.y = mini_tanque.y
self.tanques_que_nos_quedan.add(mini_tanque)
def _disparar_bala(self):
''' Crear una bala nueva e incluirla en Group '''
if len(self.balas) < self.settings.balas_permitidas:
nueva_bala = Bala(self, self.mirando_hacia)
self.balas.add(nueva_bala)
pygame.mixer.Sound('sonidos/sonido_bala.wav').play()
def _actualizar_bala(self):
''' Crear nuevas balas y eliminar las viejas '''
# Posicion y movimiento de las balas
self.balas.update()
# Eliminamos balas que se salen de la pantalla
pantalla = self.screen.get_rect()
for disparo in self.balas.copy():
if disparo.rect.bottom <= 0 or disparo.rect.top >= 600 or disparo.rect.left <= 0 or disparo.rect.left >= 800:
self.balas.remove(disparo)
# Chequear si destruyo enemigo
# Bala choca con Enemigo => Se destruye Bala (True), Se destruye Enemigo (True)
colision = pygame.sprite.groupcollide(self.balas, self.enemigos, True, True)
# Si hay datos en colision es que alcanzamos al enemigo
if len(colision) > 0:
# 5 puntos por tanque
self.puntuacion.puntos += 5
pygame.mixer.Sound('sonidos/explosion_enemigo.wav').play()
# Si no hay enemigos creo un nuevo escuadron
if not self.enemigos:
# 7 puntos por acabar con escuadra completa
self.puntuacion.puntos += 7
self.puntuacion.nivel += 1
# Eliminar Balas
self.balas.empty()
# Crear escuadron
self._crear_escuadron()
# Vidas
self._crear_vidas()
def _chequear_boton_iniciar(self, posicion_raton):
''' Si pulsa raton iniciamos juego '''
if self.boton_iniciar.rect.collidepoint(posicion_raton):
self.juego_activo = True
pygame.mouse.set_visible(False)
def chequear_eventos(self):
''' Leemos eventos de teclado y raton '''
for evento in pygame.event.get():
if evento.type == pygame.QUIT:
sys.exit()
elif evento.type == pygame.KEYDOWN: # Detectar que se presiona tecla
self.ruido_cadenas.play(-1)
# Teclas: S, Q o ESC finalizan el juego
if evento.key == pygame.K_s or evento.key == pygame.K_q or evento.key == pygame.K_ESCAPE:
pygame.QUIT
sys.exit()
#if evento.key == pygame.K_i: # Iniciar
# self.juego_activo = True
if evento.key == pygame.K_RIGHT:
# mover tanque a la derecha
self.tanque.mover_derecha = True
self.mirando_hacia = 'Dcha'
if evento.key == pygame.K_LEFT:
# mover tanque a la izquierda
self.tanque.mover_izquierda = True
self.mirando_hacia = 'Izda'
if evento.key == pygame.K_UP:
# mover tanque hacia arriba
self.tanque.mover_arriba = True
self.mirando_hacia = 'Arr'
if evento.key == pygame.K_DOWN:
# mover tanque hacia abajo
self.tanque.mover_abajo = True
self.mirando_hacia = 'Aba'
if evento.key == pygame.K_SPACE:
self._disparar_bala()
elif evento.type == pygame.KEYUP: # Detener movimientos
self.ruido_cadenas.stop()
self.tanque.mover_izquierda = False
self.tanque.mover_derecha = False
self.tanque.mover_arriba = False
self.tanque.mover_abajo = False
elif evento.type == pygame.MOUSEBUTTONDOWN: # Si aprieta raton (en cualquier sitio)
posicion_raton = pygame.mouse.get_pos()
self._chequear_boton_iniciar(posicion_raton)
self.puntuacion.nivel = 1
self.puntuacion.puntos = 0
self.vidas = 3
if __name__ == '__main__':
''' Creamos instancia del juego y lo iniciamos '''
juego = GuerraTanque()
juego.run_game()

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 B

BIN
imagenes/fondo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
imagenes/game_over.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 484 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

BIN
imagenes/tanque_vida.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

1
requeriments.txt Normal file
View file

@ -0,0 +1 @@
pygame==2.4.0

1
runtime.txt Normal file
View file

@ -0,0 +1 @@
Python 3.9.2

18
settings.py Normal file
View file

@ -0,0 +1,18 @@
class Settings:
''' Esta clase es para guardar toda la configuracion del juego '''
def __init__(self):
''' Inicializar los valores del juego '''
# Resolucion
self.pantalla_ancho = 800
self.pantalla_alto = 600
# Color fondo
self.color_fondo = (0, 50, 0)
self.velocidad_tanque = 1
''' Configuracion de las balas '''
self.bala_velocidad = 2
self.bala_ancho = 8
self.bala_largo = 8
self.bala_color = (60, 60, 60)
self.balas_permitidas = 3 # Num de disparos permitidos
self.vidas = 3
self.puntos = 0

Binary file not shown.

Binary file not shown.

BIN
sonidos/game_inicio.wav Normal file

Binary file not shown.

BIN
sonidos/game_over.wav Normal file

Binary file not shown.

BIN
sonidos/retro-sound.mp3 Normal file

Binary file not shown.

Binary file not shown.

BIN
sonidos/sonido_bala.wav Normal file

Binary file not shown.