示例#1
0
文件: tetris.py 项目: kr463/tetris-AI
    def runAI_2(self, weights, limitPiece):
        self.gameover = False
        self.paused = False

        #dont_burn_my_cpu = pygame.time.Clock()
        while 1:

            if (self.nbPiece >= limitPiece
                    and limitPiece > 0) or (self.moves_left <= 0):
                self.gameover = True

            if self.playWithUI:
                self.gui.update(self)

            if self.gameover:
                return self.lines * 1000 + self.nbPiece

            if not self.computed:
                self.computed = True
                Ai.choose(self.board, self.stone, self.next_stone,
                          self.stone_x, weights, self)

            if self.playWithUI:
                for event in pygame.event.get():
                    if event.type == pygame.USEREVENT + 1:
                        self.drop(True)
                    elif event.type == pygame.QUIT:
                        self.quit()
                    elif event.type == pygame.KEYDOWN:
                        if event.key == eval("pygame.K_s"):
                            self.speed_up()
                        elif event.key == eval("pygame.K_p"):
                            self.toggle_pause()
示例#2
0
文件: tetris.py 项目: kr463/tetris-AI
    def runAI_1(self, weights, limitPiece):
        key_actions1 = {
            'ESCAPE': self.quit,
            'LEFT': lambda: self.move(-1),
            'RIGHT': lambda: self.move(+1),
            'DOWN': lambda: self.drop(True),
            'UP': self.rotate_stone,
            'p': self.toggle_pause,
            'SPACE': self.start_game,
            'RETURN': self.insta_drop
        }
        key_actions2 = {
            'ESCAPE': self.quit,
            'a': lambda: self.move(-1),
            'd': lambda: self.move(+1),
            's': lambda: self.drop(True),
            'w': self.rotate_stone,
            'p': self.toggle_pause,
            'SPACE': self.start_game,
            'LSHIFT': self.insta_drop
        }
        self.gameover = False
        self.paused = False

        #slow it down
        pygame.time.set_timer(pygame.USEREVENT + 1, 750)
        dont_burn_my_cpu = pygame.time.Clock()
        while 1:

            if (self.nbPiece >= limitPiece
                    and limitPiece > 0) or (self.moves_left <= 0):
                self.gameover = True

            if self.playWithUI:
                self.gui.update(self)

            if self.gameover:
                return self.lines * 1000 + self.nbPiece

            if not self.computed:
                self.computed = True
                Ai.choose(self.board, self.stone, self.next_stone,
                          self.stone_x, weights, self)

            if self.playWithUI:
                for event in pygame.event.get():
                    if event.type == pygame.USEREVENT + 1:
                        self.drop(True)
                    elif event.type == pygame.QUIT:
                        self.quit()
                    elif event.type == pygame.KEYDOWN:
                        if self.player == 1:
                            if event.key == eval("pygame.K_p"):
                                self.toggle_pause()
                        elif self.player == 2:
                            for key in key_actions2:
                                if event.key == eval("pygame.K_" + key):
                                    key_actions2[key]()
    def run(self):
        pygame.init()
        (width, height) = pygame.display.get_surface().get_size()

        print(width, height)
        self.board = Board(self.mode)
        self.board.screen.fill(Var.MAIN_VIOLET)
        resize = height / self.board.display_height
        self.vdresize2(resize, height)
        if width == Var.current_w:
            pygame.display.set_mode((width, height),
                                    RESIZABLE).fill(Var.MAIN_VIOLET)
        icon = pygame.image.load('assets/images/icon.PNG')  # png -> PNG로 수정
        pygame.display.set_icon(icon)
        pygame.display.set_caption('Tetris')
        self.board.level_speed()  # 추가 - level1에서 속도
        self.gameover = False  # ai 관련
        self.paused = False  # ai 관련
        if self.mode == 'ai':
            Var.ai_bgm.play()
        else:
            Var.base_bgm.play()

        if self.mode == 'ai':
            self.next_stone = Var.ai_tetris_shapes[random.randint(
                Var.ai_block_choice_start, Var.ai_block_choice_end
            )]  # 다음 블럭 랜덤으로 고르기 0~6 사이의 랜덤 숫자를 통해 고르기
            self.ai_init_game()

        while True:
            if self.mode == 'ai':
                Ai.choose(self.ai_board, self.stone, self.next_stone,
                          self.stone_x, Var.weights, self)

            if self.check_reset:
                self.check_reset = False

            if self.mode == 'ai':
                if self.board.game_over() or self.board.score < self.ai_score:
                    Var.ai_bgm.stop()
                    self.board.show_my_score()
                    break

            if self.board.game_over():
                Var.base_bgm.stop()
                Var.ai_bgm.stop()
                Var.game_over.play()
                self.Score = self.board.score
                self.board.show_my_score()
                break

            for event in pygame.event.get():
                # 게임진행중 - event는 키보드 누를떄 특정 동작 수할떄 발생
                if event.type == QUIT:  # 종류 이벤트가 발생한 경우
                    pygame.quit()  # 모든 호출 종
                    sys.exit()  # 게임을 종료한다ㅏ.
                elif event.type == KEYUP and event.key == K_p:  # 일시 정지 버튼 누르면
                    Var.base_bgm.stop()
                    Var.ai_bgm.stop()  # 일시 정지 노래 중둠    오류나서  일단 뺴
                    self.board.pause()

                elif event.type == KEYDOWN:  # 키보드를 누르면
                    if self.mode == 'two':
                        self.handle_key2(event.key, self.mode)  # handle 메소드 실행
                    else:
                        self.handle_key(event.key, self.mode)  # handle 메소드 실행
                elif event.type == pygame.USEREVENT:
                    self.board.drop_piece(self.mode)
                    if self.mode == 'two':
                        self.board.drop_piece2()

                elif event.type == Var.ai_event:
                    if self.mode == 'ai':
                        self.ai_drop(False)

                # 화면 크기 조절해 보기
                elif event.type == VIDEORESIZE:
                    info = pygame.display.Info()
                    resize = event.h / self.board.display_height

                    if event.w != self.board.display_width:
                        pygame.display.set_mode((self.board.display_width,
                                                 self.board.display_height),
                                                RESIZABLE)

                    if resize != Var.resize_basic:
                        self.vdresize(resize, event.h)
                        if info.current_w == (Var.current_w):
                            pygame.display.set_mode(
                                (info.current_w, info.current_h),
                                RESIZABLE).fill(Var.MAIN_VIOLET)

            self.board.draw(self, self.mode)
            pygame.display.update()  # 이게 나오면 구현 시
            self.clock.tick(Var.fps)  # 초당 프레임 관련