コード例 #1
0
ファイル: firstbot.py プロジェクト: f4hy/theaigames_tictactoe
    def best_move(self, board, tleft):
        logging.info("get_move {} {}".format(board, tleft))

        logging.info("winmat {}".format(board.winmatrix()))
        csm = board.canscorematrix()
        logging.info("canscoremat {}".format(csm))

        for sbi in range(9):
            if board.macroboard[sbi] == -1 and csm[self.myid][sbi]:
                scoring_loc = csm[self.myid][sbi]
                logging.info("we can score on board {} loc {}".format(
                    sbi, scoring_loc))
                scoring_move = board.locs_to_move(sbi, scoring_loc)
                logging.info("we can score with move {}".format(scoring_move))
                logging.info("sb\n{}".format(pprint(board.get_subboard(sbi))))
                logging.info("canscore \n{}".format(
                    sb_logic.can_score(board.get_subboard(sbi), self.myid)))
                return scoring_move

        # logging.info("board {}".format(board.get_board()))
        lmoves = board.legal_moves()
        logging.info("lmoves {}".format(lmoves))
        if len(lmoves) < 1:
            logging.error("There is no legal moves")
            for y in range(9):
                for x in range(9):
                    if board.field[y * 9 + x] == 0:
                        return (x, y)

        rm = randint(0, len(lmoves) - 1)
        logging.info("rm {}".format(rm))
        return board.locs_to_move(*lmoves[rm])
コード例 #2
0
    def set_values(self, board):

        values = {(b, l): 0.0 for b in range(9) for l in range(9)}

        win_value = 2000.0
        lose_board_value = -15.0
        score_value = 18.0
        bad_score_value = -12.0
        free_play_value = -18.0
        cats_play_value = 20.0

        center_board_value = 0.5

        #priotize the center
        for i in range(9):
            values[(4, i)] += center_board_value

        # priortize the board that could cause us to win
        masked_macrob = [0 if i < 0 else i for i in board.macroboard]
        canwin = sb_logic.can_score(masked_macrob, self.myid)
        if canwin is not False:
            logging.info("CAN WIN BOARD {}".format(canwin))
            for l in range(9):
                values[canwin, l] += win_value
        # depriortize the board that could cause us to win
        canlose = sb_logic.can_score(masked_macrob, self.oppid)
        if canlose is not False:
            for b in range(9):
                values[b, canlose] += lose_board_value

        # priortize scoring
        csm = board.canscorematrix()
        for b in range(9):
            if csm[self.myid][b] is not False:
                values[b, csm[self.myid][b]] += score_value

        # depriortize him scoring
        for b in range(9):
            if csm[self.oppid][b] is not False:
                for b2 in range(9):
                    values[b2, b] += bad_score_value

        # prioritize letting him play on cats
        catsmatrix = board.catsmatrix()
        for b in range(9):
            if catsmatrix[b] is True:
                for b2 in range(9):
                    values[b2, b] += cats_play_value

        # don't give him free play
        for b in range(9):
            if board.macroboard[b] > 0:
                for b2 in range(9):
                    values[b2, b] += free_play_value

        legal_values = {
            k: v
            for k, v in values.iteritems() if k in board.legal_moves()
        }
        return legal_values
コード例 #3
0
ファイル: scorebot.py プロジェクト: f4hy/theaigames_tictactoe
    def set_values(self, board):

        values = {(b,l): 0.0 for b in range(9) for l in range(9)}

        win_value = 2000.0
        lose_board_value = -15.0
        score_value = 18.0
        bad_score_value = -12.0
        free_play_value = -18.0
        cats_play_value = 20.0

        center_board_value = 0.5

        #priotize the center
        for i in range(9):
            values[(4,i)] += center_board_value

        # priortize the board that could cause us to win
        masked_macrob = [0 if i < 0 else i for i in board.macroboard]
        canwin = sb_logic.can_score(masked_macrob, self.myid)
        if canwin is not False:
            logging.info("CAN WIN BOARD {}".format(canwin))
            for l in range(9):
                values[canwin,l] += win_value
        # depriortize the board that could cause us to win
        canlose = sb_logic.can_score(masked_macrob, self.oppid)
        if canlose is not False:
            for b in range(9):
                values[b,canlose] += lose_board_value



        # priortize scoring
        csm = board.canscorematrix()
        for b in range(9):
            if csm[self.myid][b] is not False:
                values[b,csm[self.myid][b]] += score_value

        # depriortize him scoring
        for b in range(9):
            if csm[self.oppid][b] is not False:
                for b2 in range(9):
                    values[b2,b] += bad_score_value


        # prioritize letting him play on cats
        catsmatrix = board.catsmatrix()
        for b in range(9):
            if catsmatrix[b] is True:
                for b2 in range(9):
                    values[b2,b] += cats_play_value

        # don't give him free play
        for b in range(9):
            if board.macroboard[b] > 0:
                for b2 in range(9):
                    values[b2,b] += free_play_value

        legal_values = {k:v for k,v in values.iteritems() if k in board.legal_moves()}
        return legal_values
コード例 #4
0
    def best_move(self, board, tleft):
        logging.info("get_move {} {}".format(board, tleft))

        # testb = [0, 1, 1, 0, 1, 2, 0, 2, 1]

        # logging.info("testb?!\n{}".format(pprint(testb)))
        # logging.info("test1?! {}".format(sb_logic.can_score(testb, 1)))
        # logging.info("test2?! {}".format(sb_logic.can_score(testb, 2)))
        # exit(-1)

        logging.info("winmat {}".format(board.winmatrix()))
        csm = board.canscorematrix()
        logging.info("canscoremat {}".format(csm))

        values = self.set_values(board)
        logging.info("values {}".format(values))

        best_moves = [
            k for k, v in values.iteritems() if v == max(values.values())
        ]

        logging.info("best moves {}".format(best_moves))

        if len(best_moves) < 1:
            logging.error("There is no legal moves")
            for y in range(9):
                for x in range(9):
                    if board.field[y * 9 + x] == 0:
                        return (x, y)

        rm = randint(0, len(best_moves) - 1)
        logging.info("rm {}".format(rm))
        return board.locs_to_move(*best_moves[rm])
コード例 #5
0
ファイル: scorebot.py プロジェクト: f4hy/theaigames_tictactoe
    def best_move(self, board, tleft):
        logging.info("get_move {} {}".format(board, tleft))

        # testb = [0, 1, 1, 0, 1, 2, 0, 2, 1]

        # logging.info("testb?!\n{}".format(pprint(testb)))
        # logging.info("test1?! {}".format(sb_logic.can_score(testb, 1)))
        # logging.info("test2?! {}".format(sb_logic.can_score(testb, 2)))
        # exit(-1)


        logging.info("winmat {}".format(board.winmatrix()))
        csm = board.canscorematrix()
        logging.info("canscoremat {}".format(csm))

        values = self.set_values(board)
        logging.info("values {}".format(values))

        best_moves = [k for k,v in values.iteritems() if v == max(values.values())]


        logging.info("best moves {}".format(best_moves))

        if len(best_moves) < 1:
            logging.error("There is no legal moves")
            for y in range(9):
                for x in range(9):
                    if board.field[y*9+x] == 0:
                        return (x, y)


        rm = randint(0, len(best_moves)-1)
        logging.info("rm {}".format(rm))
        return board.locs_to_move(*best_moves[rm])