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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

967閲覧

PHPでの三目並べ(CPU vs CPU)

ENEOS_7

総合スコア1

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/07/30 05:56

前提

phpで三目並べを実装しようとしています。

実現したいこと

<条件>
・3×3マスのマスの3目並べ、ループ処理を行う
・石の置き場所はrand関数でランダムに配置する
・先攻はx
・盤面のデータは '', 'x', 'o' にそれぞれstyle属性が指定してあるので、これらを出力すると自ずと盤面が出来上がる(例:最初の一手目は1箇所のみ 'x'でそれ以外が '' になる)
・毎回3×3の出力は実施(最短で勝負が決まっても5回盤面を出力させる⇨勝負の数だけ盤面を出力)
・いずれかが勝つまでの経過を表示し、勝った時点で break させて勝った方を出力する(例:xの勝ち)
・引き分けの場合は引き分けと表示させる

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

私の考えとしては二次元配列を用いて9箇所石を打てる座標を作っておき、一手目は1箇所のみxで他は ' '、二手目は xとoが1箇所ずつで他は ' '、、、以下繰り返し

と処理を行なって勝敗判定をつけるというものです。
勝敗判定については勝敗がつくのは最短でも5手目からなので5手目からでいいのかなとも思っております。

今の段階で分からないこと
・randを用いて石を打つという動作においてどうやって石を打つのか
・勝敗判定のつけ方(勝敗の答えを何パターンか用意しておけばいいのか、と考えましたが不安です)
・石をx と o で交互に打つ必要があるので、その交互のやり方

また9箇所石を打てる座標を作るというのは以下のコードで実装しようとしていますが大丈夫そうでしょうか?

$bord = [
["0","1","2"],
["3","4","5"],
["6","7","8"]
];

PHP

1ソースコード 2

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

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

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

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

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

guest

回答1

0

ベストアンサー

私の考えとしては二次元配列を用いて9箇所石を打てる座標を作っておき

二次元配列でもいいし今後を考えればそのほうが望ましいですが、
3x3程度なら普通の配列でも問題ないので判定に悩むならもとりあえず普通の配列でもいいかもしれません。

randを用いて石を打つという動作においてどうやって石を打つのか

randで値を取得してbord配列の取得した値に相当する場所に〇や×を代入すればいいと思います。
すでに置かれている場合はもう置けないので置かれているか(すでに〇や×が代入されているか)どうかを確認して
代入済みの場合はもう一度randで値を取得しなおす必要があります。

勝敗判定のつけ方(勝敗の答えを何パターンか用意しておけばいいのか、と考えましたが不安です)

例えば配列の0と4と5の部分の値が同じかどうかをチェックするというのを8パターン確認する形になるかと
それだけだとまだ置かれていない(空文字=``の)ラインがそろったと判定してしまうので配慮する必要があります。

石をx と o で交互に打つ必要があるので、その交互のやり方

ターン数を変数で記録しておいて(1から開始の場合)奇数なら×偶数なら〇の番と判定するとか(0から開始なら逆)になるでしょうか。

投稿2022/07/30 07:12

RiaFeed

総合スコア2701

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

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

ENEOS_7

2022/07/30 08:11

お忙しいところご回答いただきありがとうございます。 ・randで値を取得してbord配列の取得した値に相当する場所に〇や×を代入すればいい という点なのですが 別の○×を出力させるための関数があって function display($value) { if($value == '') { return '<span class="mark"></span>'; } if($value == 'circle') { return '<span class="mark circle">o</span>'; } if($value == 'cross') { return '<span class="mark white">×</span>'; } } で定義しています。 その際 $x = $bord[rand(0,2)]; $y = $bord[rand(0,2)];  で縦軸と横軸の位置をそれぞれランダムで取得し 空白なら $bord[$y][$x] = display(''); 丸なら  $bord[$y][$x] = display('circle'); ×なら   $bord[$y][$x] = display('cross'); を用いて出力⇨埋まればそれぞれを代入という認識でお間違いありませんか? ・勝敗判定のつけ方 空文字の場合については確かに注意しないと、と意識づけられました。 ・交互のやり方 ターン数の記録は count などを使うと効果的ですか? 度重なる質問で申し訳ありません。
RiaFeed

2022/07/30 08:21

自分ならxとyでそれぞれ乱数を取得しなくても(間違いではないですが)、 0~8の乱数を取得して普通の配列ならそのまま、二次元配列ならyに÷3の商、xに÷3の余りを入れるという形にするかな 代入ですが、その形なら配列の代入は$bord[$y][$x] = 'circle'として、表示は代入後にforループで配列の内容をdisplayしてください。
ENEOS_7

2022/07/30 08:56

なるほど、一から十までありがとうございます。 お陰様で解決できそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問