Esempio n. 1
0
def main():
    """最初に実行する主な関数だと思ってくれだぜ☆(^~^)"""

    # 説明を出そうぜ☆(^~^)
    log = Log()
    log.clear()

    # 最初は全部のコマンドを実装できないが、だんだん増やしていけだぜ☆(^~^)
    log.println("""きふわらべの〇×ゲーム

コマンド:
`do 7` - 手番のプレイヤーが、 7 番地に印を付けます。
`go` - コンピューターが次の1手を示します。
`info-off` - info出力なし。
`info-on` - info出力あり(既定)。
`pos` - 局面表示。
`position xfen 3/3/3 o moves 5 1 2 8 4 6 3 7 9` - 初期局面と棋譜を入力。
`undo` - 1手戻します。
`uxi` - 'uxiok tic-tac-toe {protocol-version}' を返します。
`xfen` - 現局面のxfen文字列表示。
""")

    # 初期局面
    pos = Position()

    # info_enable は 'computer_player.py' を実装してから、ここに追加しろだぜ☆(^~^)
    info_enable = True

    # [Ctrl]+[C] でループを終了
    while True:
        # まず最初に、コマンドライン入力を待機しろだぜ☆(^~^)
        line = input()

        # コマンドライン☆(^~^) p は parser の意味で使ってるぜ☆(^~^)
        p = CommandLineParser(line)

        # 本当は よく使うコマンド順に並べた方が高速だが、先に見つけた方が選ばれるので後ろの方を漏らしやすくて むずかしいし、
        # だから、アルファベット順に並べた方が見やすいぜ☆(^~^)
        if p.starts_with('do'):
            p.go_next_to('do ')
            if p.rest != '':
                UxiProtocol.do(pos, p.rest, log)

        # go は 'computer_player.py' を実装してから、ここに追加しろだぜ☆(^~^)
        elif p.starts_with("go"):
            search = Search(pos.friend, pos.pieces_num, info_enable)
            (addr, result) = SearchComputer.go(pos, search, log)
            if addr is not None:
                log.println(
                    f'info result={result} nps={SearchPerformance.nps(search)}'
                )
                log.println(f'bestmove {addr}')
            else:
                log.println('resign')

        # info-off は 'computer_player.py' を実装してから、ここに追加しろだぜ☆(^~^)
        elif p.starts_with('info-off'):
            info_enable = False
        # info-on は 'computer_player.py' を実装してから、ここに追加しろだぜ☆(^~^)
        elif p.starts_with('info-on'):
            info_enable = True

        elif p.starts_with('position'):
            p.go_next_to('position ')
            if p.rest != '':
                pos = UxiProtocol.from_xfen(p.rest, log)
        elif p.starts_with('pos'):
            log.println(pos.pos())
        elif p.starts_with('quit'):
            return
        elif p.starts_with('undo'):
            UxiProtocol.undo(pos)
        elif p.starts_with('uxi'):
            log.println('uxiok tic-tac-toe v20200704.0.0')
        elif p.starts_with('xfen'):
            log.println(UxiProtocol.to_xfen(pos))
        else:
            log.println(f'Debug   | Invalid command=|{p.rest}|')
Esempio n. 2
0
#         +---+---+---+    4 5 6
#         |   |   |   |    1 2 3
#         +---+---+---+
log.println(f'opponent={PositionHelper.opponent(pos)}')

# Step 4.
p = CommandLineParser('Go to the Moon!')
log.println(f"Go to=|{p.starts_with('Go to')}|")
# Go to   =|True|
log.println(f"Goto =|{p.starts_with('Goto')}|")
# Goto    =|False|
log.println(f'p.starts=|{p.starts}|')
# p.starts=|0|
log.println(f'p.rest=|{p.rest}|')
# p.rest  =|Go to the Moon!|
p.go_next_to('Go to')
log.println(f'p.starts=|{p.starts}|')
# p.starts=|5|
log.println(f'p.rest=|{p.rest}|')
# p.rest  =| the Moon!|

# Step 5.
uxi = UxiProtocol()
log.println(f"xfen=|{uxi.to_xfen(pos)}|")
# xfen=|xfen 3/3/3 o|
uxi.do(pos, '2', log)
log.println(pos.pos())
# [Next 2 move(s) | Go x]
#
# +---+---+---+
# |   |   |   | マスを選んでください。例 `do 7`