プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7...

20
上田市マルチメディア情報センター プチコンで横スクロールシューティングゲームを作る(3)/1 プチコンで横スクロールシューティングゲームを作る(3) ●敵がミサイルを発射する 前回までで、敵をビームでうつ、敵が 自機に当たるとミスになる、という基 本的なシューティングゲームの仕組 みができました。 今のままだと敵が全く攻撃してこない ので、敵がミサイルをうってくるように してみましょう。 ★ミサイルの設定 プログラムの最初で、ミサイルのスプライトなどを設定します。 基本的に、敵の設定と同じです。 ミサイルのスプライトは、1322 番を使います。 ‘*** SHOOT8 *** (中略) 33 ‘--- テキ --- 中略37 SPCOL 11001616 38 39 ‘--- ミサイル --- 40 MS=41 SPSET 211322 42 SPHOME 2144 43 SPCOL 21,-4,-488 44 SPHIDE 21 45 46 ‘--- ジキヲ ウゴカス --- 47 @MOVELOOP ミサイルが存在するかどうかの変数。最初は 0 ミサイルのスプライトを 管理番号 21 番で設定 最初はミサイルが発射されていないので、表示しない タイトルを「SHOOT8」にする

Upload: others

Post on 28-Mar-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/1

プチコンで横スクロールシューティングゲームを作る(3)

●敵がミサイルを発射する

前回までで、敵をビームでうつ、敵が

自機に当たるとミスになる、という基

本的なシューティングゲームの仕組

みができました。

今のままだと敵が全く攻撃してこない

ので、敵がミサイルをうってくるように

してみましょう。

★ミサイルの設定

プログラムの最初で、ミサイルのスプライトなどを設定します。

基本的に、敵の設定と同じです。

ミサイルのスプライトは、1322番を使います。

1 ‘*** SHOOT8 ***

(中略)

33 ‘--- テキ ---

(中略)

37 SPCOL 11,0,0,16,16

38

39 ‘--- ミサイル ---

40 MS=0

41 SPSET 21,1322

42 SPHOME 21,4,4

43 SPCOL 21,-4,-4,8,8

44 SPHIDE 21

45

46 ‘--- ジキヲ ウゴカス ---

47 @MOVELOOP

ミサイルが存在するかどうかの変数。最初は 0

ミサイルのスプライトを

管理番号 21番で設定

最初はミサイルが発射されていないので、表示しない

タイトルを「SHOOT8」にする

Page 2: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/2

★ミサイルを発射する

続いて、自機を動かすループのプログラムを改造します。

乱数を使って、ある確率でミサイルを発射するサブルーチンを呼ぶようにします。

「RND(100)<2」として、ミサイルが発射される確率は 2%にしています。

ミサイルが既に画面にある時(MSが 1の時)は、発射しません。

また、敵が画面にいない時も、ミサイルを発射しません。

プログラムの最後に、ミサイルを発射するサブルーチンを追加します。

プログラムを実行してみましょう。

敵がミサイルを発射します。

ただし、発射されるだけでそれ以上

は動きません。

ミサイルを動かすプログラムを、まだ

作っていないからです。

122

123 ‘--- ミサイル ハッシャ ---

124 @MISLFIRE

125 MS=1

126 MX=TX

127 MY=TY

128 MDX=RND(4)-2

129 MDY=RND(4)-2

130 SPOFS 21,MX,MY

131 SPSHOW 21

132 RETURN

コメント

ラベル

ミサイル存在変数を 1にする

ミサイルの座標 MX,MYを、敵の座標 TX,TYから設定

ミサイルのスプライトを座標(MX,MY)へ

ミサイルのスプライトを表示

46 ‘--- ジキヲ ウゴカス ---

(中略)

56 IF RND(100)<1 AND TK==0 THEN GOSUB

@TEKIDERU

57 IF TK==1 THEN GOSUB @TEKIMOVE

58 IF RND(100)<2 AND MS==0 AND TK==1

THEN GOSUB @MISLFIRE

59 VSYNC 1

60 GOTO @MOVELOOP

2%の確率で、かつミサイルが画面に無く、

かつ敵が登場していたら、ミサイルを発射

するサブルーチンを呼ぶ

ミサイルの移動量 MDX,MDYを-2~2の乱数で設定

Page 3: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/3

★ミサイルを動かす

発射されたミサイルを動かすプログラムを作りましょう。

自機を動かすループプログラムで、ミサイルが存在している時は、ミサイルを動かすサブル

ーチンを呼ぶようにします。

ミサイルが存在している(MSが 1)の時だけ、ミサイルを動かすサブルーチンを呼びます。

プログラムの最後に、ミサイルを動かすサブルーチンを追加します。

プログラムを実行してみましょう。

発射されたミサイルが移動して、画面のはじまで行くと

消えます。

ミサイルが消えると、また次のミサイルが発射されま

す。

また、自機にミサイルが当たるとミスになります。

46 ‘--- ジキヲ ウゴカス ---

47 @MOVELOOP

(中略)

58 IF RND(100)<2 AND MS==0 AND

TK==1 THEN GOSUB @MISLFIRE

59 IF MS==1 THEN GOSUB @MISLMOVE

60 VSYNC 1

61 GOTO @MOVELOOP

もしミサイルが存在していたら、

ミサイルを動かすサブルーチンを呼ぶ

134

135 ‘--- ミサイル イドウ ---

136 @MISLMOVE

137 MX=MX+MDX

138 MY=MY+MDY

139 SPOFS 21,MX,MY

140 IF MX<0 OR MX>399 THEN MS=0:SP

HIDE 1

141 IF MY<0 OR MY>239 THEN MS=0:SP

HIDE 1

142 IF SPHITSP(0,21)==1 THEN GM=1

143 RETURN

コメント

ラベル

ミサイルの座標 MX,MYを、MDX,MDYだけ移動

ミサイルのスプライトを座標(MX,MY)へ移動

ミサイルが画面をはみだしたら消す

ミサイルが画面をはみだしたら消す

Page 4: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/4

★ミサイルの動きを改善する

今のプログラムだと、ミサイルが勝手な方向へ発射されるので、怖くありません。

また、乱数によってはミサイルが停止した状態になるので、いつまでもミサイルが消えません。

ミサイル発射サブルーチンを、以下のように改造します。

プログラムを実行してみましょう。

ミサイルが自機へ向かって発射さ

れます。

ここでは逆三角関数「ATAN」(ア

ークタンジェント ) 、三角関数

「COS」(コサイン)と「SIN」(サイン)

を使っています。

三角関数は高校の数学で、逆三

角関数は大学の数学で習います。

図に描くと右のようになりますが、

難しいので説明しません。

★プログラムを「SHOOT8」の名前で保存しましょう。

SAVE ”SHOOT8”

124 ‘--- ミサイル ハッシャ ---

125 @MISLFIRE

126 MS=1

127 MX=TX

128 MY=TY

129 MA=ATAN(TY-PY,TX-PX)

130 MDX=-COS(MA)

131 MDY=-SIN(MA)

132 SPOFS 21,MX,MY

133 SPSHOW 21

134 RETURN

ミサイルの移動量 MDX,MDYを

自機へ向かうように設定

Page 5: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/5

●ビームを連射する

これまでのプログラムでは、ビーム・敵・ミ

サイルなどが全て 1 個ずつしか画面上に

存在できません。

まず、ビームの数を増やして、連射できる

ようにしましょう。

ビームをいくつも増やして、それぞれ動かすには、

ビームのスプライト管理番号

ビームの存在変数 BM

ビームのx座標変数 BX

ビームのy座標変数 BY

などを、ビームの個数分だけ管理しなければいけません。

そのために、配列変数(はいれつへんすう)を使います。

配列変数は、「[」「]」(中かっこ)で番号が付いた変数です。

例 A[0] A[1] A[2] …それぞれ別の変数として扱われる。

この配列変数を使って、それぞれのビームを管理します。

今回は配列変数を 1~3 まで用意して、3発まで連射できるようにします。

●ビーム 1 個目

スプライト管理番号 1

ビームの存在変数 BM[1]

ビームの x座標 BX[1]

ビームの y座標 BY[1]

●ビーム 2 個目

スプライト管理番号 2

ビームの存在変数 BM[2]

ビームの x座標 BX[2]

ビームの y座標 BY[2]

●ビーム 3 個目

スプライト管理番号 3

ビームの存在変数 BM[3]

ビームの x座標 BX[3]

ビームの y座標 BY[3]

Page 6: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/6

プログラムの最初の、ビームの設定をする部分で、配列変数を使って 3 個分の設定をします。

配列変数を使うには、まず DIM(ディム、ディメンジョン)命令で、配列の個数を指定します。

DIM BM[4] ,BX[4] ,BY[4] …

配列の個数 配列の個数 配列の個数

配列の個数 配列変数として使う個数を指定する。

配列の番号は「0」から始まるので、最大番号は「個数-1」になる。

例えば、BM[4]と指定すると、BM[0]~BM[3]が使える。

3 個分の配列変数を設定するために、FOR(フォー)・NEXT(ネクスト)命令を使って、設定プ

ログラムを 3個分くり返します。

FOR B=1 TO 3 STEP 1

ループ変数

の初期値

終値 増分

ループ変数の初期値 くり返しの中で変化させる変数(ループ変数)の最初の値。

終値 ループ変数の最後の値。

増分 ループ変数を変化させる値。

STEP以下を省略すると 1ずつ増やす。

NEXT

FOR で始まったくり返し部分の最後。ループ変数が終値になっていなければ FOR まで戻る。

1 ‘*** SHOOT9 ***

(中略)

25 ‘--- ビーム ---

26 DIM BM[4],BX[4],BY[4]

27 FOR B=1 TO 3

28 BM[B]=0

29 SPSET B,1305

30 SPHOME B,4,8

31 SPROT B,90

32 SPHIDE B

33 SPCOL B,-8,-4,16,8

34 NEXT

35

36 ‘--- テキ ---

ビーム存在変数を配列にする。0を設定。

ビームのスプライト

(管理番号 B番)を設定

変数 Bを変化させてくり返し

タイトルを「SHOOT9」にする

変数 Bを 1~3までくり返し

配列変数を 0~3まで 4個設定

Page 7: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/7

今回は、ループ変数 B を 1,2,3 にして 3 回くり返して、ビームのスプライトなどを 3 個分設定

しています。

次に、自機を動かすループで、ビームを 3個分処理するようにします。

ビーム発射・ビーム移動サブルーチンは、配列変数を使ってB番目のビームを処理します。

49 ‘--- ジキヲ ウゴカス ---

(中略)

56 SPOFS 0,PX,PY

57

58 FOR B=1 TO 3

59 IF (BUTTON(2) AND 16)==16 AND

BM[B]==0 THEN GOSUB @BEAMFIRE:B=3

60 NEXT

61

62 FOR B=1 TO 3

63 IF BM[B]==1 THEN GOSUB @BEAMMOVE

64 NEXT

65

66 IF RND(100)<1 AND TK==0 THEN

GOSUB @TEKIDERU

わかりやすくするため、1行空ける

わかりやすくするため、1行空ける

わかりやすくするため、1行空ける

Bを 1~3までくり返し

Bを 1~3までくり返し

ビームを 1個発射したら

くり返しを終わる

88 ‘--- ビーム ハッシャ ---

89 @BEAMFIRE

90 BM[B]=1

91 BX[B]=PX+16

92 BY[B]=PY

93 SPOFS B,BX[B],BY[B]

94 SPSHOW B

95 RETURN

96

97 ‘--- ビーム イドウ ---

98 @BEAMMOVE

99 BX[B]=BX[B]+8

100 SPOFS B,BX[B],BY[B]

101 IF BX[B]>400 THEN BM[B]=0:SPHIDE B

102 IF SPHITSP(B,11)==1 THEN GOSUB @

BEAMTEKIHIT

103 RETURN

B番目のビームを発射する

B番目のビームを移動

Page 8: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/8

ビームと敵が当たった時のプログラムも、B番目のビームを消すようにします。

プログラムを実行してみましょう。

ビームが 3発まで連射できるようになりま

す。

配列の個数や、それぞれの FOR~NEXT のくり返し数を変えると、ビームが連射できる数が

変わります。いろいろ試してみましょう。

★プログラムを「SHOOT9」の名前で保存しましょう。

SAVE ”SHOOT9”

123 ‘--- ビーム・テキ ヒット ---

124 @BEAMTEKIHIT

125 BM[B]=0

126 SPHIDE B

127 TK=0

128 SPANIM 11,3,10,1376,10,1377,

10,1378,10,1379,10,32,1

B番目のビームを消す

Page 9: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/9

●敵の数を増やす

配列変数を使って、ビームが連射で

きるようになりました。

同じように配列変数を使って、敵とミ

サイルの数を増やしてみましょう。

まずは敵を 3機に増やします。

プログラムの最初、敵の設定で、配列変数を設定します。

敵の配列変数は 14個設定していますが、実際は 11~13番の 3個しか使いません。

(スプライトの管理番号に合わせています)

1 ‘*** SHOOT10 ***

(中略)

36 ‘--- テキ ---

37 DIM TK[14],TX[14],TY[14]

38 FOR T=11 TO 13

39 TK[T]=0

40 SPSET T,1210

41 SPHOME T,8,8

42 SPCOL T,-8,-8,16,16

43 SPHIDE T

44 NEXT

45

46 ‘--- ミサイル ---

敵存在変数を配列にする。0を設定。

敵のスプライト

(管理番号 T番)を設定

Tを変化させてくり返し

タイトルを「SHOOT10」にする

Tを 11~13までくり返し

配列変数を 14個設定

Page 10: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/10

次に、自機を動かすループで、敵を 3機分処理するようにします。

ビーム移動サブルーチンで、それぞれの敵との当たり判定をするようにします。

104 ‘--- ビーム イドウ ---

105 @BEAMMOVE

106 BX[B]=BX[B]+8

107 SPOFS B,BX[B],BY[B]

108 IF BX[B]>400 THEN BM[B]=0:SPHIDE B

109 FOR T=11 TO 13

110 IF SPHITSP(B,T)==1 THEN GOSUB @

BEAMTEKIHIT

111 NEXT

112 RETURN

113

114 ‘--- テキ トウジョウ ---

53 ‘--- ジキヲ ウゴカス ---

(中略)

66 FOR B=1 TO 3

67 IF BM[B]==1 THEN GOSUB @BEAMMOVE

68 NEXT

69

70 FOR T=11 TO 13

71 IF RND(100)<1 AND TK[T]==0 THEN

GOSUB @TEKIDERU

72 NEXT

73

74 FOR T=11 TO 13

75 IF TK[T]==1 THEN GOSUB @TEKIMOVE

76 NEXT

77

78 IF RND(100)<2 AND MS==0 AND

TK[11]==1 THEN GOSUB @MISLFIRE

79 IF MS==1 THEN GOSUB @MISLMOVE

わかりやすくするため、1行空ける

とりあえず 11番の敵からミサイル発射 (※あとで直します)

Tを 11~13までくり返し

Tを 11~13までくり返し

わかりやすくするため、1行空ける

1~3番目の敵とそれぞれ当たり判定

Page 11: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/11

敵登場サブルーチンも、配列変数をTで指定しながら、各機の処理をします。

敵の移動・ビームとの当たり処理サブルーチンも、配列変数で各機の処理をします。

114 ‘--- テキ トウジョウ ---

115 @TEKIDERU

116 TK[T]=1

117 TX[T]=391

118 TY[T]=RND(208)

119 SPOFS T,TX[T],TY[T]

120 SPSHOW T

121 SPANIM T,3,10,1210,10,1211,10,1212,0

122 RETURN

124 ‘--- テキ イドウ ---

125 @TEKIMOVE

126 TX[T]=TX[T]-2

127 SPOFS T,TX[T],TY[T]

128 IF TX[T]<0 THEN TK[T]=0:SP

HIDE T

129 IF SPHITSP(0,T)==1 THEN GM=1

130 RETURN

131

132 ‘--- ビーム・テキ ヒット ---

133 @BEAMTEKIHIT

134 BM[B]=0

135 SPHIDE B

136 TK[T]=0

137 SPANIM T,3,10,1376,10,1377,10,

1378,10,1379,10,32,1

138 SC=SC+10

139 LOCATE 0,0

140 PRINT ”SCORE ”;SC

141 RETURN

T番目の敵の処理をするように変更

T番目の敵の処理をするように変更

T番目の敵の処理をするように変更

Page 12: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/12

ミサイル発射サブルーチンは、とりあえず 1機目の敵からミサイルを発射するようにします。

(※あとで直します)

プログラムを実行してみましょう。

敵が 3機登場するようになります。

143 ‘--- ミサイル ハッシャ ---

144 @MISLFIRE

145 MS=1

146 MX=TX[11]

147 MY=TY[11]

148 MA=ATAN(TY[11]-PY,TX[11]-PX)

149 MDX=-COS(MA)

150 MDY=-SIN(MA)

151 SPOFS 21,MX,MY

152 SPSHOW 21

153 RETURN

ミサイルを 1機目(11番)の

敵から発射するように設定

Page 13: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/13

●ミサイルの数を増やす

敵と同じように、配列変数を使ってミサイルの数を 3発まで増やしてみましょう。

プログラムの最初、ミサイルの設定部分で、配列変数を使って設定します。

配列変数は 0~23番で設定しますが、実際は 21~23番の 3個しか使いません。

次に、自機を動かすループで、ミサイルを 3発分処理するようにします。

82行では、ミサイルのループ変数Mが 21~23、敵の管理番号が 11~13番なので、敵の存

在変数を「TK[M-10]」と指定しています。

56 ‘--- ジキヲ ウゴカス ---

(中略)

77 FOR T=11 TO 13

78 IF TK[T]==1 THEN GOSUB @TEKIMOVE

79 NEXT

80

81 FOR M=21 TO 23

82 IF RND(100)<2 AND MS[M]==0 AND

TK[M-10]==1 THEN GOSUB @MISLFIRE

83 NEXT

84

85 FOR M=21 TO 23

86 IF MS[M]==1 THEN GOSUB @MISLMOVE

87 NEXT

88

89 VSYNC 1

90 IF GM==0 THEN GOTO @MOVELOOP

46 ‘--- ミサイル ---

47 DIM MS[24],MX[24],MY[24] ,MDX[24],

MDY[24]

48 FOR M=21 TO 23

49 MS[M]=0

50 SPSET M,1322

51 SPHOME M,4,4

52 SPCOL M,-4,-4,8,8

53 SPHIDE M

54 NEXT

55

56 ‘--- ジキヲ ウゴカス ---

配列を 24個(0~23番)設定

21~23番の変数とスプライトを設定

わかりやすくするため、1行空ける

Mを 21~23までくり返し

Mを 21~23までくり返し

わかりやすくするため、1行空ける

わかりやすくするため、1行空ける

Page 14: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/14

ミサイルの発射・移動サブルーチンも、配列変数を使ったプログラムに変更します。

プログラムを実行してみましょう。

ミサイルも 3 発まで出るようになりま

す。

★プログラムを

「SHOOT10」の名前で

保存しましょう。 SAVE ”SHOOT10”

155 ‘--- ミサイル ハッシャ ---

156 @MISLFIRE

157 MS[M]=1

158 MX[M]=TX[M-10]

159 MY[M]=TY[M-10]

160 MA=ATAN(TY[M-10]-PY,TX[M-10]

-PX)

161 MDX[M]=-COS(MA)

162 MDY[M]=-SIN(MA)

163 SPOFS M,MX[M],MY[M]

164 SPSHOW M

165 RETURN

166

167 ‘--- ミサイル イドウ ---

168 @MISLMOVE

169 MX[M]=MX[M]+MDX[M]

170 MY[M]=MY[M]+MDY[M]

171 SPOFS M,MX[M],MY[M]

172 IF MX[M]<0 OR MX[M]>399 THEN

MS[M]=0:SPHIDE M

173 IF MY[M]<0 OR MX[M]>239 THEN

MS[M]=0:SPHIDE M

174 IF SPHITSP(0,M)==1 THEN GM=1

175 RETURN

M 番目のミサイルを M-10番の

敵から発射するように設定

M番目のミサイルを移動

Page 15: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/15

●敵の動きを変える

敵の動きがただ真っ直ぐ飛んでくるだけなので、動き方を変えてみましょう。

まず、プログラムの最初の敵の設定で、新しい配列変数 TY0[]を設定します。

敵の登場・移動サブルーチンで、動きを変えます。

プログラムを実行してみましょう。敵が上下にカーブしながら飛んできます。

1 ‘*** SHOOT11 ***

(中略)

36 ‘--- テキ ---

37 DIM TK[14],TX[14],TY[14],TY0[14]

38 FOR T=11 TO 13

126 ‘--- テキ トウジョウ ---

127 @TEKIDERU

128 TK[T]=1

129 TX[T]=391

130 TY0[T]=RND(208)

131 TY[T]=TY0[T]+50*SIN(TX[T]/50)

132 SPOFS T,TX[T],TY[T]

133 SPSHOW T

134 SPANIM T,3,10,1210,10,1211,10,1212,0

135 RETURN

136

137 ‘--- テキ イドウ ---

138 @TEKIMOVE

139 TX[T]=TX[T]-2

140 TY[T]=TY0[T]+50*SIN(TX[T]/50)

141 SPOFS T,TX[T],TY[T]

142 IF TX[T]<-16 THEN TK[T]=0:SPHIDE 11

143 IF SPHITSP(0,T)==1 THEN GM=1

144 RETURN

TY0 と SIN関数を使って y座標を設定

タイトルを「SHOOT11」にする

配列変数 TY0[]を追加

TY0 と SIN関数を使って y座標を設定

Page 16: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/16

●自機をスライドパッドで操作する

これまで自機の操作は十字キーだけでしたが、スライドパッドでも操作で

きるようにしてみましょう。斜めの動きがやりやすくなります。

自機を動かすループで、スライドパッドの操作を読み取るプログラムを追

加します。

プログラムを実行してみましょう。

自機をスライドパッドで操作できます。

スライドパッドの操作を読み取るには、

STICK OUT(スティックアウト)命令を使います。

STICK OUT SX ,SY

横方向の

スライド量

変数

縦方向の

スライド量

変数

横方向のスライド量変数 横方向のスライド量を格納する変数。返る値は-1~+1。

縦方向のスライド量変数 縦方向のスライド量を格納する変数。返る値は-1~+1。

★プログラムを「SHOOT11」の名前で保存しましょう。

SAVE ”SHOOT11”

56 ‘--- ジキヲ ウゴカス ---

(中略)

62 IF (B AND 8)==8 AND PX<384 THEN PX

=PX+2

63 STICK OUT SX,SY

64 PX=PX+SX*2.5

65 PY=PY-SY*2.5

66 IF PX<16 THEN PX=16

67 IF PX>384 THEN PX=384

68 IF PY<16 THEN PY=16

69 IF PY>224 THEN PY=224

70 SPOFS 0,PX,PY

スライドパッドを読み取って

自機の座標 PX,PYを変える

はみ出しチェック

Page 17: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/17

●背景を表示する

これまで真っ暗な背景でゲームを作ってきましたが、背景を表示してみましょう。

まず、画面下に地面を表示してみます。

プログラムを実行してみましょう。

画面下に地面が表示されます。

プチコンでは、背景(BG=バックグラウンド)にいろいろな BGキャラ(16×16 ドット)を表示で

きます。

57行で、BGSCREEN(ビージースクリーン)命令で背景レイヤーの大きさを設定しています。

BGSCREEN 0 ,50 ,15

BGレイヤー

番号

横方向の

大きさ

縦方向の

大きさ

BGレイヤー番号 0~3で指定。

横方向の大きさ BGレイヤーの横方向サイズ(キャラ単位で指定。25で横いっぱい)

縦方向の大きさ BGレイヤーの縦方向サイズ(キャラ単位で指定。15で縦いっぱい)

1 ‘*** SHOOT12 ***

(中略)

46 ‘--- ミサイル ---

(中略)

54 NEXT

55

56 ‘--- ハイケイ ---

57 BGSCREEN 0,50,15

58 FOR X=0 TO 49

59 BGPUT 0,X,14,334

60 NEXT

61

62 ‘--- ジキヲ ウゴカス ---

63 @MOVELOOP

背景スクリーンの大きさを設定

BG スクリーンの左下~右下に

地面の BGパーツを置く

タイトルを「SHOOT12」にする

Page 18: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/18

あとで横にスクロールさせたいので、横 2画面分のサイズの BGレイヤーを設定しています。

58~60 行では、BGPUT(ビージープット)命令で、BG レイヤーに地面の BG キャラ(334 番)

を横に 50個並べて表示しています。

BGPUT 0 ,X ,14 ,334

BG レイヤー

番号

x座標 y座標 キャラ

番号

BGレイヤー番号 0~3で指定。

x座標 キャラを置く位置の x座標(キャラ単位で指定)。

y座標 キャラを置く位置の y座標(キャラ単位で指定)。

キャラ番号 表示したい BGキャラの番号。

BGキャラの番号を変えると、地面のキャラが変わります。

いろいろ試してみましょう。

Page 19: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/19

★背景のスクロール

今表示させた地面を、横にスクロールさせて動かしてみましょう。

最初の設定部分で、BG レイヤーの原点の x座標を表す変数 BGXを追加します。

自機を動かすループの最後で、背景をスクロールするサブルーチンを呼びます。

プログラムの最後に、背景をスクロールするサブルーチンを追加します。

プログラムを実行してみましょう。

背景の地面がスクロールして動きます。

56 ‘--- ハイケイ ---

57 BGSCREEN 0,50,15

58 FOR X=0 TO 49

59 BGPUT 0,X,14,334

60 NEXT

61 BGX=0

62

63 ‘--- ジキヲ ウゴカス ---

64 @MOVELOOP

BG レイヤーの原点 x座標。最初は 0。

63 ‘--- ジキヲ ウゴカス ---

(中略)

99 FOR M=21 TO 23

100 IF MS[M]==1 THEN GOSUB @MISLMOVE

101 NEXT

102

103 GOSUB @BGSCROLL

104 VSYNC 1

105 IF GM==0 THEN GOTO @MOVELOOP

背景をスクロールするサブルーチンを呼ぶ

193

194 ‘--- ハイケイ スクロール ---

195 @BGSCROLL

196 BGX=BGX+1

197 IF BGX>399 THEN BGX=0

198 BGOFS 0,BGX,0

199 RETURN

Page 20: プチコンで横スクロールシューティングゲームを作る(3)プチコンで横スクロールシューティングゲームを作る(3)/7 今回は、ループ変数

上田市マルチメディア情報センター

プチコンで横スクロールシューティングゲームを作る(3)/20

背景のスクロールには、BGOFS(ビージーオフセット)命令を使っています。

BGレイヤーの中で、どの部分を画面に表示するか、位置を指定する命令です。

BGOFS 0 ,BGX ,0

BG レイヤー

番号

表示位置

x方向

変化量

表示位置

y方向

変化量

BGレイヤー番号 0~3で指定。

表示位置

x方向変化量

BG レイヤー中で、画面に表示する位置を x 方向

にずらす量(ドット単位で指定)。

表示位置

y方向変化量

BG レイヤー中で、画面に表示する位置を y 方向

にずらす量(ドット単位で指定)。

197行で BGXの値を 1増やし、199行の BGOFS命令で表示位置を 1 ドット右へずらしてい

ます。

そのままだと表示エリアが BGレイヤーの右はじを突きぬけてしまうので、198行で BGXを元

にもどしています。

197行の BGXの変化量を変えると、背景スクロールの速さが変わります。

いろいろ試してみましょう。

★プログラムを「SHOOT12」の名前で保存しましょう。

SAVE ”SHOOT12”