ユーザ用ツール


guide14

14:敵(てき)は幾万(いくまん)ありとても

さて、まがりなりにもザコっぽいうごものはだせたね。
とはいえ、1匹いっぴきだけってのはさみしくはねえか?画面がめんはこんなにでかいのによう。
そうだねえ、本当ほんとうはここにプレイヤーキャラをしてからてきをふやそうとおもってたんだけど・・・
おまえのことだからどうせあの左右さゆううごくイチゴをくっつけるつもりだろう。結果けっかかりきってるものをくっつけるのはつまらねえから、さきにテキをふやそうぜ!
うーん、ちょっとむずかしいアレが必要ひつようになるんだけどだいじょうぶかなあ・・・キミたちのセンスに期待きたいして、やってみようか!
そうこなくちゃな!
むずかしいアレって、なんだかイヤな予感よかんがするなあ。
神崎かんざきくんよ、けばわかるさ!オレは王道おうどうコースより目先めさきたのしみをるぜ!
・・・



まずはバカ正直しょうじきに、てきを2つしてみよう。どうやればいいとおもう?
そりゃあ、テキのを2つせばいいわけだろう?スプライトを2つ使つかえばいいんじゃねえか?
そこまでは正解せいかい!でも座標ざひょうとかうごきとかはどうしようか?
このまえのプログラムを見ると・・・変数へんすうがいっぱいあったよな。2つにも同じような変数のセットを用意してやりゃあいいんだろう。
ちょっと改造かいぞうするぜ。

 'てきのざひょうが2つ
 EX=200:EY=60
 EX2=200:EY2=60
 
 'てきのそくどが2つ
 EVX=0:EVY=0
 EVX2=0:EVY2=0
 
 'てきのいどうじかんが2つ
 ETIME=0
 ETIME2=0
 
 'てきのスプライトIDが2つ
 EID=100
 EID2=101
 
 'いっぴきめ
 SPSET EID,1203
 SPOFS EID,EX,EY
 
 'にひきめ
 SPSET EID2,1203
 SPOFS EID2,EX2,EY2
 
 LOOP
  'いっぴきめ
  IF ETIME==0 THEN
   'うごくほうこうをきめる
   EVX=RND(3)-1
   EVY=RND(3)-1
   ETIME=20
  ENDIF
  
  'てきをうごかす
  ETIME=ETIME-1
  EX=EX+EVX
  EY=EY+EVY
  SPOFS EID,EX,EY
  
  'にひきめ
  IF ETIME2==0 THEN
   'うごくほうこうをきめる
   EVX2=RND(3)-1
   EVY2=RND(3)-1
   ETIME2=20
  ENDIF
  
  'てきをうごかす
  ETIME2=ETIME2-1
  EX2=EX2+EVX2
  EY2=EY2+EVY2
  SPOFS EID2,EX2,EY2
 
  VSYNC
 ENDLOOP

ゼエゼエ・・・2つにふやすのは結構けっこうホネだったが・・・これでどうだ!実行じっこう


すごいね!正解せいかいだよ!しかもちゃんとコメントまでれてあるなんて、なかなか行儀ぎょうぎいいじゃないか。
おギョウギいいってわれるのはシンガイだが、オレサマが本気ほんきせばこんなもんよ。
ワンパクくんのプログラムのとおり、てきを2つにやしたければ、変数へんすうのセットを2セット用意よういしなきゃないんだ。プログラムもほぼ2ばいながさになっちゃったから、ワンパクくんつかれるのも当然とうぜんだね。
よし、ウォーミングアップはこれくらいにして、本題ほんだいに行こう!
ナニー!ウォーミングアップだと!オレの力作りきさくがあ!
ワンパクくん、だいじょうぶ?
・・・だいじょうぶだ、けてたつぜインテリ!
じゃあくよ。今度こんどてきを10でも100でもせるようにしてみよう!
・・・
ワンパクくん?ワンパクくん
つまり、この変数へんすうのセットをしたいかずだけ用意よういすればいいんだな!いいだろう、100かいいてやるぜ!
そのやりかただとものすごく大変たいへんだってのはわかるね?そこで登場とうじょうするのが配列はいれつだよ!
ハイ・・・レツ・・・?
配列はいれつ変数へんすう一種いっしゅなんだ。ふつうの変数へんすうあたい1個いっこだけはいるよね?配列はいれつは、あたいをたくさんてる変数へんすうなんだよ。
またなにってるのかわからねえぞインテリ!ハコのなかにたくさんあたいれたら、わけがわからなくなっちまうじゃねえか!
もちろん、ほうりこんだあたい区別くべつして方法ほうほうがあるんだ。ふつうの変数へんすう一軒家いっけんやだとしたら、配列はいれつはアパートかマンションだとおもえばいいかな。百聞ひゃくぶん一見いっけんにしかず。配列はいれつ使つかったプログラムをてみよう!

 'てきのかず
 ECOUNT=10
 
 'てきのざひょう
 DIM EX[ECOUNT]
 DIM EY[ECOUNT]
 
 'てきのそくど
 DIM EVX[ECOUNT]
 DIM EVY[ECOUNT]
 
 'てきのいどうじかん
 DIM ETIME[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]
 NEXT
 
 LOOP
  'いっぴきずつしょり
  FOR I=0 TO ECOUNT-1
   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]
  NEXT
 
  VSYNC
 ENDLOOP



なんだかワンパクくんつくった2ひきバージョンよりもみじかくなってるがするね。
たことない記号きごうだらけになってるのはなんなんだ?それにこのDIMとかFORとか。
ひとつずつ説明せつめいするよ!
まずはDIMディム!これは配列はいれつつくってくれっていう命令めいれいだよ。厳密げんみつうとちょっとちがうんだけど、いまはそうおもっといてまちがいないよ。
5行目ぎょうめDIM EX[ECOUNT]だと、おおきさがECOUNTぶんある配列はいれつEXをつくってくれという意味いみになるんだ。そうするとほかのDIMの意味いみもわかるんじゃないかな。
おおきさがECOUNTぶんある配列はいれつってのがまずわからねえぞ。
さっき配列はいれつはアパートやマンションってったよね。そのれいうと、部屋へやすうがECOUNTあるってえばどうかな?ECOUNTは2行目ぎょうめで10をれてるから、部屋へやすう10のアパートをつくったってことさ。
つまり、ふつうの変数へんすうならEXなかにはあたいが1しかはいらないけど、配列はいれつだからあたいを10ほうめるってことでいいのかな?
そのとおり!さて、10部屋へやあるのはいいけど、どの部屋へや使つかうかを指定していしなきゃないよね?
それはつまり、部屋へや番号ばんごうみたいなものか?
そう!配列はいれつ部屋へや使つかときは、かならず部屋へや番号ばんごうもセットで指定していするんだ。部屋へや番号ばんごうのことを添字そえじとかインデックスってうよ。てきのスプライトをつくっているところで、配列はいれつあたいれたり、配列はいれつあたい使つかったりしてるんだけど、[Iアイ]っていうきかたがいっぱいてきてるよね?これが配列はいれつ添字そえじなんだ。EID[Iアイ]ってくと、EIDっていう配列はいれつIアイ番目ばんめ部屋へやっていう意味いみになるよ!
ははあ、そうわれるとなんとなく具体ぐたいてきなイメージがわいてきたぜ。
じゃあさきすすもう。もうひとつのFORフォー。これはこのプログラムでは配列はいれつってもれない関係かんけいなんだ。
以前いぜんLOOPループ命令めいれい説明せつめいをしたときに、ループにはほかにも種類しゅるいがあるってったのおぼえてるかな?ループはLOOPループを入れて4種類しゅるいきかたがあるんだけど、FORフォーはそのひとつなんだよ。
LOOPループENDLOOPエンドループとのあいだをグルグルまわるだけだったよね?
FORフォーはもうすこ動作どうさがややこしいんだ。まずFORフォーNEXTネクストとのあいだをグルグルまわる。このプログラムの19行目ぎょうめでもFORフォーあとに22行目ぎょうめNEXTネクストがきて、そのあいだでインデントしてるだろう?
LOOPループ相方あいかたENDLOOPエンドループで、FORフォー相方あいかたNEXTネクストなんだな?オーケーだぜ。
FORフォーLOOPループちがいなんだけど、FORフォーうしろでIアイっていう変数へんすうあたいをセットしてるよね?さらにそのうしろで、TOトゥ ECOUNT-1って書いてるだろ?
これはIアイを最初に0にして、IアイがECOUNT-1になるまでループして下さいっていう意味なんだ。つまり、FORフォーぶんFORフォー,TOトゥ,NEXTネクストの3つがコンビをんでるんだよ。
そして、NEXTネクストFORフォーに戻る以外にもうひとつ仕事しごとをするんだ。それは、「FORフォー指定していした変数へんすうかずを1ふやす」ってことさ。まとめると・・・
ヘイ、そこからさきはオレサマにまかせろ!まとめると・・・ええと・・・うう・・・
カッコよくめられなかったね
シャラーップ。ミスターカンザキ!
まとめると・・・Iアイ最初さいしょは0で、ループするたびに1,2,3となって、ECOUNT-1までったらループをける、ってことだな!
名答めいとう
でもそれが配列はいれつとどう関係かんけいするんだ?
うん、このプログラムでは配列はいれつはぜんぶ部屋へやECOUNT個、つまり10っているわけだよね?そして添字そえじ、つまり配列はいれつ部屋へや番号ばんごうは0,1,2というふうに0からはじまるんだ。そうすると、部屋へやすうが10だと、さいごの部屋へや番号ばんごうはいくつになるかな?
えーと、0,1,2,3,4,5,6,7,8,9で10だから、9だな?
そう!そして、FORフォーIアイはいくつからいくつまでまわつづけるかな?
0からECOUNT-1までだから、0から9までか・・・!!
ループのたびにIアイは0から9までわっていく、そしてループのなかでは配列はいれつ部屋へや番号ばんごうはかならずIアイ。ってことは、ループのなか配列はいれつなかぜん部屋へやてるのか!
ふふ、気付きづいたね?
えーっと、配列はいれつ名前なまえ前回ぜんかいのプログラムとまったくおなじで、それぞれが配列はいれつ使つかって部屋へやを10つようになっているわけだよね。で、FORフォーでその部屋へや全部ぜんぶ巡回じゅんかいしながら、前回ぜんかいとまったくおな処理しょりをしている・・・
配列はいれつ使つかうと、てきかずぶん変数へんすうをふやさなくても、部屋へやをふやせばきなだけてきをふやせる!くそ!なんてこった!
もう配列はいれつ便利べんりさに気付きづいたようだね!そう。おなじようなもの何個なんこときに、配列はいれつ使つかうとすごくらくができるんだ。
さて、もう少し配列はいれつこまかなところ説明せつめいするね。
配列はいれつ部屋へやことを、ちゃんとした言葉ことばでは要素ようそ部屋へやすう要素ようそすうぶよ。部屋へや番号ばんごう添字そえじもしくはインデックスだったね。
配列はいれつ要素ようそ、つまり配列はいれつ部屋へやのデータをれするには、このプログラムにあるように[ ]なか添字そえじくんだ。ここではみんなIアイ添字そえじ、つまり部屋へや番号ばんごうにしているね。[ ]しき使つかうふつうのまるい括弧かっこじゃないから注意ちゅういしてね!
配列はいれつ要素ようそ、つまり配列はいれつ[添字そえじ]いたものは、ふつうの変数へんすうとまったくおなじように使つかえるよ。あたいれても、計算けいさん使つかっても、命令めいれい引数ひきすう使つかってもOK。
れいによって本当ほんとうはいろいろこまかいルールがあるんだけど、それはあとまわしにしよう。ここまでの説明せつめい当面とうめん大丈夫だいじょうぶさ。



今回のポイント

配列

普通ふつう変数へんすうあたいを1しかれられませんが、配列はいれつはたくさんのあたいれられます。
DIM 変数名へんすうめい[要素ようそすう]配列はいれつ作成さくせいできます。
使つかときにはかならず変数名へんすうめい[添字そえじ]という書き方で、配列はいれつのどの要素ようそ使つかうのかBASICにつたえましょう。添字そえじ0ゼロから要素ようそすう-1まで指定できます。それ以外いがいかず指定していするとエラーとなるので注意ちゅういしましょう。
いま説明せつめいしたこと注意ちゅういすれば、あとは普通ふつう変数へんすうとまったくおなじにあつかことができます。

FOR TO NEXT

FOR 変数名へんすうめい=最初さいしょかず TO 最後さいごかずくと、ループをくりかえすたびに変数へんすうあたい最初さいしょかずから最後さいごかずまで1ずつえていき、最後さいごかずえるとNEXTつぎ命令めいれいにジャンプします。

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

4V3E8X4XY



いよいよ配列はいれつをおぼえたようじゃの、結構けっこう結構けっこう。では配列はいれつ神髄しんずいをわしが・・・
ハーイみなサン、今日きょうもイカレてマスか?配列はいれつ理解りかいできましたカ?
オマエはギザギザきゅうてきやがったな!
シャラーップ。ミスタートサカアタマ!ワタシはキミたちの会話かいわ学習がくしゅうしていたのデス。
ああ、ダミーをめるのをわすれてたよ・・・
やいインテリ!このまえはよくもワタシをめマシたな!すべきひとでよくぞワレをめヤガった!
(いったいどんな学習がくしゅうをしてるんだろう・・・)
なんだってきゅうにしゃべりだしたんだ!
配列はいれつはワタシの主成分しゅせいぶん!これがくちをはさまずにオラレようか!いやオラレない。
そうだね・・・AIエーアイ配列はいれつのカタマリみたいなもんだからねえ。
そこで配列はいれつ化身けしんたるワタクシがオマエラに配列はいれつ奥義おうぎ伝授でんじゅしてヤリましょう、いざけてみよ、ARYOP!・・・
ウげ。User break on 0:2525
・・・
うぉ、ジジイが止めた!
ワシの出番でばんうばうなー!配列はいれつはまだまだおくふかいんじゃー!わしにARYOPの説明せつめいをさせてクレー
はいはい。おくふかはなしはまだはやいのでまた今度こんどにしてくださいね、ハカセ。
オロローン・・・
かえっちゃった。
ヤレヤレ、ヒゲメガネごときにめらレルとは、ぬかったザマス。
うぉ!かえった!どうなってんだ!
ふふん、みくびってもらってはこまりマス、ワタシは不死身ふじみデース。
ヒゲメガネもかえったし、配列はいれつ化身けしんたるワタクシが問題もんだいします。今回こんかいしょうちくばいの3もんデスヨ。



うめ問題もんだいてきかずを100にしてみましょう!これはカンタンですネ?ヒントはECOUNT
たけ問題もんだいいまはさいしょに座標ざひょうがみんなおなじデスね!これをバラバラの座標ざひょうにしてみまショウ!バラバラのかずといったらもうアレしかナイよ!
まつ問題もんだいてきのスピードを、バラバラにするにはどうすればいいかな?これはむずかしいよ!ダミーおもうにあたらしい配列はいれつ必要ひつようネ!
じゃあまつ問題もんだいでも余裕よゆうだぜというキミに、ボクからもスペシャル問題もんだいFORフォーLOOPループえてみよう。いままでの知識ちしきでできるよ。すごくむずかしいけどキミならきっと大丈夫だいじょうぶ

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

ページ用ツール