-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathgame.py
177 lines (140 loc) · 5.2 KB
/
game.py
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
import pygame
import random
# Initialize pygame
pygame.init()
# Game window dimensions
WIDTH, HEIGHT = 1366, 768
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Space Shooter")
# Set the clock
FPS = 60
clock = pygame.time.Clock()
# Colors
WHITE = (255, 255, 255)
# Load assets
PLAYER_IMG = pygame.image.load("C://Users//pdube//OneDrive//Desktop//NASA//main.js//test2//s1.png").convert_alpha()
ENEMY_IMG = pygame.image.load("C://Users//pdube//OneDrive//Desktop//NASA//main.js//test2//as1.png").convert_alpha()
BULLET_IMG = pygame.image.load("C://Users//pdube//OneDrive//Desktop//NASA//main.js//test2//b1.png").convert_alpha()
BG = pygame.image.load("C://Users//pdube//OneDrive//Desktop//NASA//main.js//test2//bg.png").convert_alpha()
# Resize images if necessary (optional)
PLAYER_IMG = pygame.transform.scale(PLAYER_IMG, (150, 150)) # Adjust size as needed
ENEMY_IMG = pygame.transform.scale(ENEMY_IMG, (70, 70)) # Adjust size as needed
BULLET_IMG = pygame.transform.scale(BULLET_IMG, (10, 30)) # Adjust size as needed
BG = pygame.transform.scale(BG, (WIDTH, HEIGHT))
# Spaceship class
class Spaceship:
def __init__(self):
self.img = PLAYER_IMG
self.x = WIDTH // 2
self.y = HEIGHT - 100
self.speed = 5
self.bullets = []
def draw(self, window):
window.blit(self.img, (self.x, self.y))
def move(self, keys):
if keys[pygame.K_LEFT] and self.x - self.speed > 0: # Move left
self.x -= self.speed
if keys[pygame.K_RIGHT] and self.x + self.speed + self.img.get_width() < WIDTH: # Move right
self.x += self.speed
def shoot(self):
# Position bullet slightly above the spaceship
bullet = Bullet(self.x + self.img.get_width() // 2 - BULLET_IMG.get_width() // 2, self.y)
self.bullets.append(bullet)
# Bullet class
class Bullet:
def __init__(self, x, y):
self.img = BULLET_IMG
self.x = x
self.y = y
self.speed = -7
def draw(self, window):
window.blit(self.img, (self.x, self.y))
def move(self):
self.y += self.speed
def off_screen(self):
return self.y < 0
def collision(self, obj):
return collide(self, obj)
# Enemy class
class Enemy:
def __init__(self, x, y):
self.img = ENEMY_IMG
self.x = x
self.y = y
self.speed = 2
def draw(self, window):
window.blit(self.img, (self.x, self.y))
def move(self):
self.y += self.speed
def off_screen(self):
return self.y > HEIGHT
# Collision function
def collide(obj1, obj2):
offset_x = obj2.x - obj1.x
offset_y = obj2.y - obj1.y
return obj1.img.get_rect().colliderect(obj2.img.get_rect().move(offset_x, offset_y))
# Main game function
def main():
run = True
spaceship = Spaceship()
enemies = []
score = 0
lives = 5
def redraw_window():
WIN.blit(BG, (0, 0)) # Draw background
spaceship.draw(WIN) # Draw spaceship
for enemy in enemies:
enemy.draw(WIN)
for bullet in spaceship.bullets:
bullet.draw(WIN)
# Display Score and Lives
font = pygame.font.SysFont('comicsans', 30)
score_text = font.render(f"Score: {score}", True, WHITE)
lives_text = font.render(f"Lives: {lives}", True, WHITE)
WIN.blit(score_text, (10, 10))
WIN.blit(lives_text, (WIDTH - lives_text.get_width() - 10, 10))
pygame.display.update()
while run:
clock.tick(FPS)
redraw_window()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# Movement controls
keys = pygame.key.get_pressed()
spaceship.move(keys)
# Shooting
if keys[pygame.K_SPACE]:
spaceship.shoot()
# Move bullets
for bullet in spaceship.bullets:
bullet.move()
if bullet.off_screen():
spaceship.bullets.remove(bullet)
# Generate enemies
if random.randrange(0, 120) == 1:
enemy = Enemy(random.randrange(50, WIDTH - 50), -100)
enemies.append(enemy)
# Move enemies
for enemy in enemies:
enemy.move()
if enemy.off_screen():
enemies.remove(enemy)
lives -= 1 # Lose a life if an enemy passes the screen
# Bullet-enemy collisions
for bullet in spaceship.bullets:
for enemy in enemies:
if bullet.collision(enemy):
enemies.remove(enemy)
spaceship.bullets.remove(bullet)
score += 1
if lives <= 0:
font = pygame.font.SysFont('comicsans', 60)
game_over_text = font.render("Game Over!", True, WHITE)
WIN.blit(game_over_text, (WIDTH // 2 - game_over_text.get_width() // 2, HEIGHT // 2))
pygame.display.update()
pygame.time.delay(2000)
run = False
pygame.quit()
if __name__ == "__main__":
main()