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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

800閲覧

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

yusei0109

総合スコア8

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/08/07 11:21

編集2022/01/12 10:55

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
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ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/08/07 11:24

これではコードが読めないので、質問を編集し、<code>ボタンを押して、出てくる’’’の枠の中にコードを貼り付けてください
yusei0109

2019/08/07 11:43

すみません. 編集しました.
gentaro

2019/08/07 16:51

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

2019/08/07 16:58 編集

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

2019/08/07 17:01

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問