Viscuitでゲームを作るときの重要機能3つ

こんにちは、初めまして。
株式会社LITALICO　LITALICOワンダーで教室スタッフをしています、@yukkyyyです。
こちらは[『LITALICO Engineers Advent Calendar 2017』](https://qiita.com/advent-calendar/2017/litalico)22日目の記事です。

#はじめに
私は、普段は教室の中で、お子さんと一緒にゲームを作ったり、バグに悩まされたりしています。
エンジニアではないのですが、どうやったらより面白くなるか、より楽しく取り組めるか、という視点からプログラミングに向き合っております。
本日22日目は、子供でも楽しく取り組めるビジュアルプログラミング言語「Viscuit」を使ってゲームを作る時に重要な機能をご紹介したいと思います。

#触ったことある？Viscuit
そもそもViscuitとは、絵を描いて、その絵と「メガネ」というツールを使うことによってプログラミングをする、ビジュアルプログラミング言語です。
絵を描くところからプログラムをするところまで、文字を一切使うことなく操作できるため、未就学児のお子さんでも楽しみながらプログラミングすることができます。
![メガネうごき.png](https://qiita-image-store.s3.amazonaws.com/0/214643/1940b7ec-9e5d-0195-c314-2b9a7e361652.png)
プログラミング例：魚の絵が前(左)に動くプログラム。左側の絵の場所が、右側の絵の場所に変わるという動き。

他にも
![スクリーンショット 2017-12-21 22.57.10.png](https://qiita-image-store.s3.amazonaws.com/0/214643/2245fec0-6b13-f947-85e5-3fd2f29e89e7.png)
魚の口が開いたり開いたりする(口が開いた絵と閉まった絵が切り替わる)プログラムや、

![スクリーンショット 2017-12-21 22.57.01.png](https://qiita-image-store.s3.amazonaws.com/0/214643/ac6852fc-08a9-4d80-a61b-53e09c096cd8.png)
魚の絵が泡の絵に当たったら目をつぶった絵に変わる、なんてプログラムもできます。
絵の位置関係で、プログラムを作成しているわけです。
この辺、実際に触った方がわかりやすいかと思うので、そもそもViscuitに触れたことのない方は、一度弄ってからこの記事を読むことをお勧めします。
アプリ版以外にも、ブラウザでも動作するので、試してみてください。

遊び方や詳細な操作の仕方は、[公式HP](https://www.viscuit.com/)にわかりやすく掲載されていますので、割愛させていただきます。

さてさて、そんなViscuitですが、子供向けと侮るなかれ、使いこなせばゲームも作成することができます。
そんなゲームを作る際に、作り込むときために必要な要素3つを、初歩から裏技まで以下にご紹介いたします。

#その1:タッチの判定は分ける！
Viscuitには、画面をタッチしたときの機能があります。
作成画面から全画面![スクリーンショット 2017-12-21 22.52.55.png](https://qiita-image-store.s3.amazonaws.com/0/214643/2466f053-1fea-73fc-7f5b-61d0ad61ff04.png)にした後、画面をタッチすると
![スクリーンショット 2017-12-21 22.51.43.png](https://qiita-image-store.s3.amazonaws.com/0/214643/9719bb88-3d42-1756-58cb-ebeb9d99a697.png)
こんな感じで指の絵が出てきます。
この指の絵が、画面内を動いている絵とぶつかった時にどう変わるかで、タッチ操作をプログラムします。
![スクリーンショット 2017-12-21 23.05.32.png](https://qiita-image-store.s3.amazonaws.com/0/214643/93972137-4b25-d2e6-5788-f50f3a976d28.png)
上のメガネは、ゆきだるまの右側をタッチしたら(タッチして指のマークがゆきだるまと重なったら)、右に動くという動きになっています。下のメガネも同様に、左側をタッチすると左に移動します。

ゲームで一番大事な「操作」の唯一の要素が、この「タッチ」になってきます。
このタッチ、今ご紹介したように、絵が重なる場所によって、動きの判定が変わってきます。
![スクリーンショット 2017-12-21 23.14.49.png](https://qiita-image-store.s3.amazonaws.com/0/214643/2027188d-fca0-c1eb-4eaf-cf1a556e3ff1.png)
極端な話、こんなメガネでも動きます。大事なのは位置関係なので、きちんとメガネにおいた指マークの場所をタッチすれば、反応します。

このタッチ操作で、[ゆきがっせんゲーム](http://develop.viscuit.com/env/view.html?control=play%3A25078659%3A000%2F1-1%2F012.json%3A)を作成。
ゆきだるまの左右をタッチ(orクリック)で左右に移動、ゆきだるまのど真ん中をタッチで、雪玉発射です。
敵に3回当てれば勝ちです。


#その2:グリッドを使う！
先ほどの雪合戦ゲームを遊んだ方や、自分でタッチの動きを使った方は、
動かすときにキャラがちょっと「ズレる」のに気づいたかもしれません。
Viscuitは、正確に条件を満たさないと動作しない一般的なプログラミング言語とは違い、多少曖昧な位置でもプログラムが動作するようになっています。
きっちり命令を作らなくとも動作するため、「絵がぶつかってるはずなのに動かない！(メガネの場所よりすこしズレているため動かない)」なんてバグは発生しません。
その分、タッチの位置がメガネでの指定の場所からズレていたりすると、それに合わせて少し動く位置もズレてしまうのです。
もちろん、それでも良い方はそのままでOKです。
「より正確に動作させたい！」という方は、この項目を参考にしてみてください。

Viscuit上でさらに正確に動作させるには、「グリッド」を使います。マス目のことです。
グリッドを設定するには、歯車の設定ボタンを押して、亀とうさぎの下にある項目のバーを左右に動かします。
![スクリーンショット 2017-12-22 11.48.11.png](https://qiita-image-store.s3.amazonaws.com/0/214643/87ac6ad0-4cd4-0c36-fa54-36552248f980.png)
バーが右に行くほど、グリッドのマス目が大きく設定されます。

この機能を使うと、絵がマス目に合わせて配置されるようになります。
![名称未設定.png](https://qiita-image-store.s3.amazonaws.com/0/214643/1b98164e-c371-ef35-b708-3e007d2f1e5a.png)
判定や動きをこのマスに合わせて作ると、きっちりマスに沿って動いてくれるため、徐々に場所がずれて行く…なんてことも無くなります。
ただし、タッチの判定もグリッドの位置に補正されるため、マス目が小さいほどより正確にタッチしなくてはならなくなります。結構大変です。オススメは、一番大きいグリッドです。

さてこのグリッド、場所がズレなくなるという利点だけで、様々なゲームを作る幅が増えます。
まずは大きなステージなんかを用意するゲーム。2Dアクションゲームなどですね。
![スクリーンショット 2017-12-22 11.51.33.png](https://qiita-image-store.s3.amazonaws.com/0/214643/5535dfb3-680b-cf12-7a85-3c0811de6692.png)
今現在のViscuitには、絵を拡大縮小する機能がないので、複数の絵を並べて絵を大きく見せる必要があります。
これも、グリッドがあることで、サンドボックス風にステージを作成することが可能になります。

[アクションゲーム](http://develop.viscuit.com/env/view.html?control=play%3A25078659%3A000%2F1-1%2F005.json%3A)です。旗までいったらゴール。
左右をタッチで移動、右斜め上をタッチでジャンプです。
ステージ自動生成も試して見ましたが、結構詰んでしまうステージが生成されてしまいました。

![スクリーンショット 2017-12-22 11.58.31.png](https://qiita-image-store.s3.amazonaws.com/0/214643/d2487074-4c6c-9874-f893-5f2889582db6.png)
他にも、迷路ゲームだったりパズルゲームだったりと、コースや枠組みが必要なゲームに活用できるので、工夫してみてください。

#その3:割れたメガネを活用する！
そして最後に紹介するのが、割れたメガネです。
この機能は、試験的に実装されている裏技です。
今までViscuitは、位置関係のみを利用してプログラミングしてきました。
この割れたメガネは、それを覆します。位置関係なく実行されます。

割れたメガネの出し方は、メガネの真ん中にある矢印を長押しするだけです。
メガネの丸の中の色が上下に別れたらOKです。
![スクリーンショット 2017-12-22 11.45.56.png](https://qiita-image-store.s3.amazonaws.com/0/214643/37080e0c-e9d7-a716-36bc-f033ad2ab818.png)
このメガネでは、上下の領域に、それぞれ連動させたい絵を入れます。
それぞれの状態が揃ったとき、実行されます。

![スクリーンショット 2017-12-22 9.01.46.png](https://qiita-image-store.s3.amazonaws.com/0/214643/c5a7fa6b-09a8-fb86-19a3-f8efd2a12177.png)
このメガネは、上矢印をタッチしたら、棒人間が上に
下矢印をタッチしたら、棒人間が下に動くプログラムです。

![スクリーンショット 2017-12-22 9.01.28.png](https://qiita-image-store.s3.amazonaws.com/0/214643/21d563c6-037f-1805-65f6-9da7cdd10f14.png)
こんな位置関係でも、棒人間は動きます。
[棒人間コントローラー](http://develop.viscuit.com/env/view.html?control=play%3A00300013%3A1650%2F1-1%2F006.json%3A)

なんと、コントローラーができてしまいました。
もちろんタッチ操作以外にも、敵とぶつかったときに体力ゲージを減らしたり、ゴールしたときにクリアを表示、なんてことも自在です。

以上、３つの機能をご紹介しました。
あえてゲームの詳細の作り方まで描かなかったのは、Viscuitは自分で触って考えてこそ楽しいものだと思うからです。

普段居る教室の中でも、「こうかな？」と試行錯誤して、「わかった！」と晴れやかな顔になるお子さんがたくさんいらっしゃいます。
そんな体験を、この記事を読んでくださった方にも届けたいです。
アクションゲームやパズルゲーム、ぜひチャレンジして見てください。

明日、23日目は@nissiyさんで、Android版Conobieの改善 〜モダンな仕組みを入れて〜です。お楽しみに！