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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

836閲覧

三目並べについての質問

deasong

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/07/02 14:20

編集2021/07/26 02:42
コード include <iostream> using namespace std; char matrix[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' }; char player = 'X'; void Draw() { system("cls"); cout << "Tic Tac Toe v1.0" << endl; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { void Input() { int a; cout << "Press the number of the field: "; cin >> a; if (a == 1) matrix[0][0] = player; else if (a == 2) matrix[0][1] = player; } else if (Win() == 'O') { cout << "O wins!" << endl; break; } Player(); } system("pause"); return 0; } ```ここに言語を入力 コード

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

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

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

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

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

y_waiwai

2021/07/02 14:23

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
deasong

2021/07/02 14:27

すいません;;初めてこのサイトを使ったもので、ご不便をおかけしました;;修正いたしました。
episteme

2021/07/02 14:53 編集

再帰構造にすることで何がしたいのかがわかりません。目的は?
deasong

2021/07/02 15:10

目的は、人間に負けないAIを装置した三目並べを、再帰構造を利用して作ることです。
thkana

2021/07/02 22:56

初めてなら、一通り使い方には目を通してください。 https://teratail.com/help#posted-otherservice 「やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。」 だそうです。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12245533537
deasong

2021/07/03 09:49

すいません。初めてなもので、重要事項を見逃してしまいました。サイトは、消去しておきますね。
thkana

2021/07/25 22:42

三目並べの質問はその後 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12246356387 にも登場しました。 三目並べは「負けない」ためにはAIなんか不要で、いくつかの手順を踏んで手を選択すればよいだけです。しかし、双方が最善手を選択すると必ず引き分けになるというのもわかっているので勝てもしません。それをネタにした映画もありました。https://ja.wikipedia.org/wiki/ウォー・ゲーム_(映画) 再帰が課題の要件だった、というならまだわかりますが...なぜこのレベルのプログラムでAIとかいう話になるのかしら?
guest

回答2

0

ベストアンサー

質問にはコードが 2つあるし、余計な文章がたくさんあります。
修正してください。

再帰呼出しの必要性がどこにあるんでしょうか?
AI なんかもっと先の話ですね。
少なくとも次のようなコードがまず必要ではないでしょうか?

C++

1#include <iostream> // cin, cout, endl 2#include <cstdlib> // system 3using namespace std; 4 5char matrix[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' }; 6char player = 'X'; 7int cnt = 0; 8 9void Draw() 10{ 11 system("cls"); 12 cout << "Tic Tac Toe v1.0" << endl; 13 for (int i = 0; i < 3; i++) { 14 for (int j = 0; j < 3; j++) 15 cout << matrix[i][j] << " "; 16 cout << endl; 17 } 18} 19 20void Input() 21{ 22 char c; 23 int row, col; 24 while (1) { 25 cout << "Press the number of the field: "; 26 cin >> c; 27 if (c < '1' || c > '9') continue; 28 row = (c - '1') / 3; 29 col = (c - '1') % 3; 30 c = matrix[row][col]; 31 if (c >= '1' && c <= '9') break; 32 } 33 matrix[row][col] = player; 34 cnt++; 35} 36 37void Player() 38{ 39 player = 'X' + 'O' - player; 40} 41 42char Win() 43{ 44 char c; 45 for (int i = 0; i < 3; i++) { 46 c = matrix[i][1]; 47 if (matrix[i][0] == c && c == matrix[i][2]) return c; 48 c = matrix[1][i]; 49 if (matrix[0][i] == c && c == matrix[2][i]) return c; 50 } 51 c = matrix[1][1]; 52 if (matrix[0][0] == c && c == matrix[2][2]) return c; 53 if (matrix[0][2] == c && c == matrix[2][0]) return c; 54 if (cnt < 9) return ' '; 55 return '/'; 56} 57 58int main() 59{ 60 Draw(); 61 while (1) { 62 Input(); 63 Draw(); 64 char c = Win(); 65 if (c == 'X' || c == 'O') { 66 cout << c << " won!\n"; 67 break; 68 } 69 if (c == '/') { 70 cout << "Draw\n"; 71 break; 72 } 73 Player(); 74 } 75 system("pause"); 76}

追記
質問が修正されましたが、コードだけになり、質問がありません。
ちゃんと質問の文章を書いてください。

void player ()から、return '/'; }の部分の意味が、分からないのですが、ここの部分を分かりやすく説明して頂けますでしょうか?

関数Player と関数Win が分からないということですか?

Player は関数で、player は変数だということが分かっていますか?

char player = 'X'; と宣言されているので、
player はグローバル変数で初期値が 'X' です。

関数Player が呼び出されると、player = 'X' + 'O' - player; が実行されます。
変数player の値は 'X' なので、'X' + 'O' - 'X' の計算結果は 'O' です。
それが変数player に代入されます。変数player が 'O' に変更されました。

次に、関数Player が呼び出されると、
変数player の値は 'O' なので、'X' + 'O' - 'O' の計算結果は 'X' です。
それが変数player に代入されます。変数player が 'X' に変更されました。

このように関数Player が呼び出されるたびに、
変数player の値が 'X' と 'O' を交互に繰り返します。

こんなの説明を聞かないと分かりませんか?
どこが難しかったのですか?
Player と player の違いですか?
'X' + 'O' が文字と文字を足しているところですか?

コメント次第では、関数Win の説明をしてもいいですが、
自分で変数 matrix や c の値を確認してコードの意味を理解できませんか?

投稿2021/07/02 17:53

編集2021/07/26 03:16
kazuma-s

総合スコア8224

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

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

deasong

2021/07/03 11:59

kazuma_s様、ご回答ありがとうございます。初心者なもので、色々と理解に足らないことがありまして、すいませんでした。ご回答頂き、本当に感謝しております。参考にして、色々と試して見ます。本当にありがとうございました。
deasong

2021/07/25 14:54

度々すいません。難しい点があり、質問させて頂きます。void player ()から、return '/'; }の部分の意味が、分からないのですが、ここの部分を分かりやすく説明して頂けますでしょうか?理解の足らないところが多々あり、お手数おかけして申し訳ございませんが、返信して頂けますととても助かります。よろしくお願い致します。
kazuma-s

2021/07/25 15:23

質問にはコードが 2つあるし、余計な文章がたくさんあります。 修正してください。 ``` と ``` で挟むのはコードだけです。またはエラーメッセージだけです。 それ以外の文章は ``` の外側に書いてください。
deasong

2021/07/26 02:43

すいません。今修正致しました。
deasong

2021/07/26 03:47

Playerは、関数だったんですね… 関数と変数の概念がまだよく分かっておらず、大変失礼な質問をしてしまい申し訳ございませんでした。
deasong

2021/07/26 03:48

お恥ずかしながら、Playerが関数や変数の意味ではなく、定義としてのただの英単語だと思っておりました…本当にお恥ずかしい限りでございます。
deasong

2021/07/26 03:48

初心者の私でも、理解できるように本当にご丁寧に教えて頂き、本当にありがとうございます。関数winは、自分で調べて考えてみます…ここまでヒントを教えて頂き、概念が分かったので、恐らく理解できると思います。本当にありがとうございます。
guest

0

まず,実行するとcls:command not foundが出てくるのでそこを直す必要があります。

C++

1system("cls");

<cstdlib>ライブラリ関数をincludeする必要があります。

投稿2021/07/02 15:50

wagashi_157

総合スコア51

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

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

deasong

2021/07/02 16:46

wagashi_157さん、回答ありがとうございます。wandboxを利用しているのですが、Includeしてもしなくても、実行はできました、、、おかしい点が多々ありまして、申し訳ございません。アドバイス通り、Includeしてみました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問