示例#1
0
class Main:
    '''класс для управления ресурсами и поведением игры'''
    def __init__(self):
        '''инициализирует игру и создает игровые ресурсы'''

        pygame.init()

        self.settings = Settings()
        self.screen = pygame.display.set_mode(
            (self.settings.screen_width, self.settings.screen_height))
        pygame.display.set_caption("Cactus evolution")

        self.clicker = Clicker(self)

        self.arrows = pygame.sprite.Group()
        self.game_folder = os.path.dirname(__file__)
        self.sounds_folder = os.path.join(self.game_folder, 'sounds')

        self.passed_time = 0
        self.start_game_time = time.time()
        self.clock = pygame.time.Clock()

        self.stats = GameStats(self)
        self.sb = Scoreboard(self)
        self.au = Authorization(self)

        self.last = None
        self.in_mission = False

        self.time = None
        self.access = False
        self.random_color = None

        self.left = False
        self.right = False
        self.up = False
        self.down = False

        self.current_color = None

        #Создание кнопки Play
        self.play_button = Button(self, "Play")

        self.start_time = None
        self.music_play = False
        self.waiting = True
        self.pause = False

        self.start_countdown = True
        self.timer = False
        #self.timer_h = 1
        self.timer_s = self.settings.timer
        self.timer_tick = None
        self.timer_access = True

        #Меню
        self.menu_access = True
        self.check_start_game = False
        self.menu = Menu(self)
        self.multiplayer_access = False
        self.singleplayer_access = False
        self.shop_access = False
        self.end_access = False

        self.reset_arrows = True
        self.authorization_access = True
        self.user_login = ''
        self.user_password = ''
        self.font = pygame.font.Font(None, 32)
        self.text_surface = None

        self.write_access_login = False
        self.write_access_password = False
        self.login = ''
        self.password = ''
        self.bool_resp = None
        self.without_symb = None

        self.multiplayer_timer = 30
        self.multiplayer_ticks = None
        self.mu = Multiplayer(self)
        self.SSP_access = True
        self.step = None

        self.reg = Registration(self)
        self.reg_access = False

        #Мультиплеер - инфа о игроках и игре
        self.search_game_access = False
        self.end_round = False
        self.interval = 3
        self.start_room = False
        self.CLIENT_ID = None
        self.enemy_id = None
        self.game_data = {}
        self.game_search_ticks = None
        self.game_search_timer = None

        self.search_button = True
        self.choise = False

        self.my_health_loss = 0
        self.enemy_health_loss = 0
        self.my_health = None
        self.enemy_health = 1000
        self.end_multiplayer_game_access = False
        self.rez = ''

        self.shop = Shop(self)
        self.level = None
        self.next_level_exp = None
        self.exp = None
        self.coins = None
        self.singleplayer_coins = 0
        self.multiplayer_coins = 0
        self.multiplayer_add_coins = False
        self.singleplayer_add_coins = False
        self.singleplayer_exp = 0
        self.multiplayer_exp = 0

    def run_game(self):
        '''запуск основного цикла игры'''

        while True:
            self._check_events()
            if self.authorization_access:
                self._autorization()

            elif self.reg_access:
                self._reg()

            else:
                if not self.menu_access:
                    if self.singleplayer_access:
                        self._singleplayer()
                    elif self.end_access:
                        self._end_game()
                    elif self.multiplayer_access:
                        if not self.end_multiplayer_game_access:
                            if self.start_room == False:
                                self._wait_player()
                            else:
                                self._multiplayer()
                        else:
                            self._end_multiplayer_game()
                    elif self.shop_access:
                        self._shop()
                elif self.menu_access:
                    self._menu()
            self._update_screen()
            self.clock.tick(60)

    def _check_events(self):
        '''обрабатывает нажания клавиш и события мыши'''

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

            elif event.type == pygame.KEYDOWN:
                self._check_keydown_events(event)

            elif event.type == pygame.MOUSEBUTTONDOWN:
                mouse_pos = pygame.mouse.get_pos()
                if self.multiplayer_access == False and self.menu_access == False:
                    self._check_play_button(mouse_pos)
                self._check_button(mouse_pos)

    def _reg(self):
        self.screen.blit(self.settings.menu_entrance,
                         self.settings.image_menu_rect)
        self.reg.blit_registration()
        self.reg.show_enter_reg_button()
        self.reg.draw_interface()
        self._registration()
        if self.bool_resp == False:
            self.reg.show_resp(False, self.without_symb)

    def _autorization(self):
        self.screen.blit(self.settings.menu_entrance,
                         self.settings.image_menu_rect)
        self.au.blit_autorizhation()
        self.au.show_enter_button()
        self.au.show_reg_button()
        self.au.draw_rect()
        self._authorization()
        if self.bool_resp == False:
            self.au.show_resp(False)

    def _authorization_access(self):
        self.login = self.user_login
        self.password = self.user_password
        param = {'login': self.login, 'password': self.password}
        res = requests.post("http://localhost:3000/autorizhation",
                            data=json.dumps(param))
        if res.text != "" and res.text != "Пусто":
            res_json = res.json()
            self.CLIENT_ID = res_json["id"]
            self.level = int(res_json["level"])
            self.next_level_exp = int(res_json["next_level_exp"])
            self.exp = int(res_json["exp"])
            self.my_health = int(res_json["health"])
            self.coins = int(res_json["coins"])
        if (bool(res.text) == True):
            self.authorization_access = False
        else:
            self.bool_resp = False
        self.user_login = ""
        self.user_password = ""

    def _registration_access(self):
        self.login = self.user_login
        self.password = self.user_password
        param = {'login': self.login, 'password': self.password}
        res = requests.post("http://localhost:3000/registration",
                            data=json.dumps(param))
        if res.text != "" and res.text != "empty":
            res_json = res.json()
            self.CLIENT_ID = res_json["id"]
            self.level = int(res_json["level"])
            self.next_level_exp = int(res_json["next_level_exp"])
            self.exp = int(res_json["exp"])
            self.my_health = int(res_json["health"])
            self.coins = int(res_json["coins"])

        if (bool(res.text) == True and res.text != "empty"):
            self.reg_access = False
        elif res.text == "":
            self.without_symb = False
            self.bool_resp = False
            self.user_login = ""
            self.user_password = ""
        elif res.text == "empty":
            self.without_symb = True
            self.bool_resp = False
            self.user_login = ""
            self.user_password = ""
        self.user_login = ""
        self.user_password = ""

    def _check_button(self, mouse_pos):

        singleplayer = self.menu.singleplayer_rect.collidepoint(mouse_pos)
        multiplayer = self.menu.multiplayer_rect.collidepoint(mouse_pos)
        shop = self.menu.shop_rect.collidepoint(mouse_pos)

        login = self.au.rect.collidepoint(mouse_pos)
        password = self.au.rect_password.collidepoint(mouse_pos)

        scissors = self.mu.scissors_rect.collidepoint(mouse_pos)
        stone = self.mu.stone_rect.collidepoint(mouse_pos)
        paper = self.mu.paper_rect.collidepoint(mouse_pos)

        search_game = self.mu.lets_go_rect.collidepoint(mouse_pos)

        enter = self.au.enter_rect.collidepoint(mouse_pos)
        enter_reg = self.reg.enter_reg_rect.collidepoint(mouse_pos)
        registration = self.au.reg_rect.collidepoint(mouse_pos)

        if not self.authorization_access and self.menu_access and not self.reg_access:
            if singleplayer:
                self.arrows.empty()
                self.stats.reset_other_stats()
                self.menu_access = False
                self.check_start_game = True
                self.start_countdown = True
                self.singleplayer_access = False
                self.stats.reset_stats()
                self.singleplayer_coins = 0
                self.singleplayer_exp = 0
                self.sb.prep_score()
                self.sb.show_score()
                self.sb.show_all_score()
                pygame.display.update(self.sb.score_rect)
                self.multiplayer_access = False
                self.shop_access = False

            if multiplayer:
                self.menu_access = False
                self.multiplayer_access = True
                self.check_start_game = False
                self.singleplayer_access = False
                self.shop_access = False
                self.multiplayer_coins = 0
                self.multiplayer_exp = 0

            if shop:
                self.check_start_game = False
                self.menu_access = False
                self.shop_access = True
                self.multiplayer_access = False
                self.singleplayer_access = False
        if self.authorization_access or self.reg_access:
            if login:
                self.write_access_password = False
                self.write_access_login = True
            elif password:
                self.write_access_login = False
                self.write_access_password = True

        if not self.end_round and self.multiplayer_access and self.choise:
            if scissors:
                self.step = 'scissors'
            elif stone:
                self.step = 'rock'
            elif paper:
                self.step = 'paper'

        if self.authorization_access:
            if registration:
                self.reg_access = True
                self.authorization_access = False
                self.user_login = ""
                self.user_password = ""
            if enter:
                self._authorization_access()

        if self.reg_access:
            if enter_reg:
                self._registration_access()

        if self.multiplayer_access and self.search_button:
            if search_game:
                self.search_game_access = True
                self.search_button = False
                self.choise = True

    def _check_keydown_events(self, event):
        '''Реагирует на нажатие клавиш.'''
        if event.key == pygame.K_ESCAPE:
            if self.singleplayer_access:
                self.singleplayer_access = False
                self.menu_access = True
                self.check_start_game = False
                self.stats.game_active = False
                self.timer_s = self.settings.timer
                pygame.mixer.music.stop()
                self.music_play = False
                self.stats.reset_stats()
                pygame.mouse.set_visible(True)
            elif self.multiplayer_access:

                self.start_room = False
                self.game_search_ticks = None
                self.game_search_timer = None
                self.search_button = True
                self.choise = False

                if self.end_multiplayer_game_access:
                    self.multiplayer_access = False
                    self.menu_access = True,
                    self.end_round = False
                    self.step = ''
                    self.end_multiplayer_game_access = False
                    self.search_button = True

                self.multiplayer_access = False
                self.search_game_access = False
                self.menu_access = True
                self.check_start_game = False
                self.step = ''
                self.rez = ''
                self.my_health_loss = 0
                self.enemy_health_loss = 0
                self.my_health = 1000
                self.enemy_health = 1000

                pygame.mouse.set_visible(True)
            elif self.shop_access:
                self.shop_access = False
                self.menu_access = True
                self.check_start_game = False
                pygame.mouse.set_visible(True)
            elif self.end_access:
                self.end_access = False
                self.menu_access = True
                self.check_start_game = False
                pygame.mouse.set_visible(True)
            elif not self.stats.game_active and self.check_start_game:
                self.menu_access = True
                self.check_start_game = False
            else:
                sys.exit()
        if self.singleplayer_access:
            if event.key == pygame.K_RIGHT:
                self.current_color = self.settings.arrows_color['right']
                self.right = True
                self._remove_arrows()
                self.right = False
            elif event.key == pygame.K_LEFT:
                self.current_color = self.settings.arrows_color['left']
                self.left = True
                self._remove_arrows()
                self.left = False
            elif event.key == pygame.K_UP:
                self.current_color = self.settings.arrows_color['up']
                self.up = True
                self._remove_arrows()
                self.up = False
            elif event.key == pygame.K_DOWN:
                self.current_color = self.settings.arrows_color['down']
                self.down = True
                self._remove_arrows()
                self.down = False

        #if (not self.stats.game_active and self.singleplayer_access):
        #pass
        #if event.key == pygame.K_SPACE:
        #self._start_game()

        if self.authorization_access:

            if event.key == pygame.K_RETURN:
                self._authorization_access()

        elif self.reg_access:
            if event.key == pygame.K_RETURN:
                self._registration_access()
            self._registration()

        if self.write_access_login or self.write_access_password:
            if event.key == pygame.K_BACKSPACE:
                if self.write_access_login:
                    self.user_login = self.user_login[:-1]
                elif self.write_access_password:
                    self.user_password = self.user_password[:-1]
            elif ((event.key > 64 and event.key < 91)
                  or (event.key > 96 and event.key < 123)
                  or (event.key > 47 and event.key < 58)):
                if self.write_access_login:
                    self.user_login += event.unicode
                elif self.write_access_password:
                    self.user_password += event.unicode

    def _check_play_button(self, mouse_pos):
        '''Запускает новую игру при нажатии кнопки Play.'''
        button_clicked = self.play_button.rect.collidepoint(mouse_pos)
        if button_clicked:
            #Сброс игровой статистики.
            self.stats.reset_stats()
            self.stats.game_active = True
            self.singleplayer_access = True
            #Указатель мыши скрывается
            pygame.mouse.set_visible(False)

    def _create_arrow(self):
        '''создание и добавление стрелочки в группу стрелочек'''
        new_arrow = Arrow(self)
        self.arrows.add(new_arrow)

    def _update_arrows(self):
        '''прорисовка движения стрелочки и её удаление'''
        self.arrows.update()
        for arrow in self.arrows.sprites():
            if arrow.color == self.settings.arrows_color['right']:
                arrow.blit_right_arrow()
            elif arrow.color == self.settings.arrows_color['left']:
                arrow.blit_left_arrow()
            elif arrow.color == self.settings.arrows_color['up']:
                arrow.blit_up_arrow()
            elif arrow.color == self.settings.arrows_color['down']:
                arrow.blit_down_arrow()

        for arrow in self.arrows.copy():
            if arrow.right_rect.left >= self.settings.screen_width:
                self.arrows.remove(arrow)

    def _remove_arrows(self):
        '''Удаление стрелочки, при нажатии клавиши'''
        for arrow in self.arrows.copy():
            ###########################
            if self.clicker.bottom_square.right < arrow.rect.left:
                self.arrows.remove(arrow)
                self._remove_arrows()

            ##########################
            if self.current_color == arrow.color:
                if arrow.rect.left < self.clicker.bottom_square.left or (
                        arrow.rect.left >= self.clicker.bottom_square.left and
                    (arrow.rect.right >= self.clicker.bottom_square.right
                     and arrow.rect.right <=
                     self.clicker.bottom_square.right + arrow.rect.width)):
                    if (self.stats.score > 9):
                        self.stats.score -= self.settings.arrow_points_missed
                        self.stats.all_score -= self.settings.arrow_points_missed
                    self.sb.prep_score()
                    self.arrows.remove(arrow)
                    self.clicker.draw_red_square()
                    pygame.display.update(self.clicker.bottom_square)
                    pygame.time.delay(100)
                    break

                elif ((arrow.rect.left >= self.clicker.bottom_square.left) and
                      (arrow.rect.right <= self.clicker.bottom_square.right)):
                    self.stats.score += self.settings.arrow_points_hit
                    self.stats.all_score += self.settings.arrow_points_hit
                    self.sb.prep_score()
                    self.arrows.remove(arrow)
                    self.clicker.draw_green_square()
                    pygame.display.update(self.clicker.bottom_square)
                    pygame.time.delay(100)
                    break
            else:
                if (self.stats.score > 9):
                    self.stats.score -= self.settings.arrow_points_missed
                    self.stats.all_score -= self.settings.arrow_points_missed
                self.sb.prep_score()
                self.arrows.remove(arrow)
                self.clicker.draw_red_square()
                pygame.display.update(self.clicker.bottom_square)
                pygame.time.delay(100)
                break

    def _check_points(self):
        '''Проверяет очки, а затем поливает(если очки максимум)'''
        if (self.stats.score >= self.settings.limit_points):
            self.stats.wat_count += 1
            self.singleplayer_coins += 1
            self.singleplayer_exp += 100
            self.access = True
            self.stats.reset_stats()
            self.sb.prep_score()
            if (not self.time):
                self.time = pygame.time.get_ticks()

        if (self.access == True
                and self.time + 3500 >= pygame.time.get_ticks()):
            self.clicker.draw_watering()
        else:
            self.time = None
            self.access = False

    def _authorization(self):
        self.text_surface = self.font.render(self.user_login, True,
                                             (255, 255, 255))
        self.password_text_surface = self.font.render(self.user_password, True,
                                                      (255, 255, 255))
        self.screen.blit(self.text_surface,
                         (self.au.rect.x + 5, self.au.rect.y + 5))
        self.au.show_enter()
        self.au.rect.w = max(100, self.text_surface.get_width() + 10)
        self.screen.blit(
            self.password_text_surface,
            (self.au.rect_password.x + 5, self.au.rect_password.y + 5))
        self.au.rect_password.w = max(
            100,
            self.password_text_surface.get_width() + 10)

    def _registration(self):
        self.text_surface = self.font.render(self.user_login, True,
                                             (255, 255, 255))
        self.password_text_surface = self.font.render(self.user_password, True,
                                                      (255, 255, 255))
        self.screen.blit(self.text_surface,
                         (self.reg.rect.x + 5, self.reg.rect.y + 5))
        self.reg.show_enter()
        self.reg.rect.w = max(100, self.text_surface.get_width() + 10)
        self.screen.blit(
            self.password_text_surface,
            (self.reg.rect_password.x + 5, self.reg.rect_password.y + 5))
        self.reg.rect_password.w = max(
            100,
            self.password_text_surface.get_width() + 10)

    def _menu(self):
        self.screen.blit(self.settings.menu, self.settings.image_menu_rect)
        self.menu.blit_menu()
        self.menu.blit_coins(self.coins, self.exp, self.level,
                             self.next_level_exp)
        self.menu.draw_hi(self.login)

    def _set_and_coins(self):
        param = {'coins': str(self.coins), 'id': str(self.CLIENT_ID)}
        requests.post("http://localhost:3000/set_exp_and_coins",
                      data=json.dumps(param))

    def _set_and_check_exp_and_level(self):
        param = {
            'exp': str(self.exp),
            'id': str(self.CLIENT_ID),
            'next_level_exp': str(self.next_level_exp),
            'level': str(self.level)
        }
        response = requests.post(
            'http://localhost:3000/set_and_check_exp_and_level',
            data=json.dumps(param))
        res_json = response.json()
        self.exp = int(res_json["exp"])
        self.next_level_exp = int(res_json["next_level_exp"])
        self.level = int(res_json["level"])

    def _singleplayer(self):
        self.screen.blit(self.settings.image_desert,
                         self.settings.image_desert_rect)
        if self.stats.game_active:
            #Отсчёт
            if self.start_countdown == True:
                self.sb.show_countdown(sec=3)
                pygame.display.flip()
                pygame.time.delay(1000)
                self.screen.blit(self.settings.image_desert,
                                 self.settings.image_desert_rect)
                self.sb.show_countdown(sec=2)
                pygame.display.flip()
                pygame.time.delay(1000)
                self.screen.blit(self.settings.image_desert,
                                 self.settings.image_desert_rect)
                self.sb.show_countdown(sec=1)
                pygame.display.flip()
                pygame.time.delay(1000)
                self.start_countdown = False
                self.screen.blit(self.settings.image_desert,
                                 self.settings.image_desert_rect)
                pygame.display.flip()
            if self.timer_access:
                if not self.music_play:
                    random_music = random.choice(self.settings.musics)

                    pygame.mixer.music.load(
                        os.path.join(self.sounds_folder, random_music))
                    if random_music == "sep.mp3":
                        pygame.mixer.music.play(loops=0, start=28.0, fade_ms=0)
                    elif random_music == "never.mp3" or random_music == "onepunchman.mp3":
                        pygame.mixer.music.play(loops=0, start=10.0, fade_ms=0)
                    elif random_music == "Pugacheva.mp3":
                        pygame.mixer.music.play(loops=0, start=48.0, fade_ms=0)
                    elif random_music == "C_C_Catch.mp3":
                        pygame.mixer.music.play(loops=0, start=41.0, fade_ms=0)
                    else:
                        pygame.mixer.music.play(loops=0, start=0, fade_ms=0)

                    self.music_play = True
                self.sb.show_timer(sec=self.timer_s)

                if self.timer_tick == None:
                    self.timer_tick = pygame.time.get_ticks()

                if self.timer_tick + 1000 < pygame.time.get_ticks():
                    self.timer_s -= 1
                    self.timer_tick = None

                if self.timer_s == -1:
                    self.timer_s = self.settings.timer
                    self.stats.game_active = False
                    self.singleplayer_access = False
                    self.check_start_game = False
                    self.end_access = True
                    self.singleplayer_add_coins = True
                    pygame.mixer.music.stop()
                    self.music_play = False
                    pygame.mouse.set_visible(True)

                self.clicker.draw_cactus()
                self.clicker.draw_stats_rect()
                self.clicker.draw_rect()
                self.sb.show_score()
                self.sb.show_all_score()
                if self.waiting:
                    pygame.display.flip()
                    pygame.time.delay(500)
                    self.waiting = False
                self._check_events()
                if pygame.time.get_ticks() > self.passed_time:
                    self._create_arrow()
                    self.passed_time = pygame.time.get_ticks(
                    ) + random.randint(800, 1150)
                self._check_points()
                self._draw_other()
                self.reset_arrows = False
                pygame.display.flip()

    def _end_game(self):
        self.screen.blit(self.settings.image_desert,
                         self.settings.image_desert_rect)
        self.sb.end_game(self.singleplayer_coins, self.singleplayer_exp)
        if self.singleplayer_add_coins:
            self.coins += self.singleplayer_coins
            if self.level < 5:
                self.exp += self.singleplayer_exp
                self._set_and_check_exp_and_level()
            self.singleplayer_add_coins = False
            self._set_and_coins()

    def _check_multiplayer_param(self):
        if self.rez == 'WIN':
            self.multiplayer_coins += 10
            self.multiplayer_exp += 100

    def _end_multiplayer_game(self):
        self.screen.blit(self.settings.mult_bg, self.settings.mult_bg_rect)
        if self.multiplayer_add_coins:
            self._check_multiplayer_param()
            self.coins += self.multiplayer_coins
            if self.level < 5:
                self.exp += self.multiplayer_exp
                self._set_and_check_exp_and_level()
            self.multiplayer_add_coins = False
            self._set_and_coins()
        self.mu.blit_end_multiplayer_game(self.rez, self.multiplayer_coins,
                                          self.multiplayer_exp)
        self.my_health_loss = 0
        self.enemy_health_loss = 0
        self.my_health = 1000
        self.enemy_health = 1000

    def _update_health(self, my=False, enemy=False):
        if my:
            self.my_health_loss += 62.5
            self.my_health -= 250
        if enemy:
            self.enemy_health_loss += 62.5
            self.enemy_health -= 250

    def _blit_elem(self, data):
        if data['user_choice'] == 'rock':
            self.mu.blit_elem(scissors=False, paper=False, rock=True)
        elif data['user_choice'] == 'scissors':
            self.mu.blit_elem(scissors=True, paper=False, rock=False)
        elif data['user_choice'] == 'paper':
            self.mu.blit_elem(scissors=False, paper=True, rock=False)

    def _rez(self, data):
        try:
            response = requests.post('http://localhost:3000/play_game', data)
            resp_json = response.json()
            if resp_json['game_status'] == 'run':
                if resp_json['winner'] == 'I':
                    self._update_health(enemy=True)
                    self.screen.blit(self.settings.mult_bg,
                                     self.settings.mult_bg_rect)
                    self._blit_elem(data)
                    self.mu.multiplayer_game()
                    self.mu.draw_stats_part_rect(self.my_health_loss,
                                                 self.enemy_health_loss)
                    self.mu.blit_health(self.my_health, self.enemy_health)
                    self.mu.blit_rez('win')
                    self.mu.blit_enemy_elem(self.step, 'WIN')
                    self.step = ''
                    pygame.display.flip()
                    pygame.time.delay(2000)
                    # Если финал
                    if self.my_health_loss == 250 or self.enemy_health_loss == 250:
                        self.rez = 'WIN'
                        self.end_multiplayer_game_access = True
                        self.multiplayer_add_coins = True

                    #Блит победы
                elif resp_json['winner'] == 'Other':
                    self._update_health(my=True)
                    self.screen.blit(self.settings.mult_bg,
                                     self.settings.mult_bg_rect)
                    self._blit_elem(data)
                    self.mu.multiplayer_game()
                    self.mu.draw_stats_part_rect(self.my_health_loss,
                                                 self.enemy_health_loss)
                    self.mu.blit_health(self.my_health, self.enemy_health)
                    self.mu.blit_rez('lose')
                    self.mu.blit_enemy_elem(self.step, 'LOSE')
                    self.step = ""
                    pygame.display.flip()
                    pygame.time.delay(2000)
                    if self.my_health_loss == 250 or self.enemy_health_loss == 250:
                        self.rez = 'LOSE'
                        self.end_multiplayer_game_access = True
                    #Блит слива
                elif resp_json['winner'] == 'Draw':
                    self.screen.blit(self.settings.mult_bg,
                                     self.settings.mult_bg_rect)
                    self._blit_elem(data)
                    self.mu.multiplayer_game()
                    self.mu.draw_stats_part_rect(self.my_health_loss,
                                                 self.enemy_health_loss)
                    self.mu.blit_health(self.my_health, self.enemy_health)
                    self.mu.blit_rez('draw')
                    self.mu.blit_enemy_elem(self.step, 'DRAW')
                    self.step = ""
                    pygame.display.flip()
                    pygame.time.delay(2000)
                    #Блит ничьи
                self.end_round = True
                return
            else:
                self.mu.blit_act(True)
                #print('waiting enemy choice')
        except Exception as err:
            print(f'{err}')
            return

    def rock(self):
        data = {
            'ID': self.CLIENT_ID,
            'game_id': self.game_data['game_id'],
            'user_choice': 'rock'
        }
        self.screen.blit(self.settings.mult_bg, self.settings.mult_bg_rect)
        self.mu.multiplayer_game()
        self.mu.draw_stats_part_rect(self.my_health_loss,
                                     self.enemy_health_loss)
        self.mu.blit_health(self.my_health, self.enemy_health)
        self.mu.blit_elem(scissors=False, paper=False, rock=True)
        self._rez(data)

    def scissors(self):
        data = {
            'ID': self.CLIENT_ID,
            'game_id': self.game_data['game_id'],
            'user_choice': 'scissors'
        }
        self.screen.blit(self.settings.mult_bg, self.settings.mult_bg_rect)
        self.mu.multiplayer_game()
        self.mu.draw_stats_part_rect(self.my_health_loss,
                                     self.enemy_health_loss)
        self.mu.blit_health(self.my_health, self.enemy_health)
        self.mu.blit_elem(scissors=True, paper=False, rock=False)

        def check():
            try:
                response = requests.post('http://localhost:3000/play_game',
                                         data)
                resp_json = response.json()
                print(resp_json)
                if resp_json['game_status'] == 'run':
                    if resp_json['winner'] == 'I':
                        self.mu.blit_rez('win')
                        print("WIN")
                        self.step = ""
                        pygame.display.flip()
                        pygame.time.delay(2000)
                        #Блит победы
                    elif resp_json['winner'] == 'Other':
                        self.mu.blit_rez('lose')
                        print("LOSE")
                        self.step = ""
                        pygame.display.flip()
                        pygame.time.delay(2000)
                        #Блит слива
                    elif resp_json['winner'] == 'Draw':
                        self.mu.blit_rez('draw')
                        print("DRAW")
                        self.step = ""
                        pygame.display.flip()
                        pygame.time.delay(2000)
                        #Блит ничьи
                    self.end_round = False
                    return
                else:
                    print('waiting enemy choice')
            except Exception as err:
                print(f'{err}')

                return

        self._rez(data)

    def paper(self):
        data = {
            'ID': self.CLIENT_ID,
            'game_id': self.game_data['game_id'],
            'user_choice': 'paper'
        }
        self.screen.blit(self.settings.mult_bg, self.settings.mult_bg_rect)
        self.mu.multiplayer_game()
        self.mu.draw_stats_part_rect(self.my_health_loss,
                                     self.enemy_health_loss)
        self.mu.blit_health(self.my_health, self.enemy_health)
        self.mu.blit_elem(scissors=False, paper=True, rock=False)

        def check():
            try:
                response = requests.post('http://localhost:3000/play_game',
                                         data)
                resp_json = response.json()
                print(resp_json)
                if resp_json['game_status'] == 'run':
                    if resp_json['winner'] == 'I':
                        self.mu.blit_rez('win')
                        print("WIN")
                        self.step = ""
                        pygame.display.flip()
                        pygame.time.delay(2000)
                        #Блит победы
                    elif resp_json['winner'] == 'Other':
                        self.mu.blit_rez('lose')
                        print("LOSE")
                        self.step = ""
                        pygame.display.flip()
                        pygame.time.delay(2000)
                        #Блит слива
                    elif resp_json['winner'] == 'Draw':
                        self.mu.blit_rez('draw')
                        print("DRAW")
                        self.step = ""
                        pygame.display.flip()
                        pygame.time.delay(2000)
                        #Блит ничьи
                    self.end_round = False
                    return
                else:
                    print('waiting enemy choice')
            except Exception as err:
                print(f'{err}')
                return

        self._rez(data)

    def game_search(self):
        data = {'ID': self.CLIENT_ID}

        def check_game():
            try:
                response = requests.post('http://localhost:3000/game_search',
                                         data)
                resp_json = response.json()
                if resp_json['game_status'] == 'run':
                    self.game_data = resp_json['game_data']
                    self.game_search_timer = False
                    self.game_search_ticks = None
                    self.search_game_access = False
                    self.start_room = True
                    return
                else:
                    pass
            except Exception as err:
                print(f'{err}')
                self.game_search_timer = False
                self.game_search_ticks = None
                self.search_game_access = False
                self.start_room = False
                return

        self.game_search_timer = True
        if not self.game_search_ticks and self.game_search_timer:
            self.game_search_ticks = pygame.time.get_ticks()
        if pygame.time.get_ticks() > self.game_search_ticks + 1000:
            check_game()
            self.game_search_ticks = None

    def _cool_down(self):
        self.screen.blit(self.settings.mult_bg, self.settings.mult_bg_rect)
        self.mu.multiplayer_game()
        self.mu.draw_stats_part_rect(self.my_health_loss,
                                     self.enemy_health_loss)
        self.mu.blit_health(self.my_health, self.enemy_health)
        self.sb.show_countdown(sec=self.interval)
        self.interval -= 1
        pygame.display.flip()
        pygame.time.delay(1000)

    def _mult_timer(self):
        if self.step == 'rock':
            self.rock()
        elif self.step == 'scissors':
            self.scissors()
        elif self.step == 'paper':
            self.paper()
        else:
            self.mu.blit_act(False)
        if self.end_round and not self.end_multiplayer_game_access:
            for i in range(4):
                self._cool_down()
            self.interval = 3
            self.end_round = False
            self.multiplayer_timer = 30

    def _wait_player(self):
        self.screen.blit(self.settings.mult_bg, self.settings.mult_bg_rect)
        self.mu.search_player_button()
        if self.search_game_access:
            self.screen.blit(self.settings.mult_bg, self.settings.mult_bg_rect)
            self.mu.blit_waiting()
            self.game_search()

    def _multiplayer(self):
        self.screen.blit(self.settings.mult_bg, self.settings.mult_bg_rect)
        self.mu.multiplayer_game()
        self.mu.draw_stats_part_rect(self.my_health_loss,
                                     self.enemy_health_loss)
        self.mu.blit_health(self.my_health, self.enemy_health)
        self.mu.blit_elem()
        self._mult_timer()

    def _shop(self):
        self.screen.blit(self.settings.shop_bg, self.screen.get_rect())
        if not (self.level == 5):
            self.menu.show_bebop()
        else:
            self.shop.blit_all_cactus()

    def _draw_other(self):
        self.clicker.draw_stats_part_rect(self.stats.score)
        self._update_arrows()
        self.sb.show_score()
        self.sb.show_all_score()

    def _update_screen(self):
        if not self.stats.game_active and self.check_start_game:
            self.screen.blit(self.settings.image_desert,
                             self.settings.image_desert_rect)
            self.play_button.draw_button()
            self.sb.write_instruction()
        pygame.display.flip()