Asteroids
Asteroids
import pygame
from math import sin, cos, radians
#Define display/window
displaySize = (1280, 720)
win = pygame.display.set_mode(displaySize)
pygame.display.set_caption("ASTROIDS")
#Variables
fps = 60
players = []
class Player:
def __init__(self, image, size, rotation, moveSpeed, turnSpeed):
self.size = size
self.rotation = rotation
self.image =
pygame.transform.rotate(pygame.transform.scale(pygame.image.load(f"Assets//{im
age}"), self.size), rotation + 90)
self.rotatedImage = self.image
self.moveSpeed = moveSpeed
self.turnSpeed = turnSpeed
if k == "up":
self.rect.x += self.sumVector[0] * self.moveSpeed
self.rect.y -= self.sumVector[1] * self.moveSpeed
self.momentumVector = self.sumVector
else:
self.rect.x += self.momentumVector[0] * self.moveSpeed
self.rect.y -= self.momentumVector[1] * self.moveSpeed
def Draw(self):
win.blit(self.rotatedImage, self.rotatedRect)
def Movement():
keysPressed = pygame.key.get_pressed()
for player in players:
#player.sumVector = [player.momentumVector[0] +
cos(radians(player.rotation)), player.momentumVector[1] +
sin(radians(player.rotation))]
if keysPressed[pygame.K_UP]:
player.Move("up")
#player.rect.x += player.sumVector[0] * player.moveSpeed
#player.rect.y -= player.sumVector[1] * player.moveSpeed
#player.momentumVector = player.sumVector
else:
player.Move("/")
#player.rect.x += player.momentumVector[0] * player.moveSpeed
#player.rect.y -= player.momentumVector[1] * player.moveSpeed
if keysPressed[pygame.K_RIGHT]:
player.Rotate("right")
#player.rotation -= player.turnSpeed
if keysPressed[pygame.K_LEFT]:
player.Rotate("left")
#player.rotation += player.turnSpeed
#player.rotatedImage = pygame.transform.rotate(player.image,
player.rotation)
#player.rotatedRect =
player.rotatedImage.get_rect(center=player.image.get_rect(topleft=(pl ayer.rect
.x, player.rect.y)).center)
player.Draw()
print(player.sumVector)
def main():
clock = pygame.time.Clock()
run = True
while run:
clock.tick(fps)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
win.fill((0, 0, 0))
Movement()
pygame.display.update()
pygame.quit()
if __name__ == "__main__":
main()
"""
import pygame
from math import sin, cos, radians
from random import randint
#Define display/window
displaySize = (1200, 800)
win = pygame.display.set_mode(displaySize)
pygame.display.set_caption("ASTROIDS")
#Variables
fps = 60
players = []
shot = False
asteroids = []
removeAsteroids = []
startSpawnRate = 100
spawnRate = startSpawnRate
bullets = []
removeBullets = []
class Player:
def __init__(self, image, size, startPosition, rotation, moveSpeed,
turnSpeed):
self.size = size
self.rotation = rotation
self.image =
pygame.transform.rotate(pygame.transform.scale(pygame.image.load(f"Assets//{im
age}"), self.size), rotation + 90)
self.rotatedImage = self.image
self.moveSpeed = moveSpeed
self.turnSpeed = turnSpeed
self.momentumVector = [0, 0]
self.sumVector = [0, 0]
def UpdateRotation(self):
self.rotatedImage = pygame.transform.rotate(self.image, self.rotation)
self.rotatedRect =
self.rotatedImage.get_rect(center=self.image.get_rect(topleft=(self.rect.x,
self.rect.y)).center)
if k == "up":
self.rect.x += self.sumVector[0] * self.moveSpeed
self.rect.y -= self.sumVector[1] * self.moveSpeed
self.momentumVector = self.sumVector
else:
self.rect.x += self.momentumVector[0] * self.moveSpeed
self.rect.y -= self.momentumVector[1] * self.moveSpeed
def ScreenWrap(self):
#X-axis
if self.rect.x > displaySize[0]:
self.rect.x -= displaySize[0] + self.size[0]
if self.rect.x < -self.size[0]:
self.rect.x += displaySize[0] + self.size[0]
#Y-axis
if self.rect.y > displaySize[1]:
self.rect.y -= displaySize[1] + self.size[1]
if self.rect.y < -self.size[1]:
self.rect.y += displaySize[1] + self.size[1]
def Draw(self):
win.blit(self.rotatedImage, self.rotatedRect)
class Asteroid:
def __init__(self, image, size, moveSpeed):
self.size = [randint(size[0]-20, size[0]+20), randint(size[1]-40,
size[1]+40)]
self.rotation = randint(0, 360)
self.image =
pygame.transform.rotate(pygame.transform.scale(pygame.image.load(f"Assets//{im
age}"), self.size),self.rotation)
self.rect = pygame.Rect(self.startPosition[0], self.startPosition[1],
self.size[0], self.size[1])
def ScreenWrap(self):
if self.rect.x > displaySize[0]:
self.rect.x -= displaySize[0] + self.size[0]
if self.rect.x < -self.size[0]:
self.rect.x += displaySize[0] + self.size[0]
def Move(self):
self.rect.x += cos(radians(self.rotation)) * self.moveSpeed
self.rect.y -= sin(radians(self.rotation)) * self.moveSpeed
def Draw(self):
win.blit(self.image, self.rect)
class Bullet:
def __init__(self, image, playerRect, rotation, moveSpeed, sumVector):
self.lifeTime = 100
self.size = (30, 30)
self.moveSpeed = moveSpeed
self.rotation = rotation
self.sumVector = sumVector
self.image =
pygame.transform.rotate(pygame.transform.scale(pygame.image.load(f"Assets//{im
age}"), self.size),self.rotation - 90)
self.rect = pygame.Rect(playerRect.x, playerRect.y, self.size[0],
self.size[1])
def Move(self):
self.rect.x += cos(radians(self.rotation)) * self.moveSpeed
self.rect.y -= sin(radians(self.rotation)) * self.moveSpeed
def ScreenWrap(self):
if self.rect.x > displaySize[0]:
self.rect.x -= displaySize[0] + self.size[0]
if self.rect.x < -self.size[0]:
self.rect.x += displaySize[0] + self.size[0]
def Draw(self):
win.blit(self.image, self.rect)
def PlayerMovement(keysPressed):
for player in players:
player.UpdateRotation()
#Translation
if keysPressed[pygame.K_UP]:
player.Translate("up")
else:
player.Translate("/")
#Rotation
if keysPressed[pygame.K_RIGHT]:
player.Rotate("right")
if keysPressed[pygame.K_LEFT]:
player.Rotate("left")
#ScreenWrapping
player.ScreenWrap()
player.Draw()
def AsteroidSpawning(keysPressed):
global spawnRate
spawnRate -= 1
if spawnRate <= 0:
asteroids.append(Asteroid(image="asteroid.png", size=(120, 120),
moveSpeed=3))
spawnRate = startSpawnRate
asteroid.Move()
asteroid.ScreenWrap()
asteroid.Draw()
def BulletSpawning(keysPressed):
global shot
if not keysPressed[pygame.K_SPACE]:
shot = False
bullet.Move()
bullet.ScreenWrap()
bullet.Draw()
keysPressed = pygame.key.get_pressed()
win.fill((0, 0, 0))
PlayerMovement(keysPressed)
AsteroidSpawning(keysPressed)
BulletSpawning(keysPressed)
pygame.display.update()
pygame.quit()
if __name__ == "__main__":
main()