-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSpace_Invader.py
More file actions
145 lines (118 loc) · 3.98 KB
/
Copy pathSpace_Invader.py
File metadata and controls
145 lines (118 loc) · 3.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import math
import random
import pygame
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 500
PLAYER_START_X = 370
PLAYER_START_Y = 380
ENEMY_START_Y_MIN = 50
ENEMY_START_Y_MAX = 150
ENEMY_SPEED_X = 4
ENEMY_SPEED_Y = 40
BULLET_SPEED_Y = 10
COLLISION_DISTANCE = 27
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
background = pygame.image.load('background.png')
pygame.display.set_caption("Space Invader")
icon = pygame.image.load("ufo.png")
pygame.display.set_icon(icon)
playerImg = pygame.image.load("player.png")
playerX = PLAYER_START_X
playerY = PLAYER_START_Y
playerX_change = 0
enemyImg = []
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
num_of_enemies = 6
for i in range(num_of_enemies):
enemyImg.append(pygame.image.load('enemy.png'))
enemyX.append(random.randint(0, SCREEN_WIDTH - 64))
enemyY.append(random.randint(ENEMY_START_Y_MIN, ENEMY_START_Y_MAX))
enemyX_change.append(ENEMY_SPEED_X)
enemyY_change.append(ENEMY_SPEED_Y)
bulletImg = pygame.image.load("bullet.png")
bulletX = 0
bulletY = PLAYER_START_Y
bulletX_change = 0
bulletY_change = BULLET_SPEED_Y
bullet_state = "ready"
score_value = 0
font = pygame.font.Font('freesansbold.ttf', 32)
textX = 10
textY = 10
over_font = pygame.font.Font('freesansbold.ttf', 64)
bullet_cooldown = 0
def show_score(x, y):
score = font.render("Score: " + str(score_value), True, (255, 255, 255))
screen.blit(score, (x, y))
def game_over_text():
over_text = over_font.render("GAME OVER", True, (255, 255, 255))
final_score = font.render(f"Final Score: {score_value}", True, (255, 255, 255))
screen.blit(over_text, (200, 250))
screen.blit(final_score, (280, 320))
def player(x, y):
screen.blit(playerImg, (x, y))
def enemy(x, y, i):
screen.blit(enemyImg[i], (x, y))
def fire_bullet(x, y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletImg, (x + 16, y + 10))
def isCollision(enemyX, enemyY, bulletX, bulletY):
distance = math.sqrt((enemyX - bulletX) ** 2 + (enemyY - bulletY) ** 2)
return distance < COLLISION_DISTANCE
running = True
while running:
screen.fill((0, 0, 0))
screen.blit(background, (0, 0))
if bullet_cooldown > 0:
bullet_cooldown -= 1
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerX_change = -5
if event.key == pygame.K_RIGHT:
playerX_change = 5
if event.key == pygame.K_SPACE and bullet_state == "ready" and bullet_cooldown == 0:
bulletX = playerX
fire_bullet(bulletX, bulletY)
bullet_cooldown = 10
if event.type == pygame.KEYUP and event.key in [pygame.K_LEFT, pygame.K_RIGHT]:
playerX_change = 0
playerX += playerX_change
playerX = max(0, min(playerX, SCREEN_WIDTH - 64))
for i in range(num_of_enemies):
if enemyY[i] > 340:
for j in range(num_of_enemies):
enemyY[j] = 2000
game_over_text()
pygame.display.update()
pygame.time.delay(2000)
running = False
break
enemyX[i] += enemyX_change[i]
if enemyX[i] <= 0 or enemyX[i] >= SCREEN_WIDTH - 64:
enemyX_change[i] *= -1
enemyY[i] += enemyY_change[i]
if isCollision(enemyX[i], enemyY[i], bulletX, bulletY):
bulletY = PLAYER_START_Y
bullet_state = "ready"
score_value += 1
enemyX[i] = random.randint(0, SCREEN_WIDTH - 64)
enemyY[i] = random.randint(ENEMY_START_Y_MIN, ENEMY_START_Y_MAX)
enemy(enemyX[i], enemyY[i], i)
if bulletY <= 0:
bulletY = PLAYER_START_Y
bullet_state = "ready"
elif bullet_state == "fire":
fire_bullet(bulletX, bulletY)
bulletY -= bulletY_change
player(playerX, playerY)
show_score(textX, textY)
pygame.display.update()
pygame.quit()