![見出し画像](https://assets.st-note.com/production/uploads/images/98627946/rectangle_large_type_2_b2fbf744ab7c7a3bcd7e1890a1ba7580.jpeg?width=800)
【WEBアプリ】 宝探しゲーム
第4回は、宝さがしゲームを作っていきます。
![](https://assets.st-note.com/img/1677045684612-Msbgckr2lF.png?width=800)
今回は、9つある宝箱の中から、宝を探すシンプルなゲームです。
1. 初期データのダウンロード
① 以下のURLにアクセス
https://drive.google.com/drive/folders/1wQWVKcuBR-7fiVac7ZzEKbkcjnEPcYC8?usp=sharing
② 宝探しゲーム 教材.zip をダウンロード
③ ダウンロードにあるZipファイルを解凍。
【Zipファイルの解凍方法】
Macの場合、Zipファイルをダブルクリック
Windows の場合、わからない場合は、以下のサイトを見る
④
の「基本的なはじめ方」を参考に準備する。
2. 表の作成
①1x1の表を作成
![](https://assets.st-note.com/img/1677046218613-FMGtNJqgSA.png?width=800)
![](https://assets.st-note.com/img/1677057765203-SipH1PFtqj.png?width=800)
chromeで開くときは、index.htmlのファイルをひらこう
![](https://assets.st-note.com/img/1677046231537-4mQxC3I9gn.png?width=800)
②宝箱の画像サイズを変更
![](https://assets.st-note.com/img/1677046270975-bTfKRkrPPk.png?width=800)
![](https://assets.st-note.com/img/1677057797886-Esypk8gNP9.png?width=800)
![](https://assets.st-note.com/img/1677046287527-Ussajrh1G4.png?width=800)
③3x3の表に拡張
![](https://assets.st-note.com/img/1677046364027-gBLbuRYhI2.png?width=800)
![](https://assets.st-note.com/img/1677057828627-QndQV9pnpU.png?width=800)
![](https://assets.st-note.com/img/1677046375819-iEdxUnskDG.png?width=800)
【table / tr / tdタグとは】
<table>
<tr>
<td> [表の中身] </td>
<td> [表の中身] </td>
</tr>
<tr>
<td> [表の中身] </td>
<td> [表の中身] </td>
</tr>
</table>
と表す。
tableタグは、全体の表のこと、
trタグは列、
tdタグは列の中のひつ一つの四角(セル)のことを表している。
イメージは以下の通り
![](https://assets.st-note.com/img/1708785005591-8lrtcVQREe.png?width=800)
3. 宝箱のクリックを検出しよう
①クリックされたら、consoleを表示
![](https://assets.st-note.com/img/1677046453428-vWEyFsDN2F.png?width=800)
![](https://assets.st-note.com/img/1677046500524-kA3izYpht4.png?width=800)
![](https://assets.st-note.com/img/1677057870063-m2O4he0kKS.png?width=800)
![](https://assets.st-note.com/img/1677057873481-bEP9vV7Rf8.png?width=800)
![](https://assets.st-note.com/img/1677046537069-OIs5Band9S.png?width=800)
② どの箱をクリックされたかわかるように
![](https://assets.st-note.com/img/1677046640895-G3gtphvNLT.png?width=800)
![](https://assets.st-note.com/img/1677046676137-hjViu3mEZr.png?width=800)
【引数とは】
通常は、testという関数を呼ぶ時は、
main.jsで、test(); もしくはボタンなどに、onclick="test()"
と付ける。
そして、
main.jsで、
function test(){
内容…
}
と書く。
しかし、例えば、1-100までの数字が書かれたボタンが100個ありそれぞれのボタンが押されると、その数字をalertしたいとき、functionを100個作るのはめんどくさい。
そこで、functionを呼び出す時に、ある程度の情報(今回で言うとボタンに書かれた数字)を一緒に渡せるようにするのが引数。
今回の場合、onclick="openBox(0)"というのは、openBoxという関数を呼ぶときに、0という数字を一緒に渡していることを示す。この()の中にある数字は、numという変数(通常はletを用いて初期定義する)に保存されるイメージだ。
![](https://assets.st-note.com/img/1677057908575-WueoBqBth2.png?width=800)
![](https://assets.st-note.com/img/1677057912159-WsjWLrdBue.png?width=800)
![](https://assets.st-note.com/img/1677046703435-QRVeaUz6j0.png?width=800)
③ 全ての宝箱で動くようにする
![](https://assets.st-note.com/img/1677046793004-RiVHuzBifc.png?width=800)
![](https://assets.st-note.com/img/1677057980158-MHj9DYsbi5.png?width=800)
![](https://assets.st-note.com/img/1677057983526-SOLn1X6zh6.png?width=800)
![](https://assets.st-note.com/img/1677046839136-MmgN5qdRc9.png?width=800)
4. 当たりの宝箱
【TRY】 0から9までのランダムな整数を、atari0 とatari1に入れよう。
![](https://assets.st-note.com/img/1677047456349-2pvKuO1Fr5.png?width=800)
※できるだけ、解答を見ずにやってみよう。
【解答】 0から9までのランダムな整数を、atari0 とatari1に入れよう。
![](https://assets.st-note.com/img/1677047072616-rnVuVJXOJq.png?width=800)
![](https://assets.st-note.com/img/1677047115308-8HsDXOUnED.png?width=800)
![](https://assets.st-note.com/img/1677058127238-8pSIegXmKx.png?width=800)
![](https://assets.st-note.com/img/1677058131837-zL6weyaXyO.png?width=800)
![](https://assets.st-note.com/img/1677047135093-jWBlf2uLrX.png?width=800)
【onload】
onloadとは、画面が読み込まれた時(リロードされたタイミング)で関数を呼ぶことを示す。
onclickはクリックするたびに呼ばれるが、onloadは最初に1回だけ呼ばれ、その後リロードしない限り関数は呼ばれない。
② あたった場合にアラートを表示
![](https://assets.st-note.com/img/1677047537431-LpSTLGRCPX.png?width=800)
![](https://assets.st-note.com/img/1677058158521-5OMBHbRzJt.png?width=800)
![](https://assets.st-note.com/img/1677047379709-fp1dnnlEir.png?width=800)
【「かつ」と「または」】
if文を使用するとき、「numberは10より大きい」という条件と「numberは5より小さい」という条件の2つがあった時、
二つの条件の両方を満たすこと(「かつ」)を
if (number > 10 && number < 5){..
と表す。
また、二つの条件のいずれか片方を満たすこと(「または」)を
if (number > 10 || number < 5){..
と表す。
また、これらは、
if (number > 10 || number < 5 || number != 3){..
など3個以上の条件で使用することもでき、
if (条件A && (条件B || 条件C)){…
意味:条件Aを満たして、かつ、条件BかCのいずれかを満たす。
のように、()を用いて優先を決めることもできる。
③当たりの時に、お宝の画像を表示
![](https://assets.st-note.com/img/1677047709993-TPYvHEyam7.png?width=800)
![](https://assets.st-note.com/img/1677047693236-KTdCh4XB65.png?width=800)
![](https://assets.st-note.com/img/1677047585763-nczW4ghtLb.png?width=800)
![](https://assets.st-note.com/img/1677058198267-MTGLbqlEwQ.png?width=800)
![](https://assets.st-note.com/img/1677047991674-o1F9D0Bkyy.png?width=800)
【画像の変更 .src = 】
画像の場所を指定するとき、HTML上で、
<img src="img/apple.png" id="food_img">
と表すが、ボタンを押した時に、その画像を変更したい時などに、
document.getElementedById("その画像のID名").src = "新しい画像の場所";
例:document.getElementedById("food_img").src = "img/orange.png";
と書くことによって違う画像に変更することができる。
5. ハズレの宝箱
① 当たりでない時に、空の宝箱の画像を表示しよう
![](https://assets.st-note.com/img/1677049080928-8o7FoF08DX.png?width=800)
![](https://assets.st-note.com/img/1677058300147-WO1Tn45Bl5.png?width=800)
![](https://assets.st-note.com/img/1677049102327-oH3RQ3Titu.png?width=800)
【条件分岐】
もし、条件Aなら、実行Aする、そうでなく、条件Bなら、実行Bする、どれもない時は、実行Cするというコードを、
if (条件A){
実行A
}else if (条件B){
実行B
}else{
実行C
}
と書く。
途中に、else if がなくてもelseを使うことができる。
6. 宝箱を開けられる回数に上限をつけよう
① 残りの回数の文字を作成
![](https://assets.st-note.com/img/1677049259680-mY6vSjelI6.png?width=800)
![](https://assets.st-note.com/img/1677058370024-2WKDpRDmrs.png?width=800)
![](https://assets.st-note.com/img/1677049298515-l4BJmBDh3h.png?width=800)
② 残り回数が変わるようにする
![](https://assets.st-note.com/img/1677049380208-8uUb808ZnK.png?width=800)
![](https://assets.st-note.com/img/1677061676848-j8QP4AY3qb.png?width=800)
【TRY】 残り回数を表示しよう
ユーザーは宝箱を開けるチャンスが2回あるようにしよう。
宝箱がクリックされたときに、
1. openNumを1減らす
2. nokoriCountNumのidを持つテキストをopenNumに変更する
※できるだけ、解答を見ずにやってみよう。
わからなかった、初回のテキストを参考にしてみよう。
【解答】 残り回数を表示しよう
![](https://assets.st-note.com/img/1677049702093-pNh5Q5ucDD.png?width=800)
![](https://assets.st-note.com/img/1677049485387-hOsDm5Vr2f.png?width=800)
③ 残りの回数が0未満にならないようにしよう
![](https://assets.st-note.com/img/1677049734046-laZrVD6AUw.png?width=800)
![](https://assets.st-note.com/img/1677058472920-FvOigPPuul.png?width=800)
![](https://assets.st-note.com/img/1677049762486-CswFDMqz3S.png?width=800)
7. 成功画面へ移動(遷移)
WEBサイトやアプリなどで、別のページに移動することを、
別のページに「遷移」する。
というよ。覚えておこう。
① 開けてから1秒後に、成功画面に行くようにしよう
![](https://assets.st-note.com/img/1677050112292-y5QyuVZUlw.png?width=800)
![](https://assets.st-note.com/img/1677050157981-f4Gz3kXpdZ.png?width=800)
![](https://assets.st-note.com/img/1677058487160-Z7Pbk4iC0R.png?width=800)
![](https://assets.st-note.com/img/1677050234211-1hMPZvHdhG.png?width=800)
今回はsetIntervalではなく、setTimeoutを使っている。
【setIntervalとは】
setInterval(〇〇〇, ××);
もしくは
setInterval("〇〇〇()", ××);
と書いて、関数〇〇〇()を××ミリ秒ごとに呼び出すことを意味する。
ミリ秒…1/1000秒のこと。
【setTimeoutとは】
setTimeout(〇〇〇, ××);
もしくは
setTimeout("〇〇〇()", ××);
と書いて、関数〇〇〇()を××ミリ秒後に1回だけ呼び出すことを意味する。
ミリ秒…1/1000秒のこと。
つまり、違いは、1回だけ呼ばれるか、定期的にずっと呼ばれ続けるかである。
【画面遷移】
プログラミングでは、ユーザーが見える画面を移動されることを画面を遷移するという。
普段はindex.htmlを開いているが、今回のように、sucsess.htmlに画面を遷移させたい時、
location.href = "遷移させたいhtml";
と書く。
② 成功画面を作っていこう
![](https://assets.st-note.com/img/1677049935388-2VbbueNEQ3.png?width=800)
![](https://assets.st-note.com/img/1677049985043-69ekcBXLkH.png?width=800)
![](https://assets.st-note.com/img/1677058503323-HgdITobTb2.png?width=800)
![](https://assets.st-note.com/img/1677050032910-U0ovNaYHtS.png?width=800)
③ リトライボタンを押したら、戻るようにしよう。
![](https://assets.st-note.com/img/1677050308394-5Q2P1PDYHj.png?width=800)
![](https://assets.st-note.com/img/1677050347239-0J9NMw9Xq3.png?width=800)
![](https://assets.st-note.com/img/1677058515154-KIMqxYIRQW.png?width=800)
![](https://assets.st-note.com/img/1677050387538-aLe2qslo33.png?width=800)
8. 失敗画面への遷移(移動)
① 当たりが出たかどうか判定しよう
ここでは、前回使った、フラグ変数を使うよ。
フラグ変数とは
false (「偽」という意味)、true (「真実」という意味) のどちらかで常に表される。
例えば、「成人しているか、いないか」「好きかどうか」など、「はい」か「いいえ」で答えられる項目を保存しておくのに使う。
わからない人は、前回のテキストを振り返ろう。
![](https://assets.st-note.com/img/1677050504469-hZX8pPZ5sn.png?width=800)
![](https://assets.st-note.com/img/1677050471249-ODMqcBI6Lr.png?width=800)
![](https://assets.st-note.com/img/1677050626130-lqDgwzjzDy.png?width=800)
![](https://assets.st-note.com/img/1677058526309-BzoYa0ZIXa.png?width=800)
![](https://assets.st-note.com/img/1677050643214-Y7nANc9WPh.png?width=800)
② 失敗ページを作ろう
![](https://assets.st-note.com/img/1677050765391-sOFSPBUZRm.png?width=800)
![](https://assets.st-note.com/img/1677058542557-ZcoFexHICW.png?width=800)
![](https://assets.st-note.com/img/1677050814890-xXzrImJJmU.png?width=800)
③ 結果ページへの遷移は、2回終わってからのみにしよう
![](https://assets.st-note.com/img/1677050898926-KLLEJtdLLt.png?width=800)
![](https://assets.st-note.com/img/1677058550808-rOgbzbwPkA.png?width=800)
![](https://assets.st-note.com/img/1677050914112-JHwlxu6T2c.png?width=800)
9. デザインを調整していこう
① 画面全体の背景色を入れよう
![](https://assets.st-note.com/img/1677051070447-V3hJJZp7zA.png?width=800)
![](https://assets.st-note.com/img/1677058558651-h2ABiTn86M.png?width=800)
![](https://assets.st-note.com/img/1677051084860-ZHn9wpaNR3.png?width=800)
【TRY】 デザインを調整しよう
「残り◯回」の文字
・文字色 white
・上の余白30px
・文字の大きさ 30px
残り「2」回の数字
・文字の大きさ50px
リセットボタン
・横幅200px
・縦幅70px
・文字の大きさ22px
・文字の色 black
・背景色 white
・枠線なし
「枠線なし」は以下のように書くよ。
border: none;
※できるだけ、解答を見ずにやってみよう。
【解答】 デザインを調整しよう
![](https://assets.st-note.com/img/1677051357941-cMufraNhV5.png?width=800)
![](https://assets.st-note.com/img/1677058715425-nWaq7AZT2Z.png?width=800)
![](https://assets.st-note.com/img/1677051383215-ptJtpaNmXn.png?width=800)
![](https://assets.st-note.com/img/1677051402418-pqMTkDpe32.png?width=800)
![](https://assets.st-note.com/img/1677051425510-oK24UGsdZL.png?width=800)
② 表を中央に寄せよう
![](https://assets.st-note.com/img/1677051458091-X13uOBNGWa.png?width=800)
![](https://assets.st-note.com/img/1677058731044-rxTOROX0q2.png?width=800)
![](https://assets.st-note.com/img/1677051472179-LczPmXKJlE.png?width=800)
表を中央に寄せる方法
左右のmargin(余白)を両方ともautoにすると、真ん中によるよ。
【marginの設定方法】
margin-top: 10px; (上の余白)
margin-bottom: 10px; (下の余白)
margin-right: 10px; (右の余白)
margin-left: 10px; (左の余白)
margin: 20px 40px; (上下の余白が20px + 左右の余白が40px)
margin: 20px 40px 30px;
(上の余白が20px + 左右の余白が40px + 下の余白が30px)
margin: 20px 40px 30px 10px;
上の余白が20px + 右の余白が40px + 下の余白が30px + 左の余白が10px
10. 完成
![](https://assets.st-note.com/img/1677051472179-LczPmXKJlE.png?width=800)
これで完成です。
お疲れ様でした。
11. 解答データ
① 以下のURLにアクセス
https://drive.google.com/drive/folders/1BVQqkWrx4nIhZA8WTFfHLWgX2JjgJ2CY?usp=sharing
② 宝探しゲーム 解答.zip をダウンロード
12. 次回予告
次回は、OXゲームを作成します。
お楽しみに。
OXゲーム