最近、ゲーム制作のネタが多くてプログラミング教室だと思われそうですが、つくば高等学院はITに特化した茨城県つくば市の通信制高校・サポート校で中学生が通えるフリースクールです。
基本的にゲームが好きな生徒が多いのと、プログラミングはやっぱり楽しくないと続きませんので、どうしても見てわかりやすいゲーム制作が多いです。
シューティングゲーム化していく
先日に引き続き、生徒用のサンプルゲームプログラム「水晶とドラゴン」。
今日は炎を撃てるように改造。連射は画面が小さいのもあって今回はしない予定です。
ひとまず、シューティングゲーム化していこうと思います。
スペースキーで青い炎を吐く
スペースキーを押すとドラゴンが炎を吐きます。
打った?は撃った?のほうが正しそうですが、動画を取るつもりもなかったので変換せずにそのままのっけてしまいましたw
celloadで読み込んで、celdiv、celputで炎の画像を引っ張り出してあとは向いている方向に発射する感じですね。
向いている方向はstickで変数に取得しているので、その値を使います。
まだ、生徒にはソースを公開していないのですが、生徒たちの弾を撃つプログラムを見ると画面の端までfor文やrepeat,loopで炎を移動しようとしている子がいました。これ、私も昔やって悩みました(笑)
そうしたくなりますよね。
「画面の端まで移動」とメインループ内でループしてしまうと、ループの中で炎が端まで飛んで行ってループが完了し何にも見えない状態になります。
そこで、フラグを使うとことで簡単に処理できるようになります。
弾を撃つ方法の解説
生徒には後ほどソースを公開予定でして、今のところHPを閲覧している方にもソースは見せられませんが、簡単に解説すると以下のような考え方をしています。
通常の状態
発射フラグ=0
もし、スペースキーが押された かつ 発射フラグ=0{
炎のX座標=ドラゴンのX座標
炎のY座標=ドラゴンのY座標
その時は 発射フラグ=1 にする。
}
炎発射のサブルーチンを呼び出す
※炎発射のサブルーチン内
発射フラグ=1のとき
向いている方向が右なら右に炎のX座標を移動する
向いている方向が左なら左に炎のX座標を移動する
炎のY座標
炎を表示する
炎が右端に届いたら 発射フラグ=0にする 炎のX座標をドラゴンのX座標にする
炎が左端に届いたら 発射フラグ=0にする 炎のX座標をドラゴンのX座標にする
戻る
なんで言葉だけなの?
「ソース載せてよ!」と思う方もいそうですが、今のところ載せる予定はありません。そのうち、解説サイトとかHowToみたいなコンテンツを作りたいなとは思っています。
HSPなら手間もかからずできそうなんで(;^_^A
ただし、しってほしいところで、ツクガクっていつもこんな感じで日本語でアルゴリズムを考えて各自が自力でプログラムを書けるようになる学習方法を取っています。
もちろん、生徒のプログラムを見てコメントをつけたり、1つ2つサンプルをつけてみたりはしています。ソースも生徒には公開しています。
私自身もそうですが、言葉で説明できないことのプログラミングってたぶん相当難しいと思うんですね。というか、無理でしょう。プログラムを書くときはまずは日本語で考えます。
なので基本的に生徒には日本語で話し合って、ちょっとずつ理解を進めてもらっていて、そうしていくことで、生徒は言語に関係なくなんでも取り組めるようになると考えています。
そうでないとできるようになりませんので。