def update(self): self.cur_frame = (self.cur_frame + 1) % len(self.frames) self.image = self.frames[self.cur_frame] pygame.draw.rect(screen, (75, 3, 1), (5, 5, 100 * 4, 30)) pygame.draw.rect(screen, (200, 23, 1), (5, 5, 100 * 4, 30), 3) if self.heath <= 0: pygame.draw.rect(screen, (5, 0, 0), (5, 5, 100 * 4, 30)) pygame.draw.rect(screen, (20, 3, 1), (5, 5, 100 * 4, 30), 3) pygame.draw.rect(screen, (110, 110, 23), (5, 40, 100 * 4, 30), 3) if self.heath > 100: self.heath = 100 if self.stamin > 100: self.stamin = 100 if self.stamin < 0: self.stamin = 0 if self.heath >= 0: pygame.draw.rect(screen, (144, 23, 1), (5, 7, self.heath * 4, 30 - 4)) else: pygame.draw.rect(screen, (144, 144, 23), (5, 40, 0, 30)) print_text('HP', 5, 5) if self.stamin >= 0: pygame.draw.rect(screen, (20, 20, 3), (5, 40, 100 * 4, 30)) pygame.draw.rect(screen, (144, 144, 23), (5, 42, self.stamin * 4, 30 - 4)) else: pygame.draw.rect(screen, (20, 20, 3), (5, 40, 100 * 4, 30)) pygame.draw.rect(screen, (144, 144, 23), (5, 40, 0, 30)) print_text('STAMIN', 5, 40)
def pays(): global paused bottn = Button(350, 100) while paused: for event in pygame.event.get(): if event.type == pygame.QUIT: terminate() bottn.draw(120, 200, 'RETURN', set_p) print_text('PAUSED', 210, 200, (75, 1, 1), 100) pygame.display.flip() clock.tick(15)
def draw(self, x, y, mes, f=None, font_saze=30): mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() if x < mouse[0] < x + self.width and y < mouse[1] < y + self.height: pygame.draw.rect(screen, self.active_color, (x, y, self.width, self.height)) if click[0] == 1: pygame.draw.rect(screen, self.click_color, (x, y, self.width, self.height)) if f is not None: f() else: pygame.draw.rect(screen, self.invitev_color, (x, y, self.width, self.height)) print_text(mes, x, y, (0, 0, 0), font_saze)
def start_screen(): fon = pygame.transform.scale(load_image('fon.png')[0], (WIDTH, HEIGHT)) screen.blit(fon, (0, 0)) text = 'DARKCASTLE' for i in range(len(text)): print_text(text[i], 10, 70 * i, (75, 12 - i, 12 - i), 70) while True: botton = Button(100, 50) botton_quit = Button(100, 50) botton.draw(50, 20, 'GAME', lvl_up, 50) botton_quit.draw(50, 71, 'EXIT', terminate, 50) pygame.event.get() pygame.display.flip()
def lvl_up(): fon = pygame.transform.scale(load_image('fon.png')[0], (WIDTH, HEIGHT)) screen.blit(fon, (0, 0)) text = 'DARKCASTLE' botton_lvl1 = Button(100, 50) botton_lvl2 = Button(100, 50) botton_quit = Button(100, 50) for i in range(len(text)): print_text(text[i], 10, 70 * i, (75, 12 - i, 12 - i), 70) while True: botton_lvl1.draw(50, 110, 'lvl_1', lvl_1, 50) botton_lvl2.draw(50, 171, 'lvl_2', lvl_2, 50) botton_quit.draw(50, 271, 'quit', terminate, 50) pygame.event.get() pygame.display.flip()
def draw_panel(self): x = display_width // 4 + 50 y = display_height - 100 side = 80 step = 100 for cell in self.inventory_panel: pygame.draw.rect(screen, (200, 215, 227), (x, y, side, side), 2) if cell is not None: screen.blit(cell.image, (x + 15, y + 15)) print_text(str(cell.amount), x + 50, y + 50, font_size=20, font_color=(143, 123, 121)) x += step
def draw_whole(self): x = 40 y = 150 side = 80 step = 100 pygame.draw.rect(screen, (182, 195, 206), (x - 20, y - 20, 420, 220), 2) for cell in self.whole_inventoty: pygame.draw.rect(screen, (200, 215, 227), (x, y, side, side), 2) if cell is not None: screen.blit(cell.image, (x + 15, y + 15)) print_text(str(cell.amount), x + 50, y + 50, font_size=20, font_color=(143, 123, 121)) x += step if x == 440: x = 40 y += step
def update(self): if self.live: if self.zel.rect.x + 280 > self.rect.x and\ self.zel.rect.x - 280 < self.rect.x and\ self.zel.rect.y + 280 > self.rect.y and self.zel.rect.y - 280 < self.rect.y: self.sledovat = True else: self.sledovat = False if self.sledovat: if self.f: if self.zel.rect.x - 80 < self.rect.x: self.speed_x = -2 if self.zel.rect.x - 80 > self.rect.x: self.speed_x = 2 if self.zel.rect.y > self.rect.y: self.setSprite(load_image('hero_lic.png', -1)[0], 3, 1) self.speed_y = 2 if self.zel.rect.y < self.rect.y: self.setSprite(load_image('hero_beak.png', -1)[0], 3, 1) self.speed_y = -2 if self.zel.rect.x - 80 == self.rect.x + 1 or self.zel.rect.x - 80 == self.rect.x - 1: self.setSprite(load_image('hero_proz.png', -1)[0], 2, 1) self.move_to(self.speed_x, self.speed_y) self.f = False else: self.move_to(-self.speed_x, -self.speed_y) else: self.setSprite(load_image('hero_proz.png', -1)[0], 2, 1) else: print_text('dead', self.rect.x - 10, self.rect.y - 35, (255, 0, 0)) self.cur_frame = (self.cur_frame + 1) % len(self.frames) self.image = self.frames[self.cur_frame] if self.heath > 0: pygame.draw.rect(screen, (144, 23, 1), (self.rect.x - 10, self.rect.y - 5, self.heath // 2, 5)) pygame.draw.rect(screen, (144, 23, 1), (self.rect.x - 10, self.rect.y - 5, 50, 5), 1) if self.heath <= 0: self.setSprite(load_image('kill.png', -1)[0], 1, 1) self.live = False
def game(): global cooldown, sp_mob, lvl, paused, timer, sound player, level_x, level_y = generate_level(lvl) weapon = Weapon(load_image('bow.png'), 1, 1, player) weapon_sp = [] live_sp = [] for mobs in sp_mob: weapon_sp.append(Weapon(load_image('bow.png'), 1, 1, mobs)) live_sp.append(False) s = 3 if level_x + level_y > 25: s = s + 1 if level_x + level_y > 45: s = s + 2 camera = Camera((level_x, level_y)) # изменяем ракурс камеры mod = 'S' # обновляем положение всех спрайтов run = True isjampcaunt = 5 jamp = False went_r = load_image('hero_r.png', -1)[0] stend = load_image('hero_proz.png', -1)[0] went_l = load_image('hero_l.png', -1)[0] went_beak = load_image('hero_beak.png', -1)[0] went_lic = load_image('hero_lic.png', -1)[0] hold_left = True inventory.increase('sword') inventory.increase('weapon_1') inventory.increase('bow') inventory.increase('shell') button = Button(100, 30) all_btn_bulets = [] live = len(live_sp) CorrentTime = time.time() pygame.mixer.music.load('data/muzlome_tartalo_musi.ogg') pygame.mixer.music.play(-1) pygame.mixer.music.set_volume(0.2) while run: timers = time.time() - CorrentTime if player.heath <= 0: pygame.mixer.music.stop() dead() for event in pygame.event.get(): if event.type == pygame.QUIT: terminate() key = pygame.key.get_pressed() if key[pygame.K_DOWN]: player.setSprite(went_lic, 3, 1) mod = 'D' if key[pygame.K_UP]: player.setSprite(went_beak, 3, 1) weapon.left = True weapon.trans = True mod = 'U' if key[pygame.K_RIGHT]: player.setSprite(went_r, 3, 1) mod = 'R' if key[pygame.K_LEFT]: player.setSprite(went_l, 3, 1) weapon.left = True weapon.trans = True mod = 'L' if key[pygame.K_ESCAPE]: mod = 'S' paused = True weapon.left = False player.setSprite(stend, 2, 1) pays() if event.type == pygame.KEYUP: if event.key == 274 or event.key == 275 or event.key == 276 or event.key == 273: mod = 'S' if event.key == 274: # down player.setSprite(stend, 2, 1) if event.key == 275: # raeth player.setSprite(stend, 2, 1) if event.key == 276: # left weapon.trans = True weapon.left = False player.setSprite(stend, 2, 1) if event.key == 273: # up weapon.trans = True weapon.left = False player.setSprite(stend, 2, 1) keys = pygame.key.get_pressed() mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() if click[2] and not hold_left: inventory.set_start_cell(mouse[0], mouse[1]) hold_left = True if hold_left and not click[2]: inventory.set_end_cell(mouse[0], mouse[1]) hold_left = False if not jamp: if keys[pygame.K_SPACE]: weapon.trans = False jamp = True else: weapon.trans = False if isjampcaunt >= -5: if isjampcaunt < 0: player.rect.top += (isjampcaunt ** 2) // 2 else: player.rect.top -= (isjampcaunt ** 2) // 2 isjampcaunt -= 1 else: jamp = False isjampcaunt = 5 if player.heath <= 0: dead() if mod == 'S': pass if mod == 'L': player.rect.left -= s if pygame.sprite.spritecollideany(player, box_group): player.rect.left += s if mod == 'R': player.rect.left += s if pygame.sprite.spritecollideany(player, box_group): player.rect.left -= s if mod == 'D': player.rect.top += s if pygame.sprite.spritecollideany(player, box_group): player.rect.top -= s if mod == 'U': player.rect.top -= s if pygame.sprite.spritecollideany(player, box_group): player.rect.top += s for i in range(len(sp_mob)): if sp_mob[i].heath > 0: if pygame.sprite.spritecollideany(sp_mob[i], bullet_group): sp_mob[i].heath -= 25 if pygame.sprite.spritecollideany(sp_mob[i], box_group): sp_mob[i].f = False if pygame.sprite.spritecollideany(sp_mob[i], player_group): sp_mob[i].f = False if not pygame.sprite.spritecollideany(sp_mob[i], box_group): sp_mob[i].f = True if pygame.sprite.spritecollideany(player, bullet_group_mob) and not player.block: player.heath -= 10 sp_mob[i].shoot(weapon_sp[i], player) for bullet in bullet_group_mob: if pygame.sprite.spritecollideany(bullet, player_group) or \ pygame.sprite.spritecollideany(bullet, box_group) or not bullet.f: bullet_group_mob.remove(bullet) elif sp_mob[i].heath <= 0 and not live_sp[i]: live_sp[i] = True if live_sp[i]: live -= 1 if live == 0: win() click = pygame.mouse.get_pressed() mouse = pygame.mouse.get_pos() if not cooldown: if click[0]: player.shoot(weapon, mouse[0], mouse[1]) cooldown = 30 else: cooldown -= 1 print_text('cooldown - ' + str(cooldown // 10), 150, 150 - 50, (50, 50, 1)) camera.update(player) for sprite in all_sprites: camera.apply(sprite) screen.fill(pygame.Color('white')) tiles_group.draw(screen) hellca_group.draw(screen) player_group.draw(screen) weapon_group.draw(screen) box_group.draw(screen) mob_group.draw(screen) bullet_group.draw(screen) bullet_group_mob.draw(screen) inventory.draw_panel() if keys[pygame.K_LSHIFT]: player.stamin -= 1 if player.stamin > 0: s = 10 else: s = 5 else: s = 5 player.stamin += 0.4 if keys[pygame.K_TAB]: inventory.draw_whole() if keys[pygame.K_1]: try: weapon.setSprite(load_image(inventory.inventory_panel[0].name + '.png'), 1, 1) except AttributeError: pass if keys[pygame.K_2]: try: weapon.setSprite(load_image(inventory.inventory_panel[1].name + '.png'), 1, 1) except AttributeError: pass if keys[pygame.K_3]: try: weapon.setSprite(load_image(inventory.inventory_panel[2].name + '.png'), 1, 1) except AttributeError: pass if keys[pygame.K_4]: try: weapon.setSprite(load_image(inventory.inventory_panel[3].name + '.png'), 1, 1) except AttributeError: pass if keys[pygame.K_5]: try: weapon.setSprite(load_image(inventory.inventory_panel[4].name + '.png'), 1, 1) except AttributeError: pass for hellca in hellca_group: if pygame.sprite.spritecollideany(hellca, player_group): player.heath += 10 hellca_group.remove(hellca) for bullet in all_btn_bulets: if not bullet.move(): all_btn_bulets.remove(bullet) for bullet in bullet_group: if pygame.sprite.spritecollideany(bullet, mob_group) or\ pygame.sprite.spritecollideany(bullet, box_group) or not bullet.f: bullet_group.remove(bullet) button.draw(5, 110, 'quit', start_screen) tm_sp = str(timers).split('.') print_text('Time ' + tm_sp[0] + ' :' + tm_sp[1][:2], 1007, 0, (200, 200, 50), 45) all_sprites.update() pygame.display.flip() clock.tick(80) pygame.quit()