HTML/JavaScript

子供と作ろう!神経衰弱ゲーム【HTML/JavaScript】

先日の長期休暇で子供(中学生)から嬉しいリクエストがありました。
「ゲームを作ってみたい!」というリクエストを受け、子供と楽しく作れるゲームを一緒に実装しました。

その時の教えた流れや、開発言語・ゲーム内容の選定についてご紹介いたします。

 

開発言語を選定

子供と話していると、以下をイメージしていたようでした。

  • パソコンでもスマホでも動かしたい
  • ゆくゆくの拡張は自分で行い、「オリジナルのゲーム」を作りたい
  • スマホにインストールして友達に見せたいわけでは無い

条件を満たす言語として、「HTML/JavaScript」を選定!
言語の難易度的にもちょうど良く、すぐに動きを確認できるため理解もしやすいかと思いました。

 

ゲームの内容

一番悩んだのが「ゲームの内容」です。
オリジナリティを出さないと条件に合わなくなりますし、かといって複雑なプログラミングはできません。

じゃんけん、オセロ、テトリス・・・色々考えましたが、どれもピンと来るものがなく、
最終的に「神経衰弱ゲーム」になりました。

自分の「推し」をカード表の画像にすれば、オリジナリティも出せますし、
枚数を増やして難易度を上げることもできるため子供でも拡張できます。

SANACHAN
SANACHAN
結局、「推し」を絡めると即決でした(笑)

 

全体構成

神経衰弱ゲームは、以下のようなファイル構成で開発しました。

 ファイルリスト
/
|- img/
|    |- 0.jpg ~ 4.jpg
|    |- back.jpg
|- index.html
|- sample.js

 

HTMLとはどんなもの?

ここからはどのように子供に教えていったのか、教え方のポイントを紹介します。
先ずはHTMLからです。ブラウザで実際に表示しながら記述していきました。

文法

HTML の文法は、以下のように伝えると理解しやすいようでした。

  • 「タグ」と呼ばれるマーカーで文字を囲うことにより記述(「開く」タグ~「閉じる」タグ)
  • 「ヘッダー」と「ボディ」に分かれており、それぞれ使えるタグが決まっている
  • 位置・色などのスタイルはCSSで定義する

以上の3点だけです。
以降、使用するタグの意味などを調べながら説明していきました。

SANACHAN
SANACHAN
今回は、6種類ほどしかタグを使用しません。

 

コードと画面の対応

ヘッダー

先ずはヘッダー部分です。

2行目は「ここから HTML で書きますよ」というおまじないとだけ伝えました(笑)
3行目は「このゲームのタイトル」で、ブラウザの「タブ」に表示されることを一緒に確認。

ボディ

今回使用する div タグと img タグを使って、この HTML がどのように表示されるかを
一緒にブラウザで確認しながらタグとエレメントとの紐づけを理解させます。

img タグを含む div をコピペすることで、簡単に画像を羅列できることも教えます。

SANACHAN
SANACHAN
Chromeのインスペクター機能を使うと、より理解しやすいようでした。

 

CSSでスタイリッシュに!

次にスタイルを記述するCSSについてです。

先ほど羅列したカードの裏面の画像は、CSSで「float: left」を指定しないと縦並びになります。
CSSでは、以下のようなポイントを教えました。

  • CSS はスタイルを記述できる
  • ID と CLASS という考え方がある
  • HTML ファイルに直接記述したり、別のファイルで記述して読込むことができる

 

先ほど記述した HTML のヘッダーに CSS を書き、以下のようにしてカードを並べます。

ここでは、以下のポイントについて実感してもらいます。

  • 座標の計算が必要になること
  • background-image を利用すれば img タグが不要になる場合があること
  • 手書きだとカードを並べる冗長な記述が面倒なこと
SANACHAN
SANACHAN
最後の「面倒」という感覚をもってもらうことがポイント。

 

JavaScriptで動きを付ける

最後は JavaScript で動きを付けていきます。
神経衰弱ゲームを作っているので、ここが一番の肝になります。

SANACHAN
SANACHAN
そして、一番説明が難しい部分でもあります。

 

カードを並べる

先ほど「面倒」と体感した部分の自動化から始めます。

SANACHAN
SANACHAN
ここで「for ループ」について学びます。

 

カードをシャッフル

最初の for ループで、配列に 0~4 の数字を 2 つずつ格納します。
shuffle という関数を用意して中身をシャッフルし、カード1枚を表示する div の number にセット。
後ほど、この number に従って表の画像をセットします。

シャッフルのアルゴリズムはネットで検索し、ここでは「配列要素の入れ替え方」だけを教えます。

 

クリック動作の追加

最後の仕上げ、カードをクリックした際の動作を実装します。
先ずは、クリックした際にカードの表面を表示する動作を追加します。

先ほどカードの div エレメントに保存した number を使って、
innerHTML を使って内部に img タグのエレメントを作成します。

 

更にここでは、

  • 1枚目と2枚目の区別
  • 1枚目と2枚目が一致していた場合の動作
  • 1枚目と2枚目が一致していなかった場合の動作

を実装する必要があります。条件分岐 if 文を教えます。

SANACHAN
SANACHAN
タイマーを使って一致判定を確定させています。

 

完成したプログラム

 

おわりに

いかがでしたでしょうか。

唐突なリクエストで作り始めたゲームですが、カード表の画像を「推し」にすることで
ゴールに向かって一緒に楽しめました。

SANACHAN
SANACHAN
説明や準備を含めてざっと、6時間くらいでした。

 

こちらの記事もよく読まれています

  • この記事を書いた人
  • 最新記事
SANACHAN

SANACHAN

「生涯一エンジニア」を掲げ、大手グローバル企業でSE/PGとして8年勤め、キャリアアップ転職した現役のエンジニアです。世にあるメジャーな全プログラム言語(コボル除く)を自由に扱えます。一児の父。自分のため、家族のため、日々勉強してます。システムエンジニア、プログラミングに関する情報を蓄積している雑記帳です。

-HTML/JavaScript
-, , ,