MENU

Code of Genius

定期コースに
申し込む
開催中の
イベント

オリジナル作品紹介「計算シューティング」

コラム記事
オリジナル作品紹介「計算シューティング」

コードオブジーニアスでは、「プログラミングを通して、アイデアをカタチにする」をテーマにプログラミング学習を進めています。

プログラミングを知っているだけではなく、プログラミングを使って何かを創り出せるような人になることを目指して日々プログラミング学習に励んでいます。

各プログラミング言語を学習したタイミングで、それぞれオリジナル作品を作ることにチャレンジしています。

ここでは、生徒が実際に作ったオリジナル作品を紹介していきます。

作品紹介

今回紹介する作品は、以下のようなゲームです。

作品名 計算シューティング
作者 M.R.さん(高校2年生)
プログラミング言語 JavaScript
どんなゲーム? シューティングゲーム×計算。敵を倒した後に、どちらの計算を選ぶかがポイントです。

実際の作品はこちら。

敵を倒した後、どちらの計算を選ぶかが絶妙に工夫されています。

さらに作品について掘り下げて見ていきたいと思います。
このゲーム、どんなプログラムの工夫がされているのでしょうか?
ここからは、プログラムで工夫されているところについて紹介したいと思います。

プログラムの工夫

ゲームクリアの画面

ゲームクリアの画面です。まずはこれを見てください。ゲームクリア画面
取得したスコアによって、出る文字が変わります。
プログラムとしての変更はそこまでないですが、これだけでゲーム性が上がりますね。

  
    // ゲームクリア画像表示
    if( this.bullet == 2){
        // 残りの弾数が2個の時
        this.gameclear = this.add.image(400,300,'congratulations');
        this.gameclear.setDisplaySize(750,500);
    }else{
        // 残りの弾数が2個以外の時
        this.gameclear = this.add.image(400,300,'gameclear');
        this.gameclear.setDisplaySize(750,500);
    }
  

報酬、敵をデータから取得

報酬、敵などの設定はデータで持つ必要があります。一つずつ設定する方法もありますが、それだとプログラムが複雑になったり同じ処理を繰り返したりする必要があり、効率的ではありません。
そういった時は、複数のデータを配列によって保持することで、プログラムを効率的に作ることができます。
データの設定は、以下のように行っています。

  
//エネミーデータ
var enemy_data = [
    {
        name     : "enemy01",
        hp       : 1,
        speed    : 5,
        image    : "enemy01",
    },
    {
        name     : "enemy02",
        hp       : 4,
        speed    : 5,
        image    : "enemy02",
    },
    {
        name     : "enemy03",
        hp       : 20,
        speed    : 5,
        image    : "enemy03"
    },
    {
        name     : "enemy04",
        hp       : 75,
        speed    : 5,
        image    : "enemy04",
    },
    {
        name     : "enemy05",
        hp       : 150,
        speed    : 5,
        image    : "enemy05",
    },
];
  

データを利用したプログラムは以下のようになっています。

  
mainScene.createEnemy = function() {
    var data = this.enemyData[this.i];
    
    var image = data.image;
    var enemy = this.enemyGroup.create(400,-50,image);
    enemy.HP = data.hp;
    enemy.setDisplaySize(800, 200);
    var speedX = 0;
    var speedY = 15 * data.speed;
    // 敵の移動
    enemy.setVelocity(speedX, speedY);
    //敵の衝突判定
    this.physics.add.overlap(this.enemyGroup,this.beamGroup,this.hitBeam,null,this);
    this.physics.add.overlap(this.player,this.enemyGroup,this.hitEnemy,null,this);
    this.battle++;
    this.i++;
    //パーティクル作成
    this.createEnemyParticle(enemy);
    this.HP = enemy.HP;
    this.scoreTextHP.text = "敵のHP:" + this.HP;
    this.scoreTextBattle.text = "Battle:" + this.battle  + '/5';
};
  

上記プログラムでは、最初の「this.enemyData[this.i]」で設定したデータから敵のデータを取得していて、それを使って敵を画面上に出現させています。
データ自体は別で定義してあるので、それを利用するだけで、同じプログラムでいろいろな種類の敵を出現することができます。

敵の出現時間

このゲームでは、「敵が出現する⇒敵を倒す⇒2つの報酬が出現する⇒報酬を選択する⇒新しい敵が出現する」という流れになっています。
敵を倒すから報酬を選択するまでは、ユーザーの操作によって実行しますが、敵の出現は、タイマー処理で10秒毎に行います。このタイマーの10秒という間隔が絶妙に調整されています。
速すぎてもつまらないし、遅すぎても退屈になってしまいます。ユーザーの操作時間も考慮した時間調整が素晴らしいです。

  
    //2体目以降の敵の作成(タイマー処理)
    this.timeEvent = this.time.addEvent({
        delay:1000 * 10,
        callback: this.createEnemy,
        repeat: this.loopNumber-1,
        callbackScope: this
    });

  

自分がオリジナルのゲームを作る過程で、プログラムについても、ゲームのアイデアについても自分でしっかり考えることができていました。
また、オリジナルゲーム作成を通して、自分で作品を作る中でこれまで学習した知識も自分のものにしていくことができました。

自分から主体的に取り組むことが大切ですね。

気になる方は、以下から定期受講コースの詳細をご確認ください。


お気軽にご参加くださいPROGRAMMING CHALLENGE

プログラミング教室への入会を
ご検討中の
中学生・高校生・保護者様へ

コードオブジーニアスでは、プログラミング学習を通した人材育成を意識して行っております。例えば、プログラミングの書き方は千差万別でいろいろな書き方があります。では、どんな書き方でも動けば良いのか?といえば決してそうではありません。他の人が見ても見やすい、処理が早く終えることができる等、良い書き方が存在します。これは武道や茶道といった「道」を極めることと似ているのかもしれません。

今、AI時代が到来しています。何ができるか?よりも、もっと大切なことを若者が大好きな方法で伸ばしてあげるのが大人の役割に感じております。一人ひとりの未来を創り出すのは、あくまで一人ひとりの行動と決断の結果です。未来に向けたチャレンジを私たちはお待ちしております。

ご相談はお気軽にどうぞ

お問い合わせ

お電話はこちら(受付:10時~19時)

050-3138-2090
PAGE
TOP