From 9cb2d3d80fc5d8ec595a0e52ad94f7d1e229f9e0 Mon Sep 17 00:00:00 2001 From: dregorianec <58620817+dregorianec@users.noreply.github.com> Date: Fri, 22 Jan 2021 18:18:15 +0300 Subject: [PATCH 1/2] Update oh my GOOOOOOOOOOOOOD --- oh my GOOOOOOOOOOOOOD | 166 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 151 insertions(+), 15 deletions(-) diff --git a/oh my GOOOOOOOOOOOOOD b/oh my GOOOOOOOOOOOOOD index c947143..c4de55f 100644 --- a/oh my GOOOOOOOOOOOOOD +++ b/oh my GOOOOOOOOOOOOOD @@ -3,9 +3,14 @@ import os, math, time from datetime import datetime platform_list = pygame.sprite.Group() -# Переменные для установки ширины и высоты окна +# Переменные для установки ширины и высоты окна ГГ зовут tuklat, что переводится с Шумеро-Аккадского как надежда +particles = [] SCREEN_WIDTH = 1500 # 1500 SCREEN_HEIGHT = 700 # 700 +qqw = 0 +aa = True +yy = False +yy1 = True # Подключение фото для заднего фона # Здесь лишь создание переменной, вывод заднего фона ниже в коде bg = pygame.image.load('blue.jpeg') @@ -19,9 +24,13 @@ directory = 'босс/топ' files = os.listdir(directory) images = filter(lambda x: x.endswith('.gif'), files) boss_top = list(images) +directory = 'босс/шар' +files = os.listdir(directory) +images = filter(lambda x: x.endswith('.gif'), files) +boss_ball = list(images) der = 0 -obj = ['platform.png', '2187.png', 'звезда.png', 'роза.png', 'шар звезды.png', 'шип розы.png', 'восклицательный.png'] - +obj = ['platform.png', '2187.png', 'звезда.png', 'роза.png', 'шар звезды.png', 'шип розы.png', 'восклицательный.png', + 'малая роза.png'] class Player(pygame.sprite.Sprite): # Методы @@ -187,6 +196,26 @@ class Plat_zvez(pygame.sprite.Sprite): print((datetime.now() - time).total_seconds()) +class Plat_roz(pygame.sprite.Sprite): + def __init__(self): + self.change_y = 350 + super().__init__() + self.image = pygame.image.load('объекты/' + str(obj[7])) + self.rect = self.image.get_rect() + + def update(self): + global time + global dre + if self.rect.y >= SCREEN_HEIGHT and dre == 24: + self.rect.y -= self.change_y + dre = 0 + elif dre == 24: + self.rect.y += self.change_y + dre = 0 + else: + dre += 1 + + class Bullet(pygame.sprite.Sprite): def __init__(self, x, y, speedx): @@ -231,7 +260,7 @@ class Boss(pygame.sprite.Sprite): self.rect = self.image.get_rect() def update(self, k): - global qq, qz + global qq, qz, qqw, aa, yy, yy1 if k == 0: self.rect.x += self.change_x if k == 1: @@ -252,27 +281,79 @@ class Boss(pygame.sprite.Sprite): shoot_sound.set_volume(0.2) shoot_sound.play() if k == 3: - pass - + qq = 0 + if k == 4: + if qq <= (len(boss_jump)) / 2 + 4: + self.rect.y -= 8 + elif qq <= (len(boss_jump) - 2) * 1.5: + self.rect.y += 8 + else: + self.rect.y += 4 + self.image = self.image = pygame.image.load('босс/прыжок/' + boss_jump[int(qq / 1.5)]) + if qq <= (len(boss_jump) - 1) * 1.5: + qq += 1 + self.rect = self.image.get_rect(topleft=(self.rect.x, self.rect.y)) + if k == 5: + + self.image = self.image = pygame.image.load('босс/шар/' + boss_ball[int(qqw / 2.5)]) + if qqw <= 32 * 2.5 and aa: + qqw += 1 + self.rect.y += 2 + + else: + aa = False + if not aa: + if qqw <= 32 * 2.5: + qqw += 1 + else: + qqw = 20 * 2.5 + if self.rect.x >= 0 and not yy and yy1: + self.rect.x -= 30 + elif self.rect.y >= 0 and not yy and yy1: + self.rect.y -= 30 + elif self.rect.x <= SCREEN_WIDTH - 121 and yy1: + self.rect.x += 30 + yy = True + elif self.rect.y <= SCREEN_HEIGHT - 121 and yy1: + self.rect.y += 30 + elif yy: + qqw = 0 + yy = False + yy1 = False + elif not yy: + if self.rect.x >= SCREEN_WIDTH - 450: + self.rect.x -= 12 + self.image = self.image = pygame.image.load( + 'босс/шар/' + boss_ball[len(boss_ball) - 1 - int(qqw / 2.5)]) + if qqw >= len(boss_ball) * 2.5 - 2.5: + qqw -= 2.5 + self.rect.y -= 3 + self.rect = self.image.get_rect(topleft=(self.rect.x, self.rect.y)) + if k == 6: + self.image = pygame.image.load('босс/топ/frame_00_delay-0.01s.gif') + self.rect = self.image.get_rect(topleft=(self.rect.x, self.rect.y)) active_sprite_list = pygame.sprite.Group() bosar = pygame.sprite.Group() bullets = pygame.sprite.Group() - -pygame.mixer.init() -pygame.mixer_music.load('The_Prodigy_-_Invaders_Must_Die_47960596.MP3') -pygame.mixer_music.set_volume(0.4) -pygame.mixer_music.play() +dodo = pygame.sprite.Group() # Основная функция прогарммы def main_l(): + global dre global screen # Инициализация global level global time global qq, qz + pygame.mixer.init() + pygame.mixer_music.load('The_Prodigy_-_Invaders_Must_Die_47960596.MP3') + pygame.mixer_music.set_volume(0.4) + pygame.mixer_music.play() + os.environ['SDL_VIDEO_WINDOW_POS'] = '50, 50' pygame.init() + dre = 0 qq = 0 qz = 0 # Установка высоты и ширины @@ -284,6 +365,8 @@ def main_l(): # Создаем игрока plat = Plat_zvez() + ros_1 = Plat_roz() + ros_2 = Plat_roz() player = Player() fly = Fly() boss = Boss() @@ -300,14 +383,21 @@ def main_l(): player.level = current_level plat.rect.x = 650 plat.rect.y = 850 + ros_1.rect.x = 0 + ros_1.rect.y = 700 + ros_2.rect.x = 553 + ros_2.rect.y = 700 fly.rect.x = -200 fly.rect.y = 10 player.rect.x = 240 boss.rect.x = -200 boss.rect.y = 55 player.rect.y = SCREEN_HEIGHT - player.rect.height + play = pygame.sprite.Group() + play.add(player) active_sprite_list.add(player) bosar.add(boss) + dodo.add(plat, ros_1, ros_2) # active_sprite_list.add(boss) # Цикл будет до тех пор, пока пользователь не нажмет кнопку закрытия done = False @@ -346,19 +436,63 @@ def main_l(): boss.update(2) active_sprite_list.add(boss) active_sprite_list.add(fly) - elif 22.4 <= int((datetime.now() - time).total_seconds()) < 48.5: + elif 22.4 <= int((datetime.now() - time).total_seconds()) < 48.025: boss.update(3) plat.update() active_sprite_list.add(boss) active_sprite_list.add(plat) - elif 48.5 <= int((datetime.now() - time).total_seconds()): - pass + elif 48.025 <= int((datetime.now() - time).total_seconds()) < 61: + boss.update(3) + plat.update() + active_sprite_list.add(boss) + active_sprite_list.add(plat) + active_sprite_list.add(ros_1) + active_sprite_list.add(ros_2) + elif 61 <= int((datetime.now() - time).total_seconds()) <= 61.4: + boss.update(4) + plat.update() + active_sprite_list.add(boss) + hihi = pygame.sprite.spritecollide(boss, dodo, True) + if not hihi: + active_sprite_list.add(plat) + active_sprite_list.add(ros_1) + active_sprite_list.add(ros_2) + + elif 61.4 <= int((datetime.now() - time).total_seconds()): + boss.update(5) + plat.update() + active_sprite_list.add(boss) + hihi = pygame.sprite.spritecollide(boss, dodo, True) + if not hihi: + active_sprite_list.add(plat) + active_sprite_list.add(ros_1) + active_sprite_list.add(ros_2) + bosar.draw(screen) pygame.sprite.spritecollide(boss, platform_list, True) pygame.sprite.groupcollide(platform_list, bullets, True, False) - pygame.sprite.spritecollide(plat, platform_list, True) + hit = pygame.sprite.spritecollide(plat, platform_list, True) + pygame.sprite.spritecollide(ros_1, bullets, True) + pygame.sprite.spritecollide(ros_2, bullets, True) + hihi = pygame.sprite.spritecollide(boss, dodo, True) + hits = pygame.sprite.spritecollide(boss, play, True) + if hit: + for i in range(500): + particles.append( + [[plat.rect.x - random.randint(-25, 25) + 150, plat.rect.top - random.randint(-50, 50)], + [random.randint(0, 20) / 10 - 1, -2], random.randint(2, 4)]) + for particle in particles: + particle[0][0] -= particle[1][0] + particle[2] -= 0.1 + particle[1][1] += 0.1 + pygame.draw.circle(screen, (0, 0, 0), [int(particle[0][0]), int(particle[0][1])], int(particle[2])) + if particle[2] <= 2: + particles.remove(particle) # player.level = current_level + if hits: + print('Game over') + # exit() # Рисуем объекты на окне bosar.draw(screen) bullets.update() @@ -369,6 +503,8 @@ def main_l(): active_sprite_list.update() active_sprite_list.remove(fly) active_sprite_list.remove(plat) + active_sprite_list.remove(ros_1) + active_sprite_list.remove(ros_2) # Устанавливаем количество фреймов clock.tick(30) # Обновляем экран после рисования объектов From fae7f6a707a6b14738d789035970398f58e93e08 Mon Sep 17 00:00:00 2001 From: dregorianec <58620817+dregorianec@users.noreply.github.com> Date: Sun, 24 Jan 2021 20:34:26 +0300 Subject: [PATCH 2/2] Update oh my GOOOOOOOOOOOOOD --- oh my GOOOOOOOOOOOOOD | 122 +++++++++++++++++++++--------------------- 1 file changed, 62 insertions(+), 60 deletions(-) diff --git a/oh my GOOOOOOOOOOOOOD b/oh my GOOOOOOOOOOOOOD index c4de55f..4af7209 100644 --- a/oh my GOOOOOOOOOOOOOD +++ b/oh my GOOOOOOOOOOOOOD @@ -3,19 +3,21 @@ import os, math, time from datetime import datetime platform_list = pygame.sprite.Group() -# Переменные для установки ширины и высоты окна ГГ зовут tuklat, что переводится с Шумеро-Аккадского как надежда + particles = [] -SCREEN_WIDTH = 1500 # 1500 +SCREEN_WIDTH = 1500 # 1500 # Переменные для установки ширины и высоты окна SCREEN_HEIGHT = 700 # 700 +# счетчик qqw = 0 -aa = True -yy = False -yy1 = True +# флажки +flag = True +flag1 = False +flag3 = True # Подключение фото для заднего фона # Здесь лишь создание переменной, вывод заднего фона ниже в коде bg = pygame.image.load('blue.jpeg') sky = pygame.image.load('sky.jpg') -# Класс, описывающий поведение главного игрока +# анимации directory = 'босс/прыжок' files = os.listdir(directory) images = filter(lambda x: x.endswith('.gif'), files) @@ -32,6 +34,8 @@ der = 0 obj = ['platform.png', '2187.png', 'звезда.png', 'роза.png', 'шар звезды.png', 'шип розы.png', 'восклицательный.png', 'малая роза.png'] + +# Класс, описывающий поведение главного игрока class Player(pygame.sprite.Sprite): # Методы def __init__(self): @@ -70,7 +74,7 @@ class Platform(pygame.sprite.Sprite): self.rect = self.image.get_rect() -class Rel_plat(pygame.sprite.Sprite): +class Rel_plat(pygame.sprite.Sprite): # изображения с перезарядкой def __init__(self, width): # Конструктор платформ super().__init__() @@ -111,7 +115,7 @@ class Level(object): # Класс, что описывает где будут находится все платформы # на определенном уровне игры -class Level_01(Level): +class Level_01(Level): # НЕДОДЕЛАНО def __init__(self, player): # Вызываем родительский конструктор Level.__init__(self, player, bg) @@ -142,7 +146,7 @@ class Level_01(Level): self.reload_list.add(block) -class Level_02(Level): +class Level_02(Level): # второй уровень (недоделано) def __init__(self, player): # Вызываем родительский конструктор Level.__init__(self, player, sky) @@ -174,7 +178,7 @@ class Level_02(Level): self.reload_list.add(block) -class Plat_zvez(pygame.sprite.Sprite): +class Plat_zvez(pygame.sprite.Sprite): # платформа со звездой def __init__(self): self.change_y = -0.5 super().__init__() @@ -196,7 +200,7 @@ class Plat_zvez(pygame.sprite.Sprite): print((datetime.now() - time).total_seconds()) -class Plat_roz(pygame.sprite.Sprite): +class Plat_roz(pygame.sprite.Sprite): # платформа с розой def __init__(self): self.change_y = 350 super().__init__() @@ -216,11 +220,11 @@ class Plat_roz(pygame.sprite.Sprite): dre += 1 -class Bullet(pygame.sprite.Sprite): +class Bullet(pygame.sprite.Sprite): # класс для пуль def __init__(self, x, y, speedx): - global ww - ww = True + global flagok + flagok = True pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((10, 10)) self.image.fill((0, 0, 0)) @@ -238,7 +242,7 @@ class Bullet(pygame.sprite.Sprite): self.kill() -class Fly(pygame.sprite.Sprite): +class Fly(pygame.sprite.Sprite): # класс для самолёта def __init__(self): self.change_x = 10 super().__init__() @@ -249,7 +253,7 @@ class Fly(pygame.sprite.Sprite): self.rect.x += self.change_x -class Boss(pygame.sprite.Sprite): +class Boss(pygame.sprite.Sprite): # класс для босса def __init__(self): self.change_x = 10 super().__init__() @@ -260,79 +264,81 @@ class Boss(pygame.sprite.Sprite): self.rect = self.image.get_rect() def update(self, k): - global qq, qz, qqw, aa, yy, yy1 + global chetchik1, schetchik2, schetchik3, flag, flag1, flag3 if k == 0: self.rect.x += self.change_x if k == 1: if int(self.rect.y) < SCREEN_HEIGHT - int(self.rect.top) + 140: self.rect.y += 8 self.rect.x += 8 - self.image = self.image = pygame.image.load('босс/прыжок/' + boss_jump[int(qq / 2.5)]) - if qq != len(boss_jump) * 2.5: - qq += 1 + self.image = self.image = pygame.image.load('босс/прыжок/' + boss_jump[int(chetchik1 / 2.5)]) + if chetchik1 != len(boss_jump) * 2.5: + chetchik1 += 1 self.rect = self.image.get_rect(topleft=(self.rect.x, self.rect.y)) if k == 2: - self.image = self.image = pygame.image.load('босс/топ/' + boss_top[int(qz / 2.5)]) + self.image = self.image = pygame.image.load('босс/топ/' + boss_top[int(schetchik2 / 2.5)]) self.rect = self.image.get_rect(topleft=(self.rect.x, self.rect.y)) - if qz < (len(boss_top) - 1) * 2.5: - qz += 1 - if qz == 86 * 2.5: + if schetchik2 < (len(boss_top) - 1) * 2.5: + schetchik2 += 1 + if schetchik2 == 86 * 2.5: shoot_sound = pygame.mixer.Sound('oh my.wav') shoot_sound.set_volume(0.2) shoot_sound.play() if k == 3: - qq = 0 + chetchik1 = 0 if k == 4: - if qq <= (len(boss_jump)) / 2 + 4: + if chetchik1 <= (len(boss_jump)) / 2 + 4: self.rect.y -= 8 - elif qq <= (len(boss_jump) - 2) * 1.5: + elif chetchik1 <= (len(boss_jump) - 2) * 1.5: self.rect.y += 8 else: self.rect.y += 4 - self.image = self.image = pygame.image.load('босс/прыжок/' + boss_jump[int(qq / 1.5)]) - if qq <= (len(boss_jump) - 1) * 1.5: - qq += 1 + self.image = self.image = pygame.image.load('босс/прыжок/' + boss_jump[int(chetchik1 / 1.5)]) + if chetchik1 <= (len(boss_jump) - 1) * 1.5: + chetchik1 += 1 self.rect = self.image.get_rect(topleft=(self.rect.x, self.rect.y)) if k == 5: - self.image = self.image = pygame.image.load('босс/шар/' + boss_ball[int(qqw / 2.5)]) - if qqw <= 32 * 2.5 and aa: - qqw += 1 + self.image = self.image = pygame.image.load('босс/шар/' + boss_ball[int(schetchik3 / 2.5)]) + if schetchik3 <= 32 * 2.5 and flag: + schetchik3 += 1 self.rect.y += 2 else: - aa = False - if not aa: - if qqw <= 32 * 2.5: - qqw += 1 + flag = False + if not flag: + if schetchik3 <= 32 * 2.5: + schetchik3 += 1 else: - qqw = 20 * 2.5 - if self.rect.x >= 0 and not yy and yy1: + schetchik3 = 20 * 2.5 + if self.rect.x >= 0 and not flag1 and flag3: self.rect.x -= 30 - elif self.rect.y >= 0 and not yy and yy1: + elif self.rect.y >= 0 and not flag1 and flag3: self.rect.y -= 30 - elif self.rect.x <= SCREEN_WIDTH - 121 and yy1: + elif self.rect.x <= SCREEN_WIDTH - 121 and flag3: self.rect.x += 30 - yy = True - elif self.rect.y <= SCREEN_HEIGHT - 121 and yy1: + flag1 = True + elif self.rect.y <= SCREEN_HEIGHT - 121 and flag3: self.rect.y += 30 - elif yy: - qqw = 0 - yy = False - yy1 = False - elif not yy: + elif flag1: + schetchik3 = 0 + flag1 = False + flag3 = False + elif not flag1: if self.rect.x >= SCREEN_WIDTH - 450: self.rect.x -= 12 self.image = self.image = pygame.image.load( - 'босс/шар/' + boss_ball[len(boss_ball) - 1 - int(qqw / 2.5)]) - if qqw >= len(boss_ball) * 2.5 - 2.5: - qqw -= 2.5 + 'босс/шар/' + boss_ball[len(boss_ball) - 1 - int(schetchik3 / 2.5)]) + if schetchik3 >= len(boss_ball) * 2.5 - 2.5: + schetchik3 -= 2.5 self.rect.y -= 3 self.rect = self.image.get_rect(topleft=(self.rect.x, self.rect.y)) if k == 6: self.image = pygame.image.load('босс/топ/frame_00_delay-0.01s.gif') self.rect = self.image.get_rect(topleft=(self.rect.x, self.rect.y)) + +# создание групп объектов active_sprite_list = pygame.sprite.Group() bosar = pygame.sprite.Group() bullets = pygame.sprite.Group() @@ -343,10 +349,10 @@ dodo = pygame.sprite.Group() def main_l(): global dre global screen - # Инициализация global level global time - global qq, qz + global chetchik1, schetchik2 + # Инициализация pygame.mixer.init() pygame.mixer_music.load('The_Prodigy_-_Invaders_Must_Die_47960596.MP3') pygame.mixer_music.set_volume(0.4) @@ -354,8 +360,8 @@ def main_l(): os.environ['SDL_VIDEO_WINDOW_POS'] = '50, 50' pygame.init() dre = 0 - qq = 0 - qz = 0 + chetchik1 = 0 + schetchik2 = 0 # Установка высоты и ширины size = [SCREEN_WIDTH, SCREEN_HEIGHT] screen = pygame.display.set_mode(size) @@ -380,6 +386,7 @@ def main_l(): current_level_no = 0 current_level = level_list[current_level_no] + # присваиваем объектам нужные значения player.level = current_level plat.rect.x = 650 plat.rect.y = 850 @@ -411,13 +418,8 @@ def main_l(): for event in pygame.event.get(): if event.type == pygame.QUIT: # Если закрыл программу, то останавливаем цикл done = True - # Обновляем игрока - # Обновляем объекты на сцене current_level.update() - # Если игрок приблизится к правой стороне, то дальше его не двигаем - - # Если игрок приблизится к левой стороне, то дальше его не двигаем # if int((datetime.now() - time).total_seconds()) == 5: # ПЕРЕКЛЮЧЕНИЕ УРОВНЕЙ # current_level_no = 1 # current_level = level_list[current_level_no]