この記事は科学太郎氏が提供しているゲーム制作のミニ講座 シューティングゲームを作ろうを参考に実践をもとに記事を構築しています。HSPの基本的な構文等については以下の記事から参照していただければと思います。
いまさらはじめるHSP入門。
randmizeとrndをつかってみよう
hspで乱数を生成するには最初にrandomizeと書いて乱数を初期化する必要があります。randomizeを使わずにrnd()関数を使うと毎回同じ値が出力されます。
randomize: mes rnd(10) //0から9までの乱数を表示する
敵を表示させて移動させてみよう
敵の考え方は自機弾を発射させる処理の考え方とほとんど一緒だ。敵の配列を作成して、生成したのち描画処理を行いy方向に落下させる。画面外に消えればスイッチが切り替わり、また敵が生成される。敵の生成間隔も自機の弾のときと処理は一緒だ。コードが長すぎてやる気をなくすかもしれない。でも実際は大したことはやっていない。
*Init //自機の弾の管理 dim tamaF,10 dim tamaX,10 dim tamaY,10 //敵機の管理 dim enemyF,20 dim enemyX,20 dim enemyY,20 *Main screen 0,600,400,SCREEN_FIXEDSIZE font MSGOTHIC,50 repeat redraw 0 stick key,31 if(key&1):x- =5:if(x<0):x=0 if(key&2):y-=5:if(y550):x=550 if(key&8):y+=5:if(y>350):y=350 if(key&16):gosub *TamaBirth color $00,$00,$00:boxf color $00,$FF,$00:pos x,y:mes "山" gosub *TamaDraw gosub *EnemyBirth // 敵 gosub *EnemyDraw // 敵 redraw 1 await (1000/60) loop stop //-------------------------------------- // 自機弾の発生 //-------------------------------------- *TamaBirth if(tamaTrigg):tamaTrigg--:return foreach tamaF if(tamaF(cnt)==0){ tamaF(cnt)=1 tamaX(cnt)=x tamaY(cnt)=y break } loop tamaTrigg = 2 return //-------------------------------------- // 自機弾の描画 //-------------------------------------- *TamaDraw foreach tamaF if tamaF(cnt){ tamaY(cnt)-=8 if(tamaY(cnt)400):enemyF(cnt)=0:continue pos enemyX(cnt),enemyY(cnt) color $00,$FF,$FF:mes "Ж" } loop return
randmoizeを使っている点にも注目だ。x軸でrnd()関数を使っているので、x軸のランダムな位置に敵が描画される。
かなり地味ではあるが、こういうふうに動くのかとちょっと納得できる。
#includeを使ってみよう
もしかすると敵と自機のコードが混在していてイライラするかもしれない。そういうときはもしかすると#includeが役に立つかもしれない。#include “ファイル名” と記述すると、#includeが記述された箇所に指定のファイルが読み込まれる。まずは簡単なコードでチェックしてみよう。2つのファイルを用意した
//これはincludetest.hspです。 button "読み込み", *hata1 stop *hata1 #include "includefile.hsp"
//これはincludefile.hspです mes "hello world"
「読み込み」ボタンをおすとincludefile.hspが読み込まれ 「hello world」 が表示される。hspにはモジュールという仕組みもあるようですが、わからんのでここではふれません。くわしくしりたいかたは公式を参照するのがよいでしょう。
コメント