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()
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) # 초당 프레임 관련