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()0: player.x -= player_vel if keys[pygame.K_RIGHT]and player.x +player_vel +player.get_width() 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()