前提・実現したいこと
ここに質問の内容を詳しく書いてください。
pythonで三目並べの人対CPUを作っている途中です.
人対人から人対CPUのプログラムに変更したいのですがソースコードをどのように変更したらよいですか?
発生している問題・エラーメッセージ
なし
該当のソースコード
python
1def check_decision(coordinate_map): 2 3 candidates = [2**i for i in range(9)] 4 decision_coordinates = [] 5 for i in range(3): 6 yoko_first_idx = i*3 7 yoko_last_idx = (i+1)*3 8 yoko_ans = sum(candidates[yoko_first_idx:yoko_last_idx]) 9 decision_coordinates.append(yoko_ans) 10 tate_list = [candidates[i+3*j] for j in range(3)] 11 tate_ans = sum(tate_list) 12 decision_coordinates.append(tate_ans) 13 naname_1_list = [candidates[4*i] for i in range(3)] 14 naname_1_ans = sum(naname_1_list) 15 decision_coordinates.append(naname_1_ans) 16 17 naname_2_list = [candidates[2*(i+1)] for i in range(3)] 18 naname_2_ans = sum(naname_2_list) 19 decision_coordinates.append(naname_2_ans) 20 21 total_val = sum([int(i) for i in coordinate_map]) 22 if total_val in decision_coordinates: 23 return True 24 return False 25 26def marubatu_game(): 27 print('以下の数字で座標を指定してください') 28 text = """ 29 1|2|3 30 ----- 31 4|5|6 32 ----- 33 7|8|9 34 """ 35 print(text) 36 coordinate_list = [str(i) for i in range(1, 10)] 37 candidates = [2**i for i in range(9)] 38 39 player_input = str() 40 player_operations = [] 41 42 computer_input = str() 43 computer_operations = [] 44 45 err_message = '正しい座標を入力する必要があります。' 46 47 turn_user = 0 48 turn_count = 0 49 50 while True: 51 if turn_user == 0: 52 try: 53 mes = 'playerは座標を入力してください' 54 player_input = input(mes) 55 except Exception as e: 56 print(err_message) 57 continue 58 if player_input in coordinate_list: 59 text = text.replace(str(player_input), "o") 60 idx = coordinate_list.index(player_input) 61 coordinate_list[idx] = "o" 62 63 player_operations.append(candidates[idx]) 64 print(text) 65 if check_decision(player_operations): 66 print('playerの勝ち') 67 break 68 else: 69 print(err_message) 70 continue 71 turn_user = 1 72 turn_count += 1 73 else: 74 try: 75 mes = 'コンピュータが座標を入力' 76 computer_input = input(mes) 77 except Exception as e: 78 print(err_message) 79 continue 80 if computer_input in coordinate_list: 81 text = text.replace(str(computer_input), "x") 82 idx = coordinate_list.index(computer_input) 83 coordinate_list[idx] = "x" 84 computer_operations.append(candidates[idx]) 85 print(text) 86 if check_decision(computer_operations): 87 print('コンピュータの勝ち') 88 break 89 else: 90 print(err_message) 91 continue 92 turn_user = 0 93 turn_count += 1 94 if turn_count == 9: 95 print("引き分けです") 96 break 97 98marubatu_game() 99 100```### 試したこと 101 102ここに問題に対して試したことを記載してください。 103 104### 補足情報(FW/ツールのバージョンなど) 105 106ここにより詳細な情報を記載してください。
これではコードが読めないので、質問を編集し、<code>ボタンを押して、出てくる’’’の枠の中にコードを貼り付けてください
すみません.
編集しました.
CPUはどういうアルゴリズムで手を決めるつもりなんでしょう?
ただのランダムだったら開いてるところ探して終わりだと思いますけど。
ランダムではなく,最善の手を打てるアルゴリズムです.
ソースコードはどのようになりますか?
ではその「最善の手を打てるアルゴリズム」を文章で良いので質問文に記載してください。
また、自分で考えてわかる範囲のコードも提示したほうが良いです。(わからない点を正確に伝えるため)
全部考えてソースコード作ってくれ、というのは「丸投げの質問」とみなされるため、ガイドライン違反になります。
https://teratail.com/help/avoid-asking
「何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。
問題や質問は実際に調査や作業に取り組み、具体的なところで生まれると考えるためです。
まずは実際に作業に取り組み、つまづいたところで投稿をしてみてください。」
あなたの回答
tips
プレビュー