aplikacja finalna
BIN
img1/162-1620164_star-wars-lasers-g1-p1-star-wars-films.png
Normal file
After Width: | Height: | Size: 183 KiB |
BIN
img1/bg.jpg
Normal file
After Width: | Height: | Size: 224 KiB |
BIN
img1/enemy1.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
img1/enemy2.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
img1/enemy3.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
img1/fioletowylaser.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
img1/me.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
img1/niebieskilaser.png
Normal file
After Width: | Height: | Size: 6.6 KiB |
BIN
img1/szarylaser.png
Normal file
After Width: | Height: | Size: 771 B |
BIN
img1/zoltylaser.png
Normal file
After Width: | Height: | Size: 6.7 KiB |
239
main1.py
Normal file
@ -0,0 +1,239 @@
|
||||
import pygame
|
||||
import os
|
||||
import time
|
||||
import random
|
||||
pygame.font.init()
|
||||
width,height=1368,768
|
||||
WINDOW=pygame.display.set_mode((width,height))
|
||||
pygame.display.set_caption("gra-projekt")
|
||||
|
||||
#load images
|
||||
#enemies
|
||||
enemy1=pygame.image.load(os.path.join("img1","enemy1.png"))
|
||||
enemy2=pygame.image.load(os.path.join("img1","enemy2.png"))
|
||||
enemy3=pygame.image.load(os.path.join("img1","enemy3.png"))
|
||||
#playerplayer
|
||||
ourself=pygame.image.load(os.path.join("img1","me.png"))
|
||||
#lasers
|
||||
violetlaser=pygame.image.load(os.path.join("img1","fioletowylaser.png"))
|
||||
bluelaser=pygame.image.load(os.path.join("img1","niebieskilaser.png"))
|
||||
yellowlaser=pygame.image.load(os.path.join("img1","zoltylaser.png"))
|
||||
greylaser=pygame.image.load(os.path.join("img1","szarylaser.png"))
|
||||
#background
|
||||
bg=pygame.image.load(os.path.join("img1","bg.jpg"))
|
||||
|
||||
class Laser:
|
||||
def __init__(self,x,y,img):
|
||||
self.x=x
|
||||
self.y=y
|
||||
self.img=img
|
||||
self.mask=pygame.mask.from_surface(self.img)
|
||||
def draw(self,window):
|
||||
window.blit(self.img,(self.x,self.y))
|
||||
|
||||
def move(self,vel):
|
||||
self.y+=vel
|
||||
|
||||
def off_screen(self,height):
|
||||
return not (self.y<=height and self.y>=0)
|
||||
|
||||
def collision(self, obj):
|
||||
return collide(self, obj)
|
||||
class ship: #to interact
|
||||
COOLDOWN= 30
|
||||
|
||||
def __init__(self, x, y, health=100):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.health = health
|
||||
self.ship_img = None
|
||||
self.laser_img = None
|
||||
self.lasers = []
|
||||
self.cool_down_counter = 0
|
||||
|
||||
def draw(self, window):
|
||||
window.blit(self.ship_img,(self.x, self.y))
|
||||
for laser in self.lasers:
|
||||
laser.draw(window)
|
||||
|
||||
def move_lasers(self, vel, obj):
|
||||
self.cooldown()
|
||||
for laser in self.lasers:
|
||||
laser.move(vel)
|
||||
if laser.off_screen(height):
|
||||
self.lasers.remove(laser)
|
||||
elif laser.collision(obj):
|
||||
obj.health -= 10
|
||||
self.lasers.remove(laser)
|
||||
|
||||
def cooldown(self):
|
||||
if self.cool_down_counter>self.COOLDOWN:
|
||||
self.cool_down_counter=0
|
||||
elif self.cool_down_counter>0:
|
||||
self.cool_down_counter+=1
|
||||
|
||||
def shoot(self):
|
||||
if self.cool_down_counter == 0:
|
||||
laser=Laser(self.x+25,self.y,self.laser_img)
|
||||
self.lasers.append(laser)
|
||||
self.cool_down_counter = 1
|
||||
|
||||
def get_width(self):
|
||||
return self.ship_img.get_width()
|
||||
|
||||
def get_height(self):
|
||||
return self.ship_img.get_height()
|
||||
|
||||
class Player(ship):
|
||||
def __init__(self,x,y,health=100):
|
||||
super().__init__(x,y,health)
|
||||
self.ship_img=ourself
|
||||
self.laser_img=violetlaser
|
||||
self.mask=pygame.mask.from_surface(self.ship_img)
|
||||
self.max_health=health
|
||||
|
||||
def move_lasers(self, vel, objs):
|
||||
self.cooldown()
|
||||
for laser in self.lasers:
|
||||
laser.move(vel)
|
||||
if laser.off_screen(height):
|
||||
self.lasers.remove(laser)
|
||||
else:
|
||||
for obj in objs:
|
||||
if laser.collision(obj):
|
||||
objs.remove(obj)
|
||||
if laser in self.lasers:
|
||||
self.lasers.remove(laser)
|
||||
def draw(self,window):
|
||||
super().draw(window)
|
||||
self.healthbar(window)
|
||||
def healthbar(self,window):
|
||||
pygame.draw.rect(window,(255,0,0),(self.x,self.y+self.ship_img.get_height()+10, self.ship_img.get_width(),10))
|
||||
pygame.draw.rect(window,(0,255,0),(self.x,self.y+self.ship_img.get_height()+10, self.ship_img.get_width()*(self.health/self.max_health),10))
|
||||
class Enemy(ship):
|
||||
ENEMY_MAP={
|
||||
"enemy1":(enemy1, greylaser),
|
||||
"enemy2":(enemy2,yellowlaser),
|
||||
"enemy3":(enemy3,bluelaser)
|
||||
}
|
||||
def __init__(self,x,y,enemy,health=100):
|
||||
super().__init__(x,y,health)
|
||||
self.ship_img,self.laser_img=self.ENEMY_MAP[enemy]
|
||||
self.mask=pygame.mask.from_surface(self.ship_img)
|
||||
def move(self,vel):
|
||||
self.y+=vel
|
||||
|
||||
def shoot(self):
|
||||
if self.cool_down_counter == 0:
|
||||
laser = Laser(self.x+10, self.y, self.laser_img)
|
||||
self.lasers.append(laser)
|
||||
self.cool_down_counter = 1
|
||||
def collide(obj1,obj2):
|
||||
offset_x=obj2.x-obj1.x
|
||||
offset_y=obj2.y-obj1.y
|
||||
return obj1.mask.overlap(obj2.mask,(offset_x,offset_y)) !=None #(x,y)
|
||||
|
||||
def main():
|
||||
run=True
|
||||
FPS=60
|
||||
level=0
|
||||
lives=5
|
||||
player_vel=5
|
||||
player=Player(600,650)
|
||||
main_font=pygame.font.SysFont("comicsans",50)
|
||||
lost_font=pygame.font.SysFont("comicsans",60)
|
||||
|
||||
enemies=[]
|
||||
wave_length=0
|
||||
enemy_vel=1
|
||||
|
||||
laser_vel=6
|
||||
lost=False
|
||||
lost_count=0
|
||||
clock=pygame.time.Clock()
|
||||
|
||||
def redraw_window():
|
||||
WINDOW.blit(bg,(0,0))
|
||||
#draw text
|
||||
lives_label=main_font.render(f"Lives:{lives}",1,(240,0,0))
|
||||
level_label=main_font.render(f"Level:{level}",1,(240,0,0))
|
||||
WINDOW.blit(lives_label,(10,10))
|
||||
WINDOW.blit(level_label,(width-level_label.get_width()-10,10))
|
||||
|
||||
for enemy in enemies:
|
||||
enemy.draw(WINDOW)
|
||||
|
||||
player.draw(WINDOW)
|
||||
if lost:
|
||||
lost_label=lost_font.render("You Lost!",1,(255,255,255))
|
||||
WINDOW.blit(lost_label,(width/2-lost_label.get_width()/2,height/2))
|
||||
pygame.display.update() #lastone
|
||||
while run:
|
||||
clock.tick(FPS)
|
||||
redraw_window()
|
||||
if lives <=0 or player.health<=0:
|
||||
lost=True
|
||||
lost_count+=1
|
||||
if lost:
|
||||
if lost_count>FPS*3:
|
||||
run=False
|
||||
else:
|
||||
continue
|
||||
if len(enemies)==0:
|
||||
level+=1
|
||||
wave_length+=5
|
||||
for i in range(wave_length):
|
||||
enemy=Enemy(random.randrange(50,width-100),random.randrange(-100,0),random.choice(["enemy1","enemy2","enemy3"]))
|
||||
enemies.append(enemy)
|
||||
|
||||
for event in pygame.event.get():
|
||||
if event.type==pygame.QUIT:
|
||||
quit()
|
||||
keys=pygame.key.get_pressed()#to chceck 2 keys in 1 time
|
||||
|
||||
if keys[pygame.K_UP]and player.y -player_vel:
|
||||
player.y -=player_vel
|
||||
if keys[pygame.K_DOWN] and player.y+player_vel+player.get_height()<height:
|
||||
player.y+=player_vel
|
||||
if keys[pygame.K_LEFT]and player.x -player_vel>0:
|
||||
player.x -= player_vel
|
||||
if keys[pygame.K_RIGHT]and player.x +player_vel +player.get_width()<width:
|
||||
player.x += player_vel
|
||||
if keys[pygame.K_SPACE]:
|
||||
player.shoot()
|
||||
|
||||
for enemy in enemies[:]:
|
||||
enemy.move(enemy_vel)
|
||||
enemy.move_lasers(laser_vel,player)
|
||||
|
||||
if random.randrange(0,5*60)==1:
|
||||
enemy.shoot()
|
||||
|
||||
if collide(enemy,player):
|
||||
player.health-=10
|
||||
enemies.remove(enemy)
|
||||
elif enemy.y + enemy.get_height()> height:
|
||||
lives-=1
|
||||
enemies.remove(enemy)
|
||||
|
||||
player.move_lasers(-laser_vel,enemies)
|
||||
|
||||
|
||||
|
||||
def main_menu():
|
||||
title_font = pygame.font.SysFont("comicsans", 70)
|
||||
run = True
|
||||
while run:
|
||||
WINDOW.blit(bg, (0,0))
|
||||
title_label = title_font.render("Press the mouse to begin...", 1, (255,255,255))
|
||||
WINDOW.blit(title_label, (width/2 - title_label.get_width()/2, 350))
|
||||
pygame.display.update()
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
run = False
|
||||
if event.type == pygame.MOUSEBUTTONDOWN:
|
||||
main()
|
||||
pygame.quit()
|
||||
|
||||
main_menu()
|
||||
main()
|