def game_ai(): del list1[:] del list2[:] del list3[:] del list_all[:] for i in range(COLUMN): for j in range(ROW): list_all.append((i, j)) gobang = GoBang() render = GameRender(gobang) ai = GobangAI(gobang, ChessboardState.WHITE, search_depth) result = ChessboardState.EMPTY enable_ai = True keepGoing = True while keepGoing: # pygame event handle for event in pygame.event.get(): # quit if event.type == QUIT: keepGoing = False elif event.type == KEYDOWN: if event.key == pygame.K_ESCAPE: keepGoing = False elif event.type == MOUSEBUTTONDOWN: # human move if render.one_step(): # success result = gobang.get_chess_result() else: continue if result != ChessboardState.EMPTY: break if enable_ai: # AI move ai.one_step() result = gobang.get_chess_result() else: render.change_state() # render render.draw_chess() render.draw_mouse() if result != ChessboardState.EMPTY: # render.draw_result(result) gameOver(result, True) keepGoing = False # update pygame.display.update()
def game_ai_ai(displayResult, selfGame): del list1[:] del list2[:] del list3[:] del list_all[:] for i in range(COLUMN): for j in range(ROW): list_all.append((i, j)) gobang = GoBang() render = GameRender(gobang) ai = GobangAI(gobang, ChessboardState.WHITE, search_depth) if selfGame: ai2 = GobangAI2(gobang, ChessboardState.BLACK, search_depth) else: ai2 = gomokuAI(gobang, ChessboardState.BLACK, search_depth) result = ChessboardState.EMPTY keepGoing = True while keepGoing: ai2.one_step() result = gobang.get_chess_result() ai.one_step() result = gobang.get_chess_result() render.change_state() # pygame event handle for event in pygame.event.get(): # quit if event.type == QUIT: keepGoing = False elif event.type == KEYDOWN: if event.key == pygame.K_ESCAPE: keepGoing = False # render render.draw_chess() render.draw_mouse() if result != ChessboardState.EMPTY: # render.draw_result(result) gameOver(result, displayResult) keepGoing = False # update pygame.display.update()
def game(): gobang = GoBang() render = GameRender(gobang) result = ChessboardState.EMPTY enable_ai = False keepGoing = True while keepGoing: for event in pygame.event.get(): if event.type == QUIT: keepGoing = False elif event.type == KEYDOWN: if event.key == pygame.K_ESCAPE: keepGoing = False elif event.type == MOUSEBUTTONDOWN: if render.one_step(): result = gobang.get_chess_result() else: continue if result != ChessboardState.EMPTY: break if enable_ai: result = gobang.get_chess_result() else: render.change_state() # render render.draw_chess() render.draw_mouse() if result != ChessboardState.EMPTY: # render.draw_result(result) gameOver(result, True) keepGoing = False # update pygame.display.update()
import pygame from pygame.locals import * from sys import exit from consts import * from gobang import GoBang from render import GameRender #from gobang_ai import GobangAI if __name__ == '__main__': gobang = GoBang() render = GameRender(gobang) #先給AI留個接口 #ai = GobangAI(gobang, ChessboardState.WHITE) result = ChessboardState.EMPTY enable_ai = False while True: # 捕捉pygame事件 for event in pygame.event.get(): # 退出進程 if event.type == QUIT: exit() elif event.type == MOUSEBUTTONDOWN: # 成功下棋 if render.one_step(): result = gobang.get_chess_result() else: continue if result != ChessboardState.EMPTY: break if enable_ai:
from sys import exit from consts import * from gobang import GoBang from render import GameRender from agent import GobangAI if __name__ == '__main__': gobang = GoBang() flag = input( 'Do you want to play first/black? Input y for yes, other characters for no: ' ) ai_color = ChessboardState.BLACK if flag == 'y': ai_color = ChessboardState.WHITE render = GameRender(gobang, ai_color) while not render.if_end(): render.play_chess() render.switch_palyer() render.switch_palyer() render.show_result()
def play(hparams): gomoku = Gomoku(hparams) render = GameRender(gomoku, hparams) # change the AI here, bigger the depth stronger the AI ai = RLAgent(gomoku, BoardState.BLACK) result = BoardState.EMPTY # AI plays first ai.first_step() result = gomoku.get_chess_result() render.change_state() while True: if hparams['enable_second_ai']: result = gomoku.get_chess_result() if result != BoardState.EMPTY: print(result, "wins") break if hparams['enable_ai']: ai.one_step() result = gomoku.get_chess_result() if result != BoardState.EMPTY: print(result, "wins") break else: render.change_state() # pygame event, player vs. ai section for event in pygame.event.get(): if event.type == pygame.QUIT: exit() elif event.type == pygame.MOUSEBUTTONDOWN: if render.one_step(): result = gomoku.get_chess_result() else: continue if result != BoardState.EMPTY: break if hparams['enable_ai']: ai.one_step() result = gomoku.get_chess_result() else: render.change_state() else: continue render.draw_chess() render.draw_mouse() if result != BoardState.EMPTY: render.draw_result(result) pygame.display.update()