The objective was to make some bullets come out of the current position of the player and then have them move in a straight line, defined by a vector that is defined by the points of the mouse position at the time of clicking the button and the position of the player, but when the button is pressed nothing happens. Can anyone tell me whats wrong with this code? Thank you
import pygame
import math
pygame.init()
win = pygame.display.set_mode((500,500))
pygame.display.set_caption("Space Shooter")
char = pygame.image.load("spaceship_sprite.png")
x = 500/2
y = 500/2
width = 50
height = 50
velocity = 6
list_of_bullets = []
def point_to_mouse(x,y,char):
mouse_x, mouse_y = pygame.mouse.get_pos()
vector_x, vector_y = mouse_x - x, mouse_y - y
angle = (180 / math.pi) * -math.atan2(vector_y, vector_x) - 90
updated_image = pygame.transform.rotate(char,int(angle))
image_location = updated_image.get_rect(center= (x,y))
win.blit(updated_image,image_location)
def update_game(x,y,width,height,char):
win.fill((0,0,0))
point_to_mouse(x,y,char)
pygame.display.update()
def spawn_bullet(x,y):
global list_of_bullets
initial_x = x
initial_y = y
mouse_x, mouse_y = pygame.mouse.get_pos()
vector_x, vector_y = mouse_x - x, mouse_y - y
#normalize the vector
distance = math.sqrt(vector_x ** 2 + vector_y **2)
normalized_vec = (vector_x/ distance, vector_y/distance)
list_of_bullets.append([initial_x,initial_y,normalized_vec])
run = True
while run:
#check for an event
pygame.time.delay(75)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.MOUSEBUTTONDOWN:
spawn_bullet(x,y)
for bullet in list_of_bullets:
bullet[0] = bullet[0] * bullet[2][0]
bullet[1] = bullet[1] * bullet[2][1]
pygame.draw.rect(win,(0,0,255),(int(bullet[0]),int(bullet[1]),20,20))
if bullet[0] > 500 or bullet[0] < 0 or bullet[1] < 0 or bullet[1] > 500:
del list_of_bullets[list_of_bullets.index(bullet)]
continue
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and x > 0 + width:
x = x - velocity
elif keys[pygame.K_RIGHT] and x < 500 - width:
x = x + velocity
elif keys[pygame.K_UP] and y > 0 + width:
y = y - velocity
elif keys[pygame.K_DOWN] and y < 500 - width:
y = y + velocity
update_game(x,y,width,height,char)
pygame.quit()