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 · Last modified: 2019/11/08 15:00 (external edit)

Page Tools