SpaceShipGame

mail@pastecode.io avatar
unknown
python
2 years ago
5.7 kB
7
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))
		self.Destroyed = False

	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
					else:
						asteroid.Destroyed = False

			if asteroid.Destroyed == True:
				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:
		print("NO :(")
		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()