タスクシステムで始めるカジュアルゲーム開発

こんにちわ。ジークスで開発をしている酒井といいます。

ゲームを作るのが好きで、たまに初心者の人を集めて一緒にゲームを作る活動をしています。

みんな最初はモチベーション高いんですが、環境構築やツールの設定とか、準備が色々必要だと、その間に疲れてきちゃうので、始めてすぐにゲームの動きをいじれるようなライブラリを作って試しています。

# 開発環境
今日はCodePenに環境を用意しました。
ここをいじって、だんだんゲームっぽくしていきます。

<p class="codepen" data-height="300" data-default-tab="js,result" data-slug-hash="vYbwRBr" data-editable="true" data-user="oosamanet" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/oosamanet/pen/vYbwRBr">
  unitaro.js: starter kit1</a> by sakai yoichi (<a href="https://codepen.io/oosamanet">@oosamanet</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>


# １：タスクをいじってみる
今回は四角しか表示できないゲームライブラリを使います。
タスクを１つ作るごとにゲーム画面には四角が生まれます。
タスクの中身をいじっていく事で、四角が動いたり、別の四角を生み出したりといった
ゲームっぽい動きを作っていきましょう

先頭の所に書いてある部分が１つのタスクです。
幅とか高さ、色を書く部分と、２つのプログラムを書く部分で構成されています。
initは、四角が生まれた時に一回だけ実行されます。
updateは、１秒に20回実行されます。
```
var ENEMY={
  w:30, //幅
  h:30, //高さ
  color:'red', //色
  init:function(x,y){
    //生まれた時に実行
    this.x = x;
    this.y = y;
  },
  update:function(age){
    if (this.y < 0){
      this.stop();
    }
    //1秒に20回実行
  }
};
```

最初はクリックした位置に赤い四角がぺたぺた貼られていくだけです。
これを改造していこう！
・w:30の所の数字を変えてみる
・h:30の所の数字を変えてみる
・color:'red'のredの所を違う色の名前に変えてみる
・updateの中にthis.x += 1;を追加

例)
```
  update:function(age){
    //1秒に20回実行
    this.x += 1;
  }
```

・updateの中にthis.y += 2;を追加
・updateに追加した1とか2の数字を変えてみる

# ２：加速度をつけてみる

改造していくと、クリックして貼られた四角が動くようになったと思います。
この動きは何かというと、中学の時に習った等速直線運動ってやつですね。
これを現実の物体が落ちる時みたいに等加速度運動にしてみます。
・initに速度を定義
```
this.vy = 0;
```
・updateで速度をy座標に足す
```
this.y += this.vy;
```
・速度に加速度を足す
```
this.vy += 1;
```
・vyに足している1を変えてみる
この1の所が重力加速度にあたります。少なくすれば月みたいに弱い重力になります。

# ３：はねかえらせてみる
さっきの動きだけでもちょっと面白くなってきました。みんなたいてい
１０秒くらいは夢中でクリックしまくってくれますが、逆にいうと
１０秒で飽きます＾＾

今度は地面ではねかえるような感じにしていきます
・initに地面の高さを定義
```
this.ground = 400;
```
・updateにはねかえる動きを定義
```
if (this.y > this.ground){
  this.vy = -this.vy;
}
```
・はねかえるようになると、四角が大きくて見にくいので小さくしたほうがいいかも
this.wやthis.hの所の数字を5くらいにするといいと思います

# ４：横にも動かしてみる
縦に落ちて地面ではねかえる動きまでできた所で今度は横の動きを作っていきます
・initに横の速度を定義
```
this.vx = 4;
```
・updateで速度を加算
```
this.x += this.vx;
```

これだと全部右に寄っていってしまうのでランダム要素を入れてみます。
JavascriptではMath.random()と書くと0から1までの乱数を返してくれます
```
initの最後で横の速度を変更
if (Math.random() > 0.5){
  this.vx = -this.vx;
}
```

# ５：横もはねかえらせる
・今度は横もはねかえらせてみます
updateに追加
```
    if (this.x < 10){
      this.vx = -this.vx;
    }
```
・これだと左だけなので右も。
```
    if (this.x > app.WIDTH-10){
      this.vx = -this.vx;
    }
```

# まとめ


<p class="codepen" data-height="300" data-default-tab="js,result" data-slug-hash="BabyjLG" data-editable="true" data-user="oosamanet" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/oosamanet/pen/BabyjLG">
  unitaro.js: starter kit1</a> by sakai yoichi (<a href="https://codepen.io/oosamanet">@oosamanet</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

最後まで編集したコードをのせておきます。
２０行くらいしかいじってないですが、結構面白い動きになってきたんじゃないでしょうか

次は（あるのか？）もうちょっとゲームっぽい事をしてみようかと思います