JavaScriptで753ゲームをつくります。753ゲームは紙と鉛筆を使って2人で遊びます。紙に書いた棒を消していきます。

ルールは以下のとおりです。

ひとつでも複数でもかまわない
1度に2段以上にまたがってはならない
すでに消されている所を消すことはできない
1度に消す領域は連続していること
パスはできない

一般的には最後の1個を消した方が負けなのですが、ここでは最後の1個を消したほうが勝ちとします。

HTML部分

まずHTML部分を示します。

style.css

JavaScript部分

主なグローバル変数を示します。

初期化

セルを生成してクリック時の処理ができるようにイベントリスナを追加します。

未選択のセル(ゲーム開始時はすべて未選択)にイメージを描画します。イメージは7個の行、5個の行、3個の行で変えてあります。

イメージを追加する関数を示します。

セルをクリックしたときの処理

セルをクリックしたときの処理を示します。

自分の番であれば複数選択をすることができるのですが、同じ行(上から何段目か?)のものでなければならない、横に連続していなければならないというルールがあります。

そこでまず引数の要素が何行何列目にあるそのセルなのかを調べて結果を返すGetCellPosition関数を定義します。

クリックで一つ目のセルが選択されたらその行をグローバル変数に格納します。以降はその行以外のものが選択されたときは不正な選択として扱います。

また選択された列もグローバル変数の配列に格納します。こうすることで本当に選ぶことができるものかを判定しています。新たに選択された列の前後の番号が配列に格納されているなら選択可能です。正しく選択された場合はセルのなかに描画されているイメージをクリアします。

もし不適切な選択をした場合は警告音を鳴らしてメッセージを表示します。また選択されたものがキャンセルされるかもしれません。そのときにもとに戻せるように選択された要素を配列に格納しておきます。

選択の取り消しと確定

[キャンセル]がクリックされたときの処理を示します。

この場合はクリアしたセルのイメージを復元します。どのイメージを復元するかはselectedRowに格納されている値からわかります。

[OK]がクリックされたときの処理を示します。

最低ひとつは選択していないといけないので確認します。確認できたらコンピュータ側の着手をします。

コンピュータ側の着手

コンピュータ側の着手は今回はランダムに選択するものとします。まず隣り合っている未選択のセルのグループを取得します。あとは乱数でどのグループから?選択の開始はグループの先頭から何番目か?何個選択するのか?を決めます。ただしグループがひとつしかない場合はそれを丸ごと選択して勝利することにします。

コンピュータ側に着手させる処理を示します。乱数を生成してどのグループのどの部分から何個選択するのかを決めて選択する処理をおこなっています。ただしグループがひとつしかない場合はそれを丸ごと選択して勝つようにしています。

勝敗決着後の処理

勝敗を表示して効果音を鳴らします。また再挑戦用のボタンを表示するとともにそれ以外のボタンを非表示にします。

再挑戦用のボタンを非表示するとともに操作用のボタンを表示します。そしてinit関数を呼び出してセルにイメージをセットします。