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}|')
# +---+---+---+ 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`