меню pygame, помогите с кодом

сделал меню и игру в коде, не смог соединить , помогите соединить пожалуйста )

import pygame
import random

import os, sys
from pygame.locals import *

if not pygame.font: print('Warning, fonts disabled')
if not pygame.mixer: print('Warning, sound disabled')


WIDTH  = 1600
HEIGHT =  800
FPS    =   60

# Задаем цвета
WHITE  = (255, 255, 255)
BLACK  = (0, 0, 0)
RED    = (255, 0, 0)
GREEN  = (0, 255, 0)
BLUE   = (0, 0, 255)
YELLOW = (255, 255, 0)

# переменные 

timer_games = 0
timer_stats = 0
u = 100
boss_life = 100
player_ship_life = 100
player_shield = 100
gg = 100




#разное 
pygame.time.set_timer(pygame.USEREVENT, 1000)     # таймер , смотреть инструкцию


# Создаем игру и окно
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Shmup!")
clock = pygame.time.Clock()
score = "ну чё погнали ?!"
font_name = pygame.font.match_font('arial')
size = screen.get_size()
width = size[0]
height = size[1]

title = pygame.Rect(((width/16)+1, (height/8)+1, 7*width/8, height/4))
menu1 = pygame.Rect(((width/4)+1, (height/2)+1, 2*width/4, height/10))
menu2 = pygame.Rect(((width/4)+1, (height/2)+1+(3*height/20), 2*width/4, height/10))
menu3 = pygame.Rect(((width/4)+1, (height/2)+1+(6*height/20), 2*width/4, height/10))

#Draws dark blue rectangles.
pygame.draw.rect(screen, (0,0,150), menu1)
pygame.draw.rect(screen, (0,0,150), menu2)
pygame.draw.rect(screen, (0,0,150), menu3)

#Draws blue ovals on top of the rectangles.
pygame.draw.ellipse(screen, (0,0,150), title)
pygame.draw.ellipse(screen, (0,0,255), menu1)
pygame.draw.ellipse(screen, (0,0,255), menu2)
pygame.draw.ellipse(screen, (0,0,255), menu3)

#pygame.font.Font takes in a font name and an integer for its size.
#Free Sans Bold comes with Pygame (Sweigart 2012 p. 30).
font_title = pygame.font.Font('freesansbold.ttf', 64)
font_menu = pygame.font.Font('freesansbold.ttf', 32)

#Creates and draws the text.
surface_title = font_title.render('SPACE SHOOTER!', True, (0,255,0))
rect_title = surface_title.get_rect() #get_rect() is my favorite Pygame function.
rect_title.center = (width/2,(height/4)+3)
surface_new_game = font_menu.render('NEW GAME', True, (0,0,0))
rect_new_game = surface_new_game.get_rect()
rect_new_game.center = (width/2,(height/2)+(height/20)+3)
surface_load_game = font_menu.render('LOAD GAME', True, (0,0,0))
rect_load_game = surface_load_game.get_rect()
rect_load_game.center = (width/2,(height/2)+(4*height/20)+3)
surface_exit = font_menu.render('EXIT', True, (0,0,0))
rect_exit = surface_exit.get_rect()
rect_exit.center = (width/2,(height/2)+(7*height/20)+3)

class Button:
    def __init__(self, width,height):
        self.width = width
        self.height = height
    def draw(self,x,y,message,action=None, font_size=30):
        mouse = pygame.mouse.get_pos()
        click = pygame.mouse.get_pressed()
        print_text(message =message,x=x + 10 ,y= y + 10 ,font_size= 50)

def print_text(message, x , y, font_color = (0,0,0), font_type = "XF.ttf", font_size = 30):
    font_type = pygame.font.Font(font_type,font_size)
    text = font_type.render(message,True, font_color)
    screen.blit(text, (x, y))


def draw_text(surf, text, size, x, y):
    font = pygame.font.Font(font_name, size)
    text_surface = font.render(text, True, WHITE)
    text_rect = text_surface.get_rect()
    text_rect.midtop = (x, y)
    surf.blit(text_surface, text_rect)

def draw_shield_bar(surf, x, y, pct):
    if pct < 0:
        pct = 0
    BAR_LENGTH = 100
    BAR_HEIGHT = 10
    fill = (pct / 100) * BAR_LENGTH
    outline_rect = pygame.Rect(x, y, fill, BAR_HEIGHT)
    fill_rect = pygame.Rect(x, y, fill, BAR_HEIGHT)
    pygame.draw.rect(surf, GREEN, fill_rect)
    pygame.draw.rect(surf, WHITE, outline_rect, 2)

def shield(surf, x, y, pct_2):
    if pct_2 < 0:
        pct_2 = 0
    BAR_LENGTH_2 = 80
    BAR_HEIGHT_2 = 10
    fill_2 = (pct_2 / 100) * BAR_LENGTH_2
    outline_rect_2 = pygame.Rect(x, y, BAR_LENGTH_2, BAR_HEIGHT_2)
    fill_rect_2 = pygame.Rect(x, y, fill_2, BAR_HEIGHT_2)
    pygame.draw.rect(surf, YELLOW, fill_rect_2)
    pygame.draw.rect(surf, WHITE, outline_rect_2, 2)

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((40, 50))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.centerx = WIDTH / 2
        self.rect.bottom = HEIGHT - 10
        self.speedx = 0
        self.shield = 100



    def update(self):
        self.speedx = 0
        keystate = pygame.key.get_pressed()
        if keystate[pygame.K_LEFT]:
            self.speedx = -8
        if keystate[pygame.K_RIGHT]:
            self.speedx = 8
        self.rect.x += self.speedx
        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
        if self.rect.left < 0:
            self.rect.left = 0
    def shoot(self):
        bullet = Bullet(self.rect.centerx, self.rect.top)
        all_sprites_1.add(bullet)
        bullets.add(bullet)


class Mob2(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((40, 40))
        self.image.set_colorkey(BLACK)
        self.image.set_alpha(200)
        self.rect = self.image.get_rect()
        self.radius = 20
        pygame.draw.circle(self.image, GREEN, self.rect.center, self.radius, 5)
        self.rect.centerx = u
        self.rect.centery = 1
        #self.rect.y = random.randrange(-100, -40)
        self.speedy = 4
    def update(self):
        self.rect.centery += self.speedy
        self.rect.centerx += 2
        if self.rect.centery == WHITE:
            self.kill()

class Mob(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((20, 20))
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(WIDTH - self.rect.width)
        self.rect.y = random.randrange(-100, -40)
        self.speedy = random.randrange(1, 8)
        self.speedx = random.randrange(-3, 3)

    def update(self):
        self.rect.x += self.speedx
        self.rect.y += self.speedy
        if self.rect.top > HEIGHT + 10 or self.rect.left < -25 or self.rect.right > WIDTH + 20:
            self.rect.x = random.randrange(WIDTH - self.rect.width)
            self.rect.y = random.randrange(-100, -40)
            self.speedy = random.randrange(1, 8)

class Boss(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((70, 60))
        self.image.fill(YELLOW)
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(600,900)
        self.rect.y = (HEIGHT / 10)
        self.speedx = random.randrange(-10 , 10)
    def update(self):
        self.rect.x += self.speedx
        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
            self.speedx = random.randrange(-10 ,-1)
        if self.rect.left < 0:
            self.rect.left = 0
            self.speedx = random.randrange(1 , 10)

    def draw_boss(self, surf, pct):
        if pct < 0:
            pct = 0
        BAR_LENGTH_1 = 50
        BAR_HEIGHT_1 = 10
        fill_1 = (pct / 100) * BAR_LENGTH_1
        outline_rect_1 = pygame.Rect(self.rect.x + 50, self.rect.y-15, BAR_LENGTH_1, BAR_HEIGHT_1)
        fill_rect_1 = pygame.Rect(self.rect.x + 50, self.rect.y-15, fill_1, BAR_HEIGHT_1)
        pygame.draw.rect(surf, GREEN, fill_rect_1)
        pygame.draw.rect(surf, WHITE, outline_rect_1, 2)

class Bullet(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((10, 20))
        self.image.fill(YELLOW)
        self.rect = self.image.get_rect()
        self.rect.bottom = y
        self.rect.centerx = x
        self.speedy = -10

    def update(self):
        self.rect.y += self.speedy
        # убить, если он заходит за верхнюю часть экрана
        if self.rect.bottom < 0:
            self.kill()


class Mob3(pygame.sprite.Sprite):
    def __init__(self, lll):                                        # +++ lll
        super().__init__()                                          # +++
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((60, 900)) 
        c = random.sample([YELLOW, BLUE, GREEN, RED, WHITE], 1)[0]  # +
        self.image.fill(c)                                          # +
        self.image.set_alpha(150)
        self.rect = self.image.get_rect()
        self.rect.centerx = lll
        self.rect.centery = HEIGHT / 2
        self.speedy = 4

class first_aid_kit(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((20, 20))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(WIDTH - self.rect.width)
        self.rect.y = random.randrange(-100, -40)
        self.speedy = random.randrange(1, 8)
        self.speedx = random.randrange(-3, 3)

    def update(self):
        self.rect.x += self.speedx
        self.rect.y += self.speedy
        if self.rect.top > HEIGHT + 10 or self.rect.left < -25 or self.rect.right > WIDTH + 20:
            self.rect.x = random.randrange(WIDTH - self.rect.width)
            self.rect.y = random.randrange(-100, -40)
            self.speedy = random.randrange(1, 8)



all_sprites = pygame.sprite.Group()
all_sprites_1 = pygame.sprite.Group()
_aid_ = pygame.sprite.Group()
bullets = pygame.sprite.Group()
mobs = pygame.sprite.Group()
player = Player()
all_sprites_1.add(player)
boss = Boss()
all_sprites_1.add(boss)
mobs1 = pygame.sprite.Group()

while True: #main game loop
    screen.blit(surface_title, rect_title)
    screen.blit(surface_new_game, rect_new_game)
    screen.blit(surface_load_game, rect_load_game)
    screen.blit(surface_exit, rect_exit)
    for event in pygame.event.get():
        if event.type == VIDEORESIZE:
            #This line creates a new display in order to clear the screen.
            #I figured this out myself, so if you know of a better way to do this, let me know.
            screen = pygame.display.set_mode((event.w, event.h),RESIZABLE)

            width = event.w
            height = event.h

            #Creates the rectangle objects that will be behind the title and menu buttons.
            title = pygame.Rect(((width/16)+1, (height/8)+1, 7*width/8, height/4))
            menu1 = pygame.Rect(((width/4)+1, (height/2)+1, 2*width/4, height/10))
            menu2 = pygame.Rect(((width/4)+1, (height/2)+1+(3*height/20), 2*width/4, height/10))
            menu3 = pygame.Rect(((width/4)+1, (height/2)+1+(6*height/20), 2*width/4, height/10))




            #Creates and draws the text.
            rect_title = surface_title.get_rect()
            rect_title.center = (width/2,(height/4)+3)
            rect_new_game = surface_new_game.get_rect()
            rect_new_game.center = (width/2,(height/2)+(height/20)+3)
            rect_load_game = surface_load_game.get_rect()
            rect_load_game.center = (width/2,(height/2)+(4*height/20)+3)
            rect_exit = surface_exit.get_rect()
            rect_exit.center = (width/2,(height/2)+(7*height/20)+3)

            pygame.display.update() #Necessary to update the screen

        #When you let go of the left mouse button in the area of a button, the button does something.
        if event.type == MOUSEBUTTONUP:
            if event.button == 1:
                if (menu1.left < event.pos[0] < menu1.right) and (menu1.top < event.pos[1] < menu1.bottom):
                    False
                if (menu2.left < event.pos[0] < menu2.right) and (menu2.top < event.pos[1] < menu2.bottom):
                    print("LOAD GAME") #Placeholder
                if (menu3.left < event.pos[0] < menu3.right) and (menu3.top < event.pos[1] < menu3.bottom):
                    pygame.event.post(pygame.event.Event(QUIT)) #Exits the game

        #When you mouse-over a button, the text turns green.
        if event.type == MOUSEMOTION:
            if (menu1.left < event.pos[0] < menu1.right) and (menu1.top < event.pos[1] < menu1.bottom):
                surface_new_game = font_menu.render('NEW GAME', True, (0,255,0))
            else:
                surface_new_game = font_menu.render('NEW GAME', True, (255,255,255))
            if (menu2.left < event.pos[0] < menu2.right) and (menu2.top < event.pos[1] < menu2.bottom):
                surface_load_game = font_menu.render('LOAD GAME', True, (0,255,0))
            else:
                surface_load_game = font_menu.render('LOAD GAME', True, (255,255,255))
            if (menu3.left < event.pos[0] < menu3.right) and (menu3.top < event.pos[1] < menu3.bottom):
                surface_exit = font_menu.render('EXIT', True, (0,255,0))
            else:
                surface_exit = font_menu.render('EXIT', True, (255,255,255))           

        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()


running = True
while running:
    clock.tick(FPS)
    for e in pygame.event.get():         # запускает таймер ,каждую секунду он считает
        if e.type == pygame.USEREVENT:   # только в его границах работает таймер 
            timer_games += 1
            timer_stats += 1
            # показываем все что нужно в консоли 
            if timer_stats % 4 == 0:    # каждые 4 секунды 
                #print("mobs:" + str(mobs1))
                #print("Mob3:" + str(mobs))
                #print("player_ship_life:" + str(player_ship_life))
                for i in range(3):
                    s = Mob()
                    all_sprites_1.add(s)
                    mobs.add(s)
                for i in range(5):
                    m = Mob2()
                    all_sprites_1.add(m)
                    mobs.add(m)
                    u += 50


            if timer_games % 15 == 0:
                for i in range(1):
                    z = first_aid_kit()
                    all_sprites_1.add(z)
                    _aid_.add(z)



            all_sprites = pygame.sprite.Group()
            '''
что бы запустить повторое появление надо 2 раза запустить all_sprites = pygame.sprite.Group()
за главным циклом и в главное в разделе if e.type == pygame.USEREVENT: 
так же переменые надо писать после 2 запуска all_sprites = pygame.sprite.Group()
+++ процент делает так что каждые секунды за ним(k) запускают это число. и сразу его прекращает
+++ lll растояние между ними  
+++ mobs1.empty()  - удаляет все из группы 
            '''
            lll = 60
            k = 2                                   
            if timer_games % k == 0:                               
                for i in range(10):                                  
                    q = Mob3(lll)                                  
                    all_sprites.add(q)
                    mobs1.add(q)
                    lll += 165  # 200
                    mobs1.empty()
                    mobs1.add()



        if e.type == pygame.QUIT:
            running = False 
        elif e.type == pygame.KEYDOWN:
            if e.key == pygame.K_SPACE:
                player.shoot()

    # Обновление
    all_sprites.update()
    all_sprites_1.update()
    # Найти все спрайты, которые сталкиваются между двумя группами.
    hits = pygame.sprite.groupcollide(mobs, bullets, True, True)
    for hit in hits:
        m = Mob()
        all_sprites_1.add(m)
        mobs.add(m)

    # Проверка, не ударил ли моб игрока
    hits = pygame.sprite.spritecollide(player, mobs, True)# если ударил то исчезает с экрана 
    if hits:
        player_ship_life -= 10 # за каждое попадание минус хп
        if player_ship_life <= 0: # если здоровье меньше нуля...
            running = False

    hits = pygame.sprite.spritecollide(player, _aid_, True)# если ударил то исчезает с экрана 
    if hits:
        player_ship_life += 10
        #BAR_LENGTH += 10
    # босс 1 уровня игры
    hits = pygame.sprite.spritecollide(boss, bullets, True)# если ударил то исчезает с экрана
    if hits:
        #running = False
        boss_life -= 4 # за каждое попадание минус хп
        if boss_life <= 0: # если здоровье меньше нуля...
            running = False


    # Рендеринг
    screen.fill(BLACK)
    all_sprites.draw(screen)
    all_sprites_1.draw(screen)
    draw_text(screen, score, 18, WIDTH / 2, 10)
    draw_shield_bar(screen, 5, 5, player_ship_life)
    boss.draw_boss(screen, boss_life)
    shield(screen, 5, 20, player_shield)
    # После отрисовки всего, переворачиваем экран
    pygame.display.flip()


pygame.quit()

Ответы (0 шт):