Hi guys i’m making a game in python using pygame
. I have a piece of code that shoots lasers from a ship in a space themed game. Here is the code:
JavaScript
x
42
42
1
# Laser
2
laserImg = pygame.image.load('assets/PNG/Lasers/laserBlue01.png')
3
laserX = 0
4
laserY = 480
5
laserX_change = 0
6
laserY_change = 8
7
laser_state = "ready"
8
9
def fire_laser(x,y):
10
global laser_state
11
laser_state = "fire"
12
screen.blit(laserImg, (x+20,y+9))
13
screen.blit(laserImg, (x+70,y+9))
14
15
running = True
16
17
while running:
18
screen.fill((0, 0, 0))
19
20
screen.blit(background,(0,0))
21
22
for event in pygame.event.get():
23
if event.type == pygame.QUIT:
24
running = False
25
26
if event.key == pygame.K_SPACE:
27
if laser_state is "ready":
28
laser_sound = mixer.Sound('assets/Bonus/sfx_laser1.ogg')
29
laser_sound.play()
30
laserX = playerX
31
fire_laser(playerX, laserY)
32
33
# Bullet movement
34
if laserY <= 0:
35
laserY = 475
36
laser_state = "ready"
37
38
if laser_state is "fire":
39
fire_laser(laserX, laserY)
40
laserY -= laserY_change
41
42
Well this piece of code shoots two lasers from the ship,
like this.
But i don’t want that. I want to make if player presses space once shoot the left laser if player presses space again than shoot the right laser and when he presses space again it will shoot left laser again. I hope you did understand.
Advertisement
Answer
You need separate positions and states for the left and the right laser
JavaScript
1
4
1
laserX = [0, 0]
2
laserY = [480, 480]
3
laser_state = ["ready", "ready"]
4
You will also need a variable that indicates which laser will fire next
JavaScript
1
2
1
next_laser = 0
2
Shoot the next laser when SPACE is pressed a nd change the next laser:
JavaScript
1
16
16
1
while running:
2
# [...]
3
4
for event in pygame.event.get():
5
if event.type == pygame.QUIT:
6
running = False
7
8
if event.type == pygame.KEYDOWN:
9
if event.key == pygame.K_SPACE:
10
if laser_state[next_laser] is "ready":
11
laser_sound = mixer.Sound('assets/Bonus/sfx_laser1.ogg')
12
laser_sound.play()
13
laserX[next_laser] = playerX
14
laser_state[next_laser] = "fire"
15
next_laser = (next_laser + 1) % 2
16
Move and draw both lasers dependent on its state
JavaScript
1
14
14
1
while running:
2
# [...]
3
4
for i in range(2):
5
if laser_state[i] is "fire":
6
laserY[i] -= laserY_change
7
if laserY[i] <= 0:
8
laserY[i] = 475
9
laser_state[i] = "ready"
10
11
for i in range(2):
12
if laser_state[i] is "fire":
13
screen.blit(laserImg, (laserX[i] + 20 + i*50, laserY[i]+9))
14
Minimal example:
JavaScript
1
53
53
1
import pygame
2
pygame.init()
3
4
screen = pygame.display.set_mode((400, 400))
5
6
laserImg = pygame.Surface((3, 12))
7
laserImg.fill((255, 255, 255))
8
laserX_change = 0
9
laserY_change = 8
10
laserX = [0, 0]
11
laserY = [330, 330]
12
laser_state = ["ready", "ready"]
13
next_laser = 0
14
15
playerX, playerY = 175, 330
16
17
clock = pygame.time.Clock()
18
running = True
19
while running:
20
clock.tick(100)
21
for event in pygame.event.get():
22
if event.type == pygame.QUIT:
23
running = False
24
25
if event.type == pygame.KEYDOWN:
26
if event.key == pygame.K_SPACE:
27
if laser_state[next_laser] is "ready":
28
laserX[next_laser] = playerX
29
laser_state[next_laser] = "fire"
30
next_laser = (next_laser + 1) % 2
31
32
keys = pygame.key.get_pressed()
33
if keys[pygame.K_LEFT]:
34
playerX -= 5
35
playerX = max(25, playerX)
36
if keys[pygame.K_RIGHT]:
37
playerX += 5
38
playerX = min(375, playerX)
39
40
for i in range(2):
41
if laser_state[i] is "fire":
42
laserY[i] -= laserY_change
43
if laserY[i] <= 0:
44
laserY[i] = 330
45
laser_state[i] = "ready"
46
47
screen.fill(0)
48
for i in range(2):
49
if laser_state[i] is "fire":
50
screen.blit(laserImg, (laserX[i] + i*50, laserY[i]+9))
51
pygame.draw.rect(screen, (64, 127, 255), (playerX, playerY, 50, 50))
52
pygame.display.flip()
53