ゲームは変数を理解しないと作れない ゲタバコ先生の変数講座(Scratchにて)

ゲーム作りをする上で避けられない関門

さて、日頃子どもたちにゲーム作りを教えていて、感じることがあります
この子はきっとどんどん面白いゲームを創っていくんだろうな、この子は残念ながらゲーム作りは向いていないんだろうな
こんなことを思ってしまうのはとても良くないことなのではあるのですが、それを見分ける明確なラインが実はゲーム作りにはあります

ズバリ、そのラインとは…

変数への理解です

ゲーム作りをしたことのない人のために説明しておくと、変数とは簡単に言うとゲーム内で起こる数多くのイベントをコントロールする数字のことです
僕は願わくば、変数をちゃんと理解する子どもが世の中にもっと増えて欲しいと思っています
と、言ってもイマイチ、ピンとこないですよね…

最低限理解して欲しい変数のパターン

因みに最低限理解して欲しい変数のパターンは3つあって、、

  • パターンの切り替えスイッチとしての変数
  • オンオフスイッチとしての変数
  • キャラクターを移動させる時に代入する変数

があります

例えば誰もが知っているであろうゲーム、スーパーマリオブラザーズで説明します

パターンの切り替えスイッチとしての変数

マリオは最初チビマリオで始まります
そして、ブロックから出たキノコを取るとスーパーマリオになりますよね
実はこの時にすでに変数が使われています

ダウンロード

実際の製作現場ではどのように記述されているかは分かりませんが、おそらくマリオの変身を操作する変数が作られていると思います
仮に”マリオ変身”という変数を作ったとしましょう
そして、”マリオ変身=0”ならチビマリオ、”マリオ変身=1”ならスーパーマリオ、”マリオ変身=2”ならファイアマリオという条件を設定します

敢えてプログラミング風に書くと(とりあえず適当に書いてますよ)

if(MarioChange==0){
ChibiMario;
}
if(MarioChange==1){
SuperMario;
}
if(MarioChange==2){
FireMario;
}

みたいな

要するにこの「0ならチビマリオ」、「1ならスーパーマリオ」とか言っている数字のことが変数なわけです
数字の値によってマリオの状態が変わっていますよね

オンオフスイッチとしての変数

これも、実際の製作ではどうなっているか分かりませんが、例えばジャンプ

地面に着地している時しかジャンプできないようにしないと無限ジャンプができてしまいます

例えるなら星のカービーみたいな
それはそれでありなんですが、マリオではナシです

地面に着地している時しかジャンプできないようにする時にも変数は使います
地面に着地している時は”ジャンプ”を0にして地面から離れている時は”ジャンプ”を1にします
そして、”ジャンプ”が0の時に”ジャンプボタン”をおされた時に、マリオの”y座標”を”ジャンプ力”だけ上にあげます
つまりジャンプは”地面についているか””いないか”という変数で管理されて、”地面についている時だけ”ジャンプすることができるようになります

敢えてプログラミング風に書くと(こちらも適当ですよ)

if(Player.Grounded){
Jump = 0;
if(Input.GetKey(JumpKey)){
Jump.y = 100;
}
}
else{
Jump =1;
}

みたいな

13b66b70

キャラクターを移動させる時に代入する変数

これは先程のジャンプにも関係している重力が代表的です
ゲームのキャラクターに重力をかけたい!!と思った時に皆さんはどのように考えるでしょうか?

単純に考えたらキャラクターのy座標をマイナスし続ける!ってことになり、わざわざ変数なんて使う必要ないと思うかもしれませんが、実際にプログラミングをしてみるとそれが不正解であることに気づきます

hensuu

左側のキャラクターはy座標を単純にマイナスし続け、地面に触れたらマイナスしていた分だけプラスして相殺しています
右側のキャラクターは重力をかける分を変数にして地面に触れたらその変数を0にしています
そうすると左のキャラクターは地面から浮いてしまっていますし、右側のキャラクターはちょうどよく着地しているように見えます
また、左側のキャラクターは色々試すと分かるのですが地面の高さが変わると着地の判定を調整しなければいけなくなります
ゲーム作りにおいては条件が多少変わっても同じような結果が出ることが重要視されます
そうした理由からキャラクターの移動を変数で代入する必要が出てくるというわけです

変数を理解しやすくなるプロジェクト

とりあえず、一通り説明しましたが、もっとビジュアル的にわかりやすくなるように、Scratchでこれらのことが学習できるプロジェクトを作ってみました

以下リンクですので、まずは見ていただけたらと思います

スマホで見ている方は動画にしておきましたので動画をどうぞ

…変数理解してもらいたい
感想、要望メールやコメントでお待ちしています♪

最後に、変数の理解と発達段階について

変数はある事象を数字に置き換えてあれこれ考える、いわゆる代入の概念が能力として必要になります
これは一般的に言って、小学5年生以降で身につく(もちろんそれ以前でも身につくことがありますが、その場合は数学的な才能が長けているという話です。そんな子どもの親御さんはとりあえず専用のPCを買ってあげましょう。将来絶対Payできますので)
なので、それ以前の子どもは身につかないことが平均レベルであると言えます
最近はプログラミング教育はある意味流行っているので、変な期待をされることもありますが、そもそも発達段階に合っていないことを早期からやっているので効果が出ること自体、時間がかかります(ただ触れていることは大切です)
僕は明確に低学年の子どもと高学年の子ども(もちろん、子どもの発達段階によって個人差はありますが)はそもそもの目的を分けています
少なくとも低学年の子どもはパソコンが自分にとって身近なものになるよう、遊び道具となるよう使い方を教えるし、高学年の子どもには意地悪な変数絡みの問題を出したりして、考える機会を与えたりします
過度な期待で結果的に将来を奪うような結果にはしたくないと思っています
ゲームが好きな子にはゲーム作りも好きになってもらいたいですね

変数できればゲームが作れる!変数できなきゃゲームは作れない!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です