ユーザ用ツール


guide16

16:弾(たま)を当てるには

いよいよてきをやっつけられるんだな!
じゃあいつものように。てきをやっつけるって、なにをすればいいのかな?
そんなのカンタンだぜ!てきにタマがたったらてきがブッこわれる!
じゃあ、てきたまたったらって、どうやったらわかるかな?
そんなのカンタンだぜ!てきにタマが・・・あれ?スマイルベーシックってそんなこともわかんねーのかよ!
前回ぜんかいハカセがってたとおり、プログラミング言語げんごってのは命令めいれいしたことしかしないんだ。そしててきたまたったかどうか調しらべる命令めいれいなんて存在そんざいしないし、そもそもどれがてきでどれがたまかなんてことらない全部ぜんぶプログラムしてあげなきゃダメなのさ。
ワタシはちがいますがネー!
やがったなダミー!
でやがったななんてひとをオバケのようにっちゃだめでショートサカあたま!アタシはひとでないですがネーHAHAHAハハハ
おいインテリ、こいつもプログラムなんだろう?なんでこんなにへらずぐちをたたけるんだ!
くちるもんじゃナイヨ。ってりないのはオマエサンの脳味噌のうみそだヨ!
ダミーはAIエーアイだからねえ。直接ちょくせつこのしゃべりかたをプログラムしたわけじゃなくて、たくさんのおしゃべりを学習がくしゅうしたら勝手かってにこんなしゃべりかたになっちゃってこまってるんだよ・・・
インテリ、ドンマイ!なやみがあるなら相談そうだんにノルヨ!人生じんせい相談そうだんもいっぱい学習がくしゅうしたカラね!
ああ・・・
・・・
ともかくはなしさきすすめよう。あらためて、てきたまたったらって、どうやったらわかるかな?
そんなのカンタンだぜ!たり判定はんていデスヨ!
アタリハンテイ?なんだそりゃ?
ああもう、こたえをっちゃったし。そう、たり判定はんていっていうのを使つかうんだ。
たり判定はんていってのは、そのとおり、たったかどうかを判定はんていするっていう意味いみだよ。
つまり、てきたまたったかたらないかを、そのたり判定はんていっていうので判定はんていできるってこと?
そういうこと!
なんだよ、ベンリなものがあるんじゃねーか!ダミーおまえってんだろう?そいつをおしえろよ!
いやらネー
なにい?
ワタシのプログラムには使つかわれてマセンし。たり判定はんていおおきすぎだこのクソゲー!とかたり判定はんていバグってるこのクソゲー!ってるひとならネットにいまシタよ。
そんだけかよ!
ダミーがひろってきたのは、ゲームのたり判定はんていらなくて文句もんくっている人達ひとたちはなしで、プログラミングとは無関係むかんけいだね。実際じっさいダミーのプログラムではたり判定はんてい必要ひつようないからまれていないよ。
たり判定はんていっていうのはさきもったとおたったかどうかを判定はんていするっていうだけの意味いみで、判定はんていする方法ほうほうにはいろんな方法ほうほうがあるんだ。今回こんかい一番いちばんカンタンな方法ほうほう使つかおう。じつSmileBASICスマイルベーシックのスプライトはカンタンなたり判定はんていおこな機能きのうはいっているんだ。
まずはSPCOLエスピーコル命令めいれい。これはスプライトにたり判定はんていよう長方形ちょうほうけい設定せっていする命令めいれいさ。設定せってい方法ほうほう何種類なんしゅるいかあるけど、まずは一番いちばんカンタンなのを使つかおう。
スプライトのまったおな場所ばしょおおきさの長方形ちょうほうけいでいいなら、これだけでいいよ!

 SPCOL スプライトID

たりを判定はんていしたいスプライトには全部ぜんぶ設定せっていする必要ひつようがあるから注意ちゅういしてね。今回こんかいてきたま両方りょうほうだね。
あとは、たとえばてきたまたりをチェックしたいときに、SPHITSPエスピーヒットエスピー関数かんすう使つかえばOK!。たったら1、たっていなかったら0をかえすんだ。

 IF SPHITSP(敵,弾)==1 THEN 当った時の処理

本当ほんとうはちゃんと数学的すうがくてき基本きほんからおぼえといたほうがいいんだけど、ちょっとむずかしいから説明せつめい省略しょうりゃくするよ。ともかく、これでスプライト同士どうしたったかどうかはチェックできるよ。
なんだよ、さんざんおどかしといていいモノがあるじゃねえか!
あとはたったとき処理しょりだね。たったらどうしたい?
そりゃあ爆発ばくはつだろう!ゲージュツてき爆発ばくはつさせようぜ!
爆発ばくはつさせるのはまだちょっとむずかしいかな。今回こんかいおとしててきすだけにしようか。
チェッ、つまらねえが今日きょうのところは勘弁かんべんしといてやるぜ。
スプライトをすのは、このまえ使つかったSPCLRエスピークリア命令めいれい使つかうよ。
おとすにはBEEPビープ命令めいれい使つかうよ。BEEP おと番号ばんごういろんなおとらせるんだ。おと番号ばんごうはスマイルツールで確認かくにんできるよ。
よし、それだけわかれば十分じゅうぶんだ!

・テキにたり判定はんていをつける
・テキがいるときだけテキをうごかす
・SPHITSPでタマにたってるか調しらべて、たってたらテキとタマを

ってことだな。仕様しようもバッチリ。じゃあプログラムをくぜ!

 '---てき----------------------------
 'てきのかず
 ECOUNT=10
 'てきのざひょう
 DIM EX[ECOUNT]
 DIM EY[ECOUNT]
 'てきのそくど
 DIM EVX[ECOUNT]
 DIM EVY[ECOUNT]
 'てきのいどうじかん
 DIM ETIME[ECOUNT]
 'てきがいる?
 DIM ENEMY[ECOUNT]
 'てきのスプライトID
 DIM EID[ECOUNT]
 
 'てきざひょうしょきか
 FOR I=0 TO ECOUNT-1
  EX[I]=200
  EY[I]=60
 NEXT
 
 'てきのスプライトをつくる
 FOR I=0 TO ECOUNT-1
  EID[I]=100+I
  SPSET EID[I],1203
  SPOFS EID[I],EX[I],EY[I]
  SPCOL EID[I]:'てきにあたりはんていをつける
  ENEMY[I]=1 'てきがいるときは1に
 NEXT
 
 '---プレイヤー-------------------------
 'プレイヤーのざひょう
 PX=200
 PY=200
 'プレイヤーのスプライトID
 PID=10
 'プレイヤーのえのばんごう
 PPIC=3323
 'たまのスプライトID
 TID=20
 'たまのえのばんごう
 TPIC=3386
 'たまがある?
 TAMA=0
 
 'プレイヤーのスプライトをつくる
 SPSET PID,PPIC
 SPOFS PID,PX,PY
 
 '---メインループ-----------------------
 LOOP
  '---プレイヤーしょり----------------------
  'さゆうにうごかす
  IF BUTTON(1,#B_LLEFT)==1 THEN PX=PX-1
  IF BUTTON(1,#B_LRIGHT)==1 THEN PX=PX+1
  IF PX<0 THEN PX=0
  IF PX>400-16 THEN PX=400-16
  SPOFS PID,PX,PY
  'まずたまがないことをチェック
  IF TAMA==0 THEN
   'つぎにボタンをチェック
   IF BUTTON(1,#B_RRIGHT)==1 THEN
    'たまはっしゃ!
    'たまのざひょうはプレイヤーとおなじ!
    TX=PX:TY=PY
    SPSET TID,TPIC
    SPOFS TID,TX,TY
    SPCOL TID:'たまもあたるように!
    BEEP 111:'はっしゃおんもだすぜ!
    TAMA=1
   ENDIF
  ENDIF
  'たまがあるときだけ!
  IF TAMA==1 THEN
   'たまをうえにうごかす
   TY=TY-5
   SPOFS TID,TX,TY
   'たまががめんからとびでたか?
   IF TY<0 THEN
    TAMA=0
    SPCLR TID
   ENDIF
  ENDIF
 
  '---てきしょり-------------------------
  FOR I=0 TO ECOUNT-1
   IF ENEMY[I]==1 THEN
    IF ETIME[I]==0 THEN
     'うごくほうこうをきめる
     EVX[I]=RND(3)-1
     EVY[I]=RND(3)-1
     ETIME[I]=20
    ENDIF
 
    'てきをうごかす
    ETIME[I]=ETIME[I]-1
    EX[I]=EX[I]+EVX[I]
    EY[I]=EY[I]+EVY[I]
    SPOFS EID[I],EX[I],EY[I]
 
    IF SPHITSP(TID,EID[I]) THEN
     'あたった!
     BEEP 11:'ばくはつ!
     SPCLR EID[I]:'てきをけす
     ENEMY[I]=0:'てきがいなくなったので0にする
     SPCLR TID:'たまもけす
     TAMA=0
    ENDIF
   ENDIF
  NEXT
  VSYNC
 ENDLOOP

あんがいカンタンにけたな。いきおいでたま発射音はっしゃおんもつけてやったぜ!
ワンパクくん、カンペキだよ!てきたまたったときに、てきだけじゃなくちゃんとたましてるじゃないか。きっとそのままんでくだろうとおもったのに。
ヒヒヒ。ほめてもなにないぜ!
SmileBASICスマイルベーシックはゲームで使つかうけどくのが大変たいへん処理しょりをカンタンにける命令めいれいをいろいろっているんだ。たり判定はんていもそのひとつだね。スプライトのだけじゃなくおともゲームよう効果音こうかおんBGMビージーエムをいっぱいっているよ。
なに?BGMビージーエムもならせるのか!せっかくだからなんかならそうぜ!
そうだね。じゃあスマイルツールを使つかって、らしたいBGMビージーエムさがしてみてよ
どれどれ・・・よし、40ばんだ!もっとかっこいいきょくもあるけど、それはすげえラスボスようにとっておくぜ
OK!BGMビージーエムらす方法ほうほうはカンタンだよ。BGMPLAYビージーエムプレイ きょく番号ばんごうらせるんだ。
なるほどな、じゃあプログラムの一番最初いちばんさいしょBGMPLAY 40いて、実行じっこう


おー!
おとがつくと一気いっき本物ほんもののゲームっぽくなるね!
そうだね!おとってのはゲームをげるすごく大事だいじ要素ようそなんだ。だからなかにはおと一番いちばん最後さいごにつけるひともいるんだよ。
げる大事だいじ要素ようそなら一番いちばん最初さいしょにつけといたほうがいいんじゃねえか?
ゲームが本当ほんとうにおもしろいかどうかがおとでごまかされちゃうのをきらうんだ。おとがなくても本当ほんとう面白おもしろいゲームは面白おもしろいからっていうリクツだね。
ふん、なかにはいろんなヤツがいるな。オレはもちろん最初さいしょからがるほうがいいぜ!
そのかんがかたはワンパクくんらしいのう!ところで、おとがっているが、なんかこう物足ものたりないところはないかのう。
なんだジジイ、ひと成果せいかにケチつけにきたのか?不満点ふまんてんなんてないぜ!みいるてき連射れんしゃ連射れんしゃ・・・あれ、連射れんしゃがきかねえぞ?
まさにおとでごまかされるとるのう。
くそっ、インテリ!どうすりゃ連射れんしゃできるんだ!
連射れんしゃかあ・・・てきやしたのとおなじようなことたまでもやればいいんだけど・・・
ムリムリー、大改造だいかいぞうじゃないデスカ。インテリさん、ニワトリみたいなあたまにはムリですヨー、3アルいたらわすれちゃいマス。
うおー、ダミーてめえ!
IFぶんふたつつなげるだけで論理ろんり演算えんざん使つかえないようなヤツにはムリムリー。じゃあサヨナラー。
うっ
うっ
インテリ!ジジイ!そのロンリーエンジンだかなんだかをおしえろ!ギザギザおんな見返みかえしてやるぜ!
うう・・・
うう・・・
二人ふたりそろってしぶかおしてどうしたの?



今回のポイント

当たり判定

ゲームないもの同士どうしたったかどうかを調しらべることたり判定はんていいます。また、ゲームないものたり判定はんていよう情報じょうほう設定せっていすることたり判定はんていをつけるったりします。
たり判定はんてい調しらかたはいろいろな方法ほうほうがありますが、SmileBASICスマイルベーシックではAABBエーエービービーほう(じく平行へいこう境界きょうかいボックスほう)というシンプルな方法ほうほう使つかったたり判定用はんていよう命令めいれい用意よういされています。

SPCOL

スプライトにたり判定はんてい設定せっていする命令めいれいです。SPCOLエスピーコル スプライト番号ばんごう指定していしたスプライトにおな場所ばしょおおきさのたり判定はんてい設定せっていすることができますほかにもおおきさや位置いち自分じぶんでセットしたりする使つかかたもありますので、ヘルプを参照さんしょうしてください。

SPHITSP

SPCOLエスピーコルたり判定はんてい設定せっていしたスプライト同士どうしたっているかどうかをかえ関数かんすうです。SPHITSPエスピーヒットエスピー(スプライト番号ばんごうA,スプライト番号ばんごうB)で、スプライトAとスプライトBがたっているかどうかを調しらべることができますほかにも何通なんとおりかの使つかかたがあるので、ヘルプを参照さんしょうしてください。

BEEP

効果音こうかおんらす命令めいれいです。効果音こうかおんとは、たま発射はっしゃしたり、ジャンプしたり、ものこわれたりといったときらすおとことです。BEEPビープ 音番号おとばんごう で、指定していしたおとらせます音番号おとばんごうはスマイルツールでさがことができます。

BGMPLAY

BGMビージーエム再生さいせいする命令めいれいです。BGMビージーエムはゲームなかながれている音楽おんがくことです。BGMPLAYビージーエムプレイ BGMビージーエム番号ばんごうで、指定していしたBGMビージーエム再生さいせいできますBGMビージーエム番号ばんごうはスマイルツールでさがことができます。

BGMSTOP

本編ほんぺんにはてきませんが、BGMビージーエムめる命令めいれいです。引数ひきすうなしのBGMSTOPビージーエムストップ現在げんざいながれているBGMビージーエムまります引数ひきすうを1つけると、ながれているBGMビージーエム音量おんりょう徐々じょじょちいさくしてめることができます(フェードアウトいます)。ヘルプを参照さんしょうしてください。

SNDSTOP

この命令めいれい本編ほんぺんにはてきませんが、おぼえておくと便利べんり命令めいれいです。SNDSTOPサウンドストップ命令はその時再生ときさいせいされているおとをすべてめます。BEEPビープBGMPLAYビージーエムプレイでいろいろためしたときBGMSTOPビージエムストップでもおとまらなくなることがありますが、そのようなときにもSNDSTOPサウンドストップはすべてのおとめることができます。

サンプルプログラムの公開キー

4QJS3EE83



やれやれ、次回じかい論理ろんり演算えんざんか。ワンパクくん神崎かんざきくんも、もちろん画面がめんこうのキミもえられるといいんじゃがのう。
それはさておき、問題もんだいすぞい!
その1:いろんなきょくBGMビージーエムにしてプログラムをうごかしてみるのじゃ!このゲームにわないきょくをつけるとびっくりするくらいおもしろくなくなるぞい。BGMビージーエム大事だいじじゃのう。
その2:インテリくんてきたまたったときに、てきだけじゃなくちゃんとたましてるじゃないか。きっとそのままんでくだろうとおもったのに。」っておったのう?実際じっさいてきたったときたまさなかった場合ばあいどうなるかプログラムをいじって調しらべてみてくれい。いじるのは107行目ぎょうめと108行目ぎょうめあたりじゃなかろうかの!
今回こんかい以上いじょうじゃ!

guide16.txt · 最終更新: 2019/08/30 12:25 (外部編集)

ページ用ツール