JavaScriptでスロットマシンをつくります。

HTML部分

最初にHTML部分を示します。スロットの絵柄の部分はcanvasに描画します。スロットを回転させたり停止させるボタンは絶対配置とします。

style.css

グローバル変数と定数

グローバル変数と定数を示します。

ページが読み込まれたときの処理

ページが読み込まれたときにおこなわれる処理を示します。

canvasサイズを調整して背景を黒で塗りつぶします。そのあとイベントリスナを追加して画像ファイルを読み込みと更新処理、金額を表示する処理をおこないます。

イベントリスナを追加する処理を示します。スタートボタンをクリックしたらスロットが回転し、ストップをクリックしたら停止させます。賭け金を設定する部分に所持金以上の値や設定できる値より小さい値を入力したときは自動的に値が修正されるようにします。

画像ファイルを読み込む処理を示します。

所持金を表示と賭け金を設定するテキストボックスの設定をする処理を示します。

更新処理

更新処理を示します。

canvasの背景を黒で塗りつぶし、positions[i]の値を回転速度分だけ増加させます。そしてIMAGE_COUNTの剰余をとります。そのためここには0以上IMAGE_COUNT未満の値が格納されます。そのあとshowImage関数を呼び出して絵柄を描画します。

ストップボタンがクリックされるとstopings[i]がtrueになるので、この場合はspeeds[i]の値を減少させます。ただし0より大きくMIN_SPEEDより小さい値にはならないようにします。回転速度がMIN_SPEEDのときはMath.floor(positions[i])との差がMIN_SPEED以下のときは停止させます。そしてpositions[i] には Math.floor(positions[i])を格納します。

停止したら効果音を鳴らし、3つとも停止した場合はonStoped関数を呼び出して数字がそろっているか調べます。

絵柄を描画する処理を示します。

まず絵柄をcanvasのどの部分に描画するのかを取得する処理を示します。

showImage関数は左からcolNum番目の列の絵柄をcanvasに描画します。このとき第二引数が整数ではない場合は画像ファイルの下側の一部と次の画像の上側の一部を切り取って絵柄を描画します。

スロットが停止したときの処理

スロットが停止したときにおこなわれる処理を示します。

数字がそろっているか調べます。そろっている場合は所持金を増やし、そうでない場合は減らします。所持金が0になったらゲームオーバーです。

スロットの回転の開始と停止の処理

スロットの回転を開始する処理と停止する処理を示します。

回転を開始するときはstopingフラグをfalseにして回転速度をMAX_SPEEDにします。そしてスタートボタンを非表示にします。停止させるときは該当する部分のstopingフラグをtrueにします。すると回転速度が減速し停止します。