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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

6309閲覧

javascriptでマルバツゲームを作っています

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2016/06/13 07:45

編集2016/06/13 07:46

###前提・実現したいこと
javascriptでマルバツゲームを作っているのですが、ボタンを9個使って、初期値はスペースで何も表示せず、1回クリックで〇を表示させ、2回目のクリックで×が表示するようになっています。3回目にはアラートがでて、そこには置けないというメッセージを表示させています。
そこでですが、今まではボタンを9個同じものを並べていたのですが、後々の課題で9個別々に識別できるようにする必要があり変数宣言でnewArray(9)を宣言し、「i」で0~8の数字が入るようにしたのですが、どうにもうまくいきません。

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

2-1.html:15 Uncaught TypeError: Cannot set property 'value' of undefined

###該当のソースコード

<script language="JavaScript"> var check=0; var i = new Array(9); //初期化処理(ボタン表示の初期化) function init() { document.tick.elements[i].value = " "; } function ticktack(botan){ if (tick.elements[i].value == " ") { if (tick.elements[i].value == "○") { tick.elements[i].value = "×"; } else { tick.elements[i].value = "○"; } } else if (tick.elements[i].value == "○") { if (tick.elements[i].value == "○") { tick.elements[i].value = "×"; } else { tick.elements[i].value = "○"; } } else{ alert("そのマスはすでに選ばれています。"); } } </script>

###試したこと
初期化処理をいろいろ変えてみたり、forで回してみたのですが何時間かけても解決できなかったので質問させていただきました。

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

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

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

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

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

takyafumin

2016/06/13 07:50

「後々の課題で9個別々に識別できるようにする必要があり」とありますが、学校か研修の課題なのでしょうか? 回答すべきQAであるか判断したいため、教えてください。
退会済みユーザー

退会済みユーザー

2016/06/13 07:57

はいそうです。この後もまだまだ続きがあり、初めの段階であるため、ヒントだけでもいただけたらと思い質問させていただきました。
takyafumin

2016/06/13 08:20

質問主旨分かりました。回答ありがとうございます。
guest

回答3

0

ベストアンサー

var i = new Array(9);
と書いても0~8の値は作成されませんよ。

document.tick.elements[i].value
と書くとelementsの要素の指定に配列iを丸ごと渡すことになりますよ。

まずは本課題をクリアする前に、「配列」について学んだ方が良いと思います。

投稿2016/06/13 08:02

ttyp03

総合スコア17000

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

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

退会済みユーザー

退会済みユーザー

2016/06/14 02:50

とても良いヒントをいただけたので、時間をかけて少しずつ考えていこうと思います。ご回答ありがとうございました。
guest

0

一般的な3x3のマスの○×ゲームだとすれば、親要素で click イベントハンドラを監視し、event.target で対象の要素ノードを取得するとスマートに書けると思います。

また、個人的には任意の数のマス目(4x4、5x5等)の table 要素を動的に生成出来るようにすると更に良いと思います。
※実装例: createElement, createTextNode, appendChild, insertCell

Re: yuuki2016 さん

投稿2016/06/14 01:44

編集2016/06/14 01:44
think49

総合スコア18189

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

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

退会済みユーザー

退会済みユーザー

2016/06/14 02:52

ご回答ありがとうございます。参考にさせていただきます。
guest

0

同じ学校の人
この方が同じ宿題をまるまるここで質問して全く自分で考えたり調べたりすることなくソースはほぼできています。まる写ししてください。

投稿2016/06/14 01:01

Zuishin

総合スコア28662

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

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

toshi_yama

2016/06/14 01:15

ソースはほぼできている。自分で考えて作ったのですから考えてないとはいえないです。
Zuishin

2016/06/14 01:21

そうですか。それは彼の質問の履歴を各自ご覧になって判断されたらよろしいでしょう。
masaya_ohashi

2016/06/14 01:22

私は「1ステップ進むごとに他人に聞いて、他人に教えられた通りにコピペ」することで完成したものを考えたとは言わないと思います。
toshi_yama

2016/06/14 01:26

申し訳ございません。コメントが浅はかでした。 >それは彼の質問の履歴を各自ご覧になって判断されたらよろしいでしょう。 →そうですね。失礼しました。 >私は「1ステップ進むごとに他人に聞いて、他人に教えられた通りにコピペ」することで完成したものを考えたとは言わないと思います。 →確かにその通りです。 私も2人の課題をみて、先生に聞けとは思いました。
退会済みユーザー

退会済みユーザー

2016/06/14 02:51

私の投稿が原因で、ご迷惑をおかけしてしまい申し訳ありません。基礎から勉強をし直します。ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問