Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

ゲーム開発者がやってみた親子Scratch 2回目

More than 1 year has passed since last update.

今回のサンプルに関してはタイトルやゲームオーバーも作成してみました。

前回に引き続きソースの流用はご自由に!

画像なのですが下記のサイトからいただいております。

https://www.ac-illust.com/

https://www.ac-illust.com/main/detail.php?id=1387916&word=%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B2%E3%83%BC%E3%83%A0%E7%B4%A0%E6%9D%90

https://www.ac-illust.com/main/detail.php?id=1221225&word=%E3%81%8B%E3%82%8F%E3%81%84%E3%81%84%E3%83%BB%E3%83%A2%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%BC

またタイトルロゴは下記のサイトで作成しております。

https://ja.cooltext.com/#_ebcv=3kxCAMrX.liskul2so.1

ですので、各画像の利用に関しては上記サイトの規約に従ってください。

■ゲームに関しての説明

Shooting
image.png

https://scratch.mit.edu/projects/372171545

★スタート
・スペースキー

★自機のそうさ
・左右キー 移動
・スペースキー ミサイル

敵にミサイルを充てると得点が入ります。敵の種類ごとに点数が違います。
敵は倒しても一定時間で再ポップします。
敵の弾が当たるとゲームオーバー。
ゲームオーバー画面でスペースキーを押すとタイトルに戻ります。
ハイスコアが保存されます。

■息子の感想

とりあえず遊んでもらいました。

若干難しいとのこと。

あとソースの説明をしました。

かなり難しいとのこと。

この後でもろもろ問題点を列挙していきます。

■Scratchプログラムの問題点

今回のサンプルですが、作成にかなりの時間を要しました。

下記のような理由からですね。

・Scratchはスクリプトの構造化が行いにくい

私の知識が足りないだけかもしれませんが、敵キャラクターの動きなどはプログラムとしてまとめたいのですが、それができません。

基本Scratchはスプライトがまずあって、それに動きを付けていく仕組みです。

オブジェクト指向的感覚を学ぶのにはいいと思うのですが、プログラムの構造化を学ぶのには良くないかもしれません。

スクリプトのコピー、ペーストもやりにくいですね。あくまで小さなプログラムを作成するのに向いているような気がします。

・画面遷移が行いにくい

画面遷移が行いにくいですね。

スプライトに関係しないゲーム全体の初期化であったり、画面遷移の機能をどうやって持たせるのかに悩みます。

あわせて背景の設定をどこで行うかが悩みどころです。

これらに関しては私が知らないだけで定番の形があるかもですね。どなたかご存知の方は教えてください!

現状はタイトルの背景はタイトルロゴ、ゲーム中の背景は自機、それぞれのスプライトで設定しスクリプトを記載しております。

画面遷移の機能がないので、画面遷移が行われた際に実施する処理(ゲーム開始時の初期化)を書くスプライトのスクリプトで行っています。

これがバグがわかりにくくとりにくく時間がかかった原因になりますね。

・クローンがわかりにくい

クローンの仕組みがわかりにくいです。

スプライトのクローンを作成できるのはいいのですが、個別のクローンを特定して操作することが困難です。

クローンを発生させた後に、ずっとのループの中に入れて操作することは可能ですが、例えば「10番目に作成したクローンのx座標を変更する」というような操作方法がわかりません。

あとループでたくさんのオブジェクトを作成したかったのですが、このやり方も不明です。

本当はインベーダーみたいに横と縦に何列か並べたかったんですよね。

並べるだけではなく、それぞれで制御したかったのですが、あまりにもスクリプトが煩雑になるので断念しました。

・メッセージが扱いにくい

何かの条件に引っ掛けてメッセージを飛ばすことができます。

そちらの機能自体は素晴らしいのですが、一度メッセージを飛ばした後の制御に難があります。

メッセージが飛んだら敵を登場させて、動かす、というところは可能です。

ただその動かすために基本「ずっと」のループを走らせておかないといけないです。

一度ゲームオーバーになって、もう一度メッセージを走らせたときに前回のメッセージで作成したクローンが死んでいなくてバグる、ということが起こります。

実際のプログラムだとwhile文が個別にたくさんあって、グローバル変数でその初期化や動作を制御するような仕組みになっちゃうわけです。

うーん、scrastchのプログラムといえどもいやだな。

角スプライトで外部で操作したい値は変数化しておいて、どこかでまとめてやる、というのが正しそうですね。

それもスクリプト作成で考えると煩雑でやりたくないです。

あとやはり、グローバル変数をたくさん設定しているような気がして、あまり気が進まないです。

■現状の結論として

タイトル画面 ⇔ ゲーム画面

のような画面遷移を挟むものは組みにくいですね。

単純にスクロールするだけのものだったらいけるのかなあ。

ループさせるより、毎回旗を押させてゲームを始めるようなせっけいしそうなのかもしれません。

スプライトをスクリプトで制御させる仕組みはとっつきはいいのですが、プログラムの別の醍醐味である、複雑な処理を簡単に書く、という部分が実現しにくいですね。

現状息子は自分で考えてゲームを作成するというところまではいっていません。

それを実現するためにわかりやすいさんぷるがたくさんあればいいだろうということでさくせいしているのですが、今回のサンプルは明らかに複雑でそういった目的に適していません。

次回以降はきれいに作ることは考えず、サンプルとして使いやすいものという観点で作成していこうと思います。

あとは構造化やアルゴリズムを覚えるための別のプログラミング言語を探さないとですね。

こちらもお勧めのものがありましたら教えてくださいー

fish_head_pm
とあるデヴェロッパーでゲーム制作しています。 役職はプロマネ、ディレクター、プログラムも書きます。 ゲームに関することや生活に関することをブログで書いていますので是非のぞいてみてください!
http://game-pm.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away