超簡単JavaScriptで作る簡易スロットゲーム

## はじめに
- JavaScriptでスロットみたいなものを作りたかった
- 探したが、組み込むだけで動くようなものが見つからなかった
- 数字がくるくる回るものはあったが、スロットみたいな動きはしない
 
**ということで、作りました。**

時間はかけられないので、公開されているスクリプトを利用しながら足りない動きは自作しました。
それほど、時間をかけず作成できたかと思います。

![slot777.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59645/bfde07e1-2f29-fb13-d976-bc51a67cddde.gif)
SPINでくるくる回り、STOPを押せば、止まります。

## つかったスクリプト
**odmeter.js**
> [JS]数字や文字をクルマの走行距離計のようにぐるぐる回転させて表示するスクリプト -Odometer
[コリス](https://coliss.com/articles/build-websites/operation/javascript/flip-numbers-odometer.html)

## 技術解説

odometer.jsを組み込みます。

```html
<link rel="stylesheet" href="odometer-theme-car.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="odometer.js"></script>
```

htmlの要素は簡単な感じで。

```html
<button type="button" id="spin">SPIN!!</button>
<div class='wrap'>
<table>
    <tbody>
      <tr>
        <td><span class="odometer slot1">9</span></td>
        ・
      </tr>
      <tr>
        <td><button type="button" id="stop1">STOP</button></td>
        ・
      </tr>
    </tbody>
  </table>
</div>
```

odometer.jsは、はじめの数字から、指定した数字にする際に、
くるくる回って、止まるといった動きをします。
はじめの数字は、9。
$('.slot1').html(0);を呼ぶことで、9→8→7→・・・・→0に
くるくる回って、止まります。
ただ、継続して回したいので、そのあとに、$('.slot1').text(9);で、
9に戻して、setTimeout関数で再度実行します。

```js
var slotID1 = 0;

function loop_slot1() {
     $('.slot1').html(0);
     $('.slot1').text(9);
     slotID1 = setTimeout(loop_slot1, 1950);
 }
```

setTimeout(loop_slot1, 1950)の1950は、9→8→7→・・・・→0に至るまでの時間です。
ブラウザを見ながら適当に設定してます。（ブラウザによっては、動きが違うかも）

```js
slotID1 = setTimeout(loop_slot1, 1950);
```

スピンを押すと、スロット開始します。

```js
$('#spin').on('click', function() {
  loop_slot1();
  ・
});
```

ストップを押すと、スロットを止めます。
その際に、ランダムで0〜9の数値を取得し、スロットにセットしています。

```js
$('#stop1').on('click', function() {
  clearTimeout(slotID1);
  var random = Math.floor(Math.random() * 10);
  $('.slot1').text(random);
  $('.slot1').html(random);
});
```

## ソース全文
```html
<!DOCTYPE html>
<link rel="stylesheet" href="odometer-theme-car.css" />
<style>
  .odometer {
    font-size: 40px;
  }
</style>
<script>
  window.odometerOptions = {
    duration: 90000
  };
</script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="odometer.js"></script>

<button type="button" id="spin">SPIN!!</button>

<div class='wrap'>

<table>
    <tbody>
      <tr>
        <td><span class="odometer slot1">9</span></td>
        <td><span class="odometer slot2">9</span></td>
        <td><span class="odometer slot3">9</span></td>
      </tr>
      <tr>
        <td><button type="button" id="stop1">STOP</button></td>
        <td><button type="button" id="stop2">STOP</button></td>
        <td><button type="button" id="stop3">STOP</button></td>
      </tr>
    </tbody>
  </table>

</div>
  
<script>
var slotID1 = 0;
var slotID2 = 0;
var slotID3 = 0;

function loop_slot1() {
     $('.slot1').html(0);
     $('.slot1').text(9);
     slotID1 = setTimeout(loop_slot1, 1950);
 }

 function loop_slot2() {
     $('.slot2').html(0);
     $('.slot2').text(9);
     slotID2 = setTimeout(loop_slot2, 1950);
 }

 function loop_slot3() {
     $('.slot3').html(0);
     $('.slot3').text(9);
     slotID3 = setTimeout(loop_slot3, 1950);
 }

$('#spin').on('click', function() {
  loop_slot1();
  loop_slot2();
  loop_slot3();
});

$('#stop1').on('click', function() {
  clearTimeout(slotID1);
  var random = Math.floor(Math.random() * 10);
  $('.slot1').text(random);
  $('.slot1').html(random);
});

$('#stop2').on('click', function() {
  clearTimeout(slotID2);
  var random = Math.floor(Math.random() * 10);
  $('.slot2').text(random);
  $('.slot2').html(random);
});

$('#stop3').on('click', function() {
  clearTimeout(slotID3);
  var random = Math.floor(Math.random() * 10);
  $('.slot3').text(random);
  $('.slot3').html(random);
});

</script>
```

## おわりに
[作成したソース(GitHub)](https://github.com/taniurakengo1/slot777)
[odometer公式](https://coliss.com/articles/build-websites/operation/javascript/flip-numbers-odometer.html)