Untitled
unknown
python
3 years ago
5.6 kB
4
Indexable
Never
import pygame, time, random pygame.init() SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 FPS = 35 INITIAL_PLAYER_X = 400 INITIAL_PLAYER_Y = 340 Bullet_Velocity = 5 Bullet_Reload_Time = 0.25 Bullet_Damage = 25 List_Of_Asteroids = [] List_Of_Small_Asteroids = [] fpsClock = pygame.time.Clock() background_colour = (128, 128, 128) screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.flip() Player_Img_1 = pygame.image.load('assets/Ship_1.png') Player_Img_2 = pygame.image.load('assets/Ship_2.png') Player_Img_3 = pygame.image.load('assets/Ship_3.png') Player_Img_4 = pygame.image.load('assets/Ship_4.png') Bullet_Img = pygame.image.load('assets/bullet.png') Big_Asteroid_1 = pygame.image.load('assets/big_asteroid_1.png') Small_1_Asteroid_1 = pygame.image.load('assets/small_1_asteroid_1.png') Small_2_Asteroid_1 = pygame.image.load('assets/small_2_asteroid_1.png') Small_3_Asteroid_1 = pygame.image.load('assets/small_3_asteroid_1.png') class Player(pygame.sprite.Sprite): def __init__(self, x, y): pygame.sprite.Sprite.__init__(self) self.Initial_x = x self.Initial_y = y self.Images = [Player_Img_1, Player_Img_2, Player_Img_3, Player_Img_4] self.Bullet_Reload_Time = 0.5 self.Image_Index = 0 self.image = self.Images[self.Image_Index] self.List_Bullets = [] self.Reloaded = False self.rect = self.image.get_rect(topleft=(self.Initial_x, self.Initial_y)) self.Last_Shot_Time = 0 def Player_Keys(self): Pressed_Key = pygame.key.get_pressed() if Pressed_Key[pygame.K_LEFT]: if self.rect.left <= 0: pass else: self.rect.move_ip(-3, 0) if Pressed_Key[pygame.K_RIGHT]: if self.rect.right > 800: pass else: self.rect.move_ip(3, 0) if Pressed_Key[pygame.K_UP]: if self.rect.top <= 0: pass else: self.rect.move_ip(0, -3) if Pressed_Key[pygame.K_DOWN]: if self.rect.bottom > 530: pass else: self.rect.move_ip(0, 3) if Pressed_Key[pygame.K_SPACE]: if self.Reloaded: self.Last_Shot_Time = time.time() xy = (self.rect.topright[0]-5.005, self.rect.topright[1]) Bullet_Rect = player.image.get_rect(midtop=(xy)) self.List_Bullets.append(Bullet_Rect) self.Reloaded = False else: if time.time() - self.Last_Shot_Time > Bullet_Reload_Time: self.Reloaded = True else: pass def update(self, speed): self.Image_Index += speed if self.Image_Index >= len(self.Images): self.Image_Index = 0 self.image = self.Images[int(self.Image_Index)] class Asteroid(): def __init__(self, xy, index): self.x = xy[0] self.y = xy[1] self.List_Asteroids = [[100, Big_Asteroid_1]] self.Index = index self.Health = self.List_Asteroids[self.Index][0] self.Image = self.List_Asteroids[self.Index][1] self.Rect = self.Image.get_rect(center=(self.x, self.y)) def Destroyed(self, other): for i in range(1, 3): Images = pygame.image.load(f"assets/small_{i}_asteroid_{self.Index+1}.png") Rect = Images.get_rect(center=(self.x, self.y)) xvel = 0 yvel = 0 if i == 1: yvel = 2 elif i == 2: yvel = -2 xvel = 1 elif i == 3: xvel = -2 List_Of_Small_Asteroids.append(other(Rect , Images, xvel, yvel)) def __del__(self): print("asteroid Destroyed") class Small_Asteroid(): def __init__(self, rect, image, xvel, yvel): self.Rect = rect self.Image = image self.Health = 30 self.xvel = xvel self.yvel = yvel player = Player(INITIAL_PLAYER_X, INITIAL_PLAYER_Y) player_group = pygame.sprite.Group(player) def draw(): for bullet in player.List_Bullets: screen.blit(Bullet_Img, bullet) for asteroid in List_Of_Asteroids: screen.blit(asteroid.Image, asteroid.Rect) for small_asteroid in List_Of_Small_Asteroids: screen.blit(small_asteroid.Image, small_asteroid.Rect) player_group.update(0.25) player_group.draw(screen) List_Of_Asteroids.append(Asteroid([100, 100], 0)) def check_collision(): asteroid_list = [] small_asteroid_list = [] try: for asteroid in List_Of_Asteroids: for bullet in player.List_Bullets: if asteroid.Rect.colliderect(bullet): if asteroid.Health > 0: asteroid.Health -= Bullet_Damage del bullet if asteroid.Health <= 0: asteroid.Destroyed(Small_Asteroid) del asteroid for small_asteroid in List_Of_Small_Asteroids: for bullet in player.List_Bullets: if small_asteroid.Rect.colliderect(bullet): if small_asteroid.Health > 0: small_asteroid.Health -= Bullet_Damage del bullet if small_asteroid.Health <= 0: del small_asteroid except: pass def move(): for bullet in player.List_Bullets: if bullet.topleft[1] <= 0: player.List_Bullets.remove(bullet) else: bullet.move_ip(0, -Bullet_Velocity) for small_asteroid in List_Of_Small_Asteroids: xy = small_asteroid.Rect.center if xy[0] < -30: del small_asteroid if xy[0] > SCREEN_WIDTH+40: del small_asteroid if xy[1] < -30: del small_asteroid if xy[1] > SCREEN_HEIGHT+40: del small_asteroid else: small_asteroid.Rect.move_ip(small_asteroid.xvel, small_asteroid.yvel) def main(): running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False screen.fill(background_colour) player.Player_Keys() check_collision() move() draw() fpsClock.tick(FPS) pygame.display.update() if __name__ == '__main__': main()