Saltar la navegación

4.4. Síntesis: PUNTERIA

Un programa de puntería

Te voy a proponer un programa de puntería donde:

  • El jugador mueve el puntero con el ratón, puede disparar con clic izquierdo para golpear el blanco.
  • El puntero es el archivo "Puntero.png" Puntero del juegoy debe de estar en el mismo directorio que el código del programa.
  • El blanco se mueve aleatoriamente y rebota en los bordes de la ventana si se mantiene presionada la barra espaciadora.

Código del Programa

import pygame
import random

# Inicialización de Pygame
pygame.init()

# Dimensiones de la ventana
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Disparo al blanco")

# Carga del puntero
puntero = pygame.image.load("Puntero.png")
puntero_rect = puntero.get_rect()

# Color y dimensiones del blanco
blanco_color = (255, 0, 0)
blanco_width, blanco_height = 50, 50

# Posición inicial y velocidad del blanco
blanco_x = random.randint(0, 750)
blanco_y = random.randint(0, 550)
blanco_vel_x = 5
blanco_vel_y = 5

# Fuente para mostrar el número de disparos restantes
font = pygame.font.SysFont(None, 36)

# Bucle principal del juego
running = True
while running:
    # Captura de eventos
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        # Disparo con el botón izquierdo del ratón
        if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
            # Registrar disparo
            mouse_pos = pygame.mouse.get_pos()
            if blanco_x <= mouse_pos[0] <= blanco_x + blanco_width and blanco_y <= mouse_pos[1] <= blanco_y + blanco_height:
                # Mueve el blanco a una nueva posición si es alcanzado
                blanco_x = random.randint(0, 750)
                blanco_y = random.randint(0, 550)

    # Captura la posición del ratón
    mouse_pos = pygame.mouse.get_pos()

    # Actualiza la posición del puntero
    puntero_rect.center = mouse_pos

    # Detecta si la barra espaciadora está presionada para mover el blanco
    keys = pygame.key.get_pressed()
    if keys[pygame.K_SPACE]:
        blanco_x += blanco_vel_x
        blanco_y += blanco_vel_y

        # Rebote del blanco en los bordes de la pantalla
        if blanco_x <= 0 or blanco_x + blanco_width >= 800:
            blanco_vel_x = -blanco_vel_x
        if blanco_y <= 0 or blanco_y + blanco_height >= 600:
            blanco_vel_y = -blanco_vel_y

    # Dibuja el fondo blanco
    screen.fill((255, 255, 255))

    # Dibuja el blanco
    pygame.draw.rect(screen, blanco_color, (blanco_x, blanco_y, blanco_width, blanco_height))

    # Dibuja el puntero
    screen.blit(puntero, puntero_rect)

    # Actualiza la pantalla
    pygame.display.flip()

    pygame.time.delay(30)

pygame.quit()

Ordena el código

Te propongo el fragmento del código que controla el disparador y los disparos desordenado. Debes mover las diferentes líneas de código para que sea funcional.

  • # Disparo con el botón izquierdo del ratón
  • if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
  • # Registrar disparo
  • mouse_pos = pygame.mouse.get_pos()
  • if blanco_x <= mouse_pos[0] <= blanco_x + blanco_width and blanco_y <= mouse_pos[1] <= blanco_y + blanco_height:
  • # Mueve el blanco a una nueva posición si es alcanzado
  • blanco_x = random.randint(0, 750)
  • blanco_y = random.randint(0, 550)

Comprueba

Correcto!

Disculpa... la respuesta correcta es:

Ordena el código (y 2)

Haz lo mismo que en el ejercicio anterior pero con el código para usar el teclado y hacer que el blanco se mueva aleatoriamente.

  • # Detecta si la barra espaciadora está presionada para mover el blanco
  • keys = pygame.key.get_pressed()
  • if keys[pygame.K_SPACE]:
  • blanco_x += blanco_vel_x
  • blanco_y += blanco_vel_y

Comprueba

Correcto!

Disculpa... la respuesta correcta es:

Licencia: licencia propietaria intelectual

Creado con eXeLearning (Ventana nueva)