質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.62%

三目並べの人対CPUのソースコード

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 233

yusei0109

score 0

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
pythonで三目並べの人対CPUを作っている途中です.
人対人から人対CPUのプログラムに変更したいのですがソースコードをどのように変更したらよいですか?

発生している問題・エラーメッセージ

なし

該当のソースコード

def check_decision(coordinate_map):

   candidates = [2**i for i in range(9)]
   decision_coordinates = []
   for i in range(3):
       yoko_first_idx = i*3
       yoko_last_idx = (i+1)*3
       yoko_ans = sum(candidates[yoko_first_idx:yoko_last_idx])
       decision_coordinates.append(yoko_ans)
       tate_list = [candidates[i+3*j] for j in range(3)]
       tate_ans = sum(tate_list)
       decision_coordinates.append(tate_ans)
   naname_1_list = [candidates[4*i] for i in range(3)]
   naname_1_ans = sum(naname_1_list)
   decision_coordinates.append(naname_1_ans)

   naname_2_list = [candidates[2*(i+1)] for i in range(3)]
   naname_2_ans = sum(naname_2_list)
   decision_coordinates.append(naname_2_ans)

   total_val = sum([int(i) for i in coordinate_map])
   if total_val in decision_coordinates:
       return True
   return False

def marubatu_game():
   print('以下の数字で座標を指定してください')
   text = """
   1|2|3
   -----
   4|5|6
   -----
   7|8|9
   """
   print(text)
   coordinate_list = [str(i) for i in range(1, 10)]
   candidates = [2**i for i in range(9)]

   player_input = str()
   player_operations = []

   computer_input = str()
   computer_operations = []

   err_message = '正しい座標を入力する必要があります。'

   turn_user = 0
   turn_count = 0

   while True:
       if turn_user == 0:
           try:
               mes = 'playerは座標を入力してください'
               player_input = input(mes)
           except Exception as e:
               print(err_message)
               continue
           if player_input in coordinate_list:
               text = text.replace(str(player_input), "o")
               idx = coordinate_list.index(player_input)
               coordinate_list[idx] = "o"

               player_operations.append(candidates[idx])
               print(text)
               if check_decision(player_operations):
                   print('playerの勝ち')
                   break
           else:
               print(err_message)
               continue
           turn_user = 1
           turn_count += 1
       else:
           try:
               mes = 'コンピュータが座標を入力'
               computer_input = input(mes)
           except Exception as e:
               print(err_message)
               continue
           if computer_input in coordinate_list:
               text = text.replace(str(computer_input), "x")
               idx = coordinate_list.index(computer_input)
               coordinate_list[idx] = "x"
               computer_operations.append(candidates[idx])
               print(text)
               if check_decision(computer_operations):
                   print('コンピュータの勝ち')
                   break
           else:
               print(err_message)
               continue
           turn_user = 0
           turn_count += 1
       if turn_count == 9:
           print("引き分けです")
           break

marubatu_game()

 試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • gentaro

    2019/08/08 01:51

    CPUはどういうアルゴリズムで手を決めるつもりなんでしょう?
    ただのランダムだったら開いてるところ探して終わりだと思いますけど。

    キャンセル

  • yusei0109

    2019/08/08 01:58 編集

    ランダムではなく,最善の手を打てるアルゴリズムです.
    ソースコードはどのようになりますか?

    キャンセル

  • gentaro

    2019/08/08 02:01

    ではその「最善の手を打てるアルゴリズム」を文章で良いので質問文に記載してください。
    また、自分で考えてわかる範囲のコードも提示したほうが良いです。(わからない点を正確に伝えるため)
    全部考えてソースコード作ってくれ、というのは「丸投げの質問」とみなされるため、ガイドライン違反になります。
    https://teratail.com/help/avoid-asking
    「何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。
    問題や質問は実際に調査や作業に取り組み、具体的なところで生まれると考えるためです。
    まずは実際に作業に取り組み、つまづいたところで投稿をしてみてください。」

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる