skip to content
User Tools
Search
Trace:
•
subprogram
•
all_references
•
oss_licenses
•
guide15
•
about
•
command_summary_fundamental_commands
•
command_summary_drawing_screen
•
command_summary_inputsoundand_others
•
various_inputs_toy-con
•
guiide15
Sidebar
日本語
news
update
bug
download
device
beginner
tips
reference
SmileBASIC Oogiri World Grand Prix
guiide15
さあ、プレイヤーキャラを出そう!
おう・・・
あれ、今回はテンション低いね。
この前も言ったけどよう、12章のアレをくっつけるんだろう?結果のソウゾウがつくからつまんねえよなあ・・・
もちろんそれだけじゃなくて、今回は弾を出すところまで作ろうかと思うんだ。
ガタッ
いきなり顔が明るくなったね。
さっそくやろうぜインテリ先生よう!
まずは12章を参考に、左右に動くプレイヤーをくっつけるよ。イチゴが不評だからもっとシューティングっぽいキャラにしよう。
そういやこの前も敵キャラにいきなり1203番とか書いてたけどよ、お前どうやってキャラをさがしてるんだよ。まさか1203回キャラを出しつづけたのか?
ハハ、まさかそんな事はしないよ。プチコン4にはちゃんと便利なツールがついてるんだ。
プチコン4にはあらかじめ組み込まれている音・BGM・スプライトの絵を確認できるツールが入っているんだよ。
チッ、キャラを出しつづけたならすげえ根性だと思ったのによ。
せっかくコンピューターを使ってるんだから、こういう事はスマートにやらないとね。
うぉぉなんだそのおりこうさんなセリフは!全身にムシズがはしるぜ!
ワンパク君だってラクな方がいいだろう?スマートってのはラクって事さ
くっそー、反論できねえ・・・そりゃあラクな方がいいに決まってるじゃねえか・・・
じゃあツールの出し方から説明するね。ソフトキーボードでZL,ZRボタンを押しながら、「スマイルツール1」って書いてるボタンをタッチしてみて。マウスでクリックでもいいよ。USBキーボードならF9キー一発さ。
おお?なんかいっぱい出てきたぞ!
ソフトキーボードを使っている人は、画面が変わったら-ボタンで一旦ソフトキーボードを閉じてね。
これがSMILETOOLだよ。最初は「効果音(BEEP)」のページが出てるけど、コントローラーのL,Rボタンでページを切替えられるんだ。SPDEF定義っていうページに行ってごらん。
絵がいっぱい出てきたぞ・・・0番はイチゴ、1番はミカン・・・SPSETに食わせるあの番号か!
そう!方向ボタンで好きな絵を探せるんだ。8192個あるから探すのも一苦労だけどね。
は、8192個!見てるだけで日が暮れちまうな。
おんなじ絵で設定が微妙に違うだけの物とか、絵の大きさが違うだけの物とかもいっぱいあるけどね。ゲームで使いそうな絵はほとんど入ってるんじゃないかな。
Aボタンで拡大表示ができるよ。探し終わったらXボタンかESCキーで抜けられるよ・・・あれ、聞いてない。
おお?このロボットっぽいのもかっこいいな・・・いや・・・よし決めた!オレは6948番で行くぜ!
気に入ったキャラが見つかったようだね。
SMILETOOLはダイレクトモードでもエディットモードでも使えるんだ。覚えとくといいよ。
インテリ君、SMILETOOLの下の方に出ているSPDEF なんとか・・・ってなにかな?
ああ、それはスプライトの絵の定義内容なんだ。SPSETで出てくる絵は、こういう命令とこういう引数でできていますよって言ってるんだよ。
どういう絵にするかはここにも出ているSPDEFっていう命令で定義するんだけど、それはもう少し後で説明するよ。
さっそくその6948番をプレイヤーキャラにして出してみよう!
だんだん長くなってきたね!
どれどれ・・・6948番にした以外はたしかに12章をくっつけただけだな。おや、コメントがふえてるぞ?
プログラムが長くなればなるほど中身を理解するのはむずかしくなるからね。今回は、「ここからプレイヤー」「ここから敵」っていう大きなグループに分けて、その境目にコメントを入れたよ。こうやって横線のようにしたらさらにわかりやすいと思わないかい?
たしかに!
この「メインループ」っていうコメントはなんだ?たしかにループのとこに書いてるけどよ。
プログラムの一番中心になる処理を書いたループの事をメインループと呼ぶんだ。今のところはあまり意味がないけど、これからここがどんどん変わっていくよ。
じゃあ実行してみようか!
本当に前回のプログラムと12章のプログラムが合体した動きだな。そしてここからが今回の本番というわけだ!
そう!じゃあ行くよ。ねえ、「弾を撃つ」プログラムって、君たちならどう書く?
ちょっと待てよ・・・まずタマをうつボタンが押されたかどうかは絶対に必要だな。
あとはカンジンのタマだ。プレイヤーのタマだから、ボタンが押されたらタマスプライトを作って、あとはそいつを上に動かせばいいんじゃねえか?
いい調子だね。これで完成率50%ってところかな。折り返し地点だね。
そんなわけねえだろう。オレのチミツな計算じゃこれでバッチリのはずだ。見てろよ。
おお?なんか色が付いた行があるぜ。
プログラムが長くなってきたからね、ワンパク君がいじった行だけ色を変えたよ。
いらねえ世話を焼きやがって、見やすいにもほどがあるぜ。
とにかく、われながらカンペキな出来じゃねえか?タマだからスピードも倍にしてやったぜ。よし、実行!・・・あれ
エラーだ。スプライトが作られていないって。
そんなバカな、プログラムはカンペキだ!これはプチコン4のバグにまちがいねえぞ。スマイルブームめ、オレサマの仏の顔は1回かぎりだぜ、速攻カクサンして炎上・・・
ワンパク君、これはプチコン4のバグじゃないと思うなあ。こういう時はまず自分の書いたコードを確認した方がいいよ。
そうだなあ、いきなりプログラム書いちゃう前に、書きたい処理を普通の日本語で書いてみないかい?ワンパク君はどういう事をやろうとしたのかな?
おれのカンペキな処理を日本語で書けって事か?二度手間もいいとこじゃねえか!
ただの二度手間だったら必要ないけど、この二度手間にはいいところがあるのさ。ここにノートがあるから、ちょっと書いてみてよ!
よし
発射ボタンがおされたら、タマのスプライトを作ってプレイヤーの場所に出す
タマを上にすばやく動かす
こういう事だ!
確かに普通の日本語で書いてるとやりたい事がすぐにわかるね!そして何が問題なのかもわかったよ!
「発射されたタマを上にすばやく動かす」って言ってるけど、これはタマがないときはやっちゃダメなんじゃないかな?
う、そうか・・・タマをうっていないときは、タマはないのか。グギギ。
じゃあ、こんなかんじ?
発射ボタンがおされたら、タマのスプライトを作ってプレイヤーの場所に出す
タマがあったら、タマを上にすばやく動かす
んん?なんかおかしいな・・・タマっていつ消えるんだ?
そうか、作った弾はいつか消さなきゃないんだね。
画面から飛び出たら消えるとかでいいんじゃねえか?
画面から飛び出るかあ・・・上に動かしてるって事は、Y座標がどんどん小さくなるんだよね?0より小さくなったら画面の外に行っちゃったって事になるのかな?
後はタマを発射する時も、もうタマ発射してたらうっちゃダメなんじゃねえか?とするとだ・・・
タマがない時に限って、発射ボタンがおされたら、タマのスプライトを作ってプレイヤーの場所に出す
タマがあったら、タマを上にすばやく動かして、Yが0より小さくなったらタマを消す
いいね!これをプログラムにしてみようよ。
「タマがあったら」って、どうやったらわかるんだ?
うーん・・・まずは、弾のスプライトがある時は1、ないときは0っていう変数を作ればいいんじゃないかな。
それだ!よし、このノートをプログラムにしてみるぜ・・・ん?んんん?なにぃ!?
どうしたのワンパク君?
「タマがない時に限って、発射ボタンがおされたら」って、どう書きゃあいいんだ?
2つの事をまとめてチェックするのは初めてだね。たくさんの事をまとめてチェックするのは実は難易度が高いんだけど、この場合に限ってはすごく簡単なんだ。IF文は何個でも連続して書けるんだよ。こんな感じ!
'まずたまがないことをチェック
IF TAMA==0 THEN
'つぎにボタンをチェック
IF BUTTON(1,#B_RRIGHT)==1 THEN
'たまはっしゃ!
ENDIF
ENDIF
こういうふうに、THENの中に違うIF文を書いてもかまわないんだよ。「たまはっしゃ」って所にまた違うIF文を書いても、さらにその中にまたIF文を書いても・・・何個書いてもOKだよ。そうするとどんどん条件を絞っていく事ができるのさ!
なるほど、わかったようなわからねえような・・・IFの中にIFがあって、さらにその中にIFがあって、おい、なんかそういうのなかったか?
あれかな、人形の中に人形があってその中にも人形があるやつ!ロシアのマトリョーシカ人形だったっけ?
それそれ!
そこに気がつくとはすごいね!実はプログラムっていうのは、マトリョーシカ人形なんだ。
ハァ?またわけのわからねえ事を言いやがって。プログラムが、マ、マリョリョ・・・
いいかい?今まで出てきたIF、LOOP、FOR、他のループも同じなんだけど、これらは全部マトリョーシカ人形の1個だと思えば良いよ。
IFやループは、その中にまた違うIFやループを入れられるんだ。そしてその中にはまた違うIFやループ・・・って考えるとまさにマトリョーシカ人形だと思わないかい?このマトリョーシカみたいなプログラムの構造を「入れ子構造」って言うんだ。
実は今までも敵のプログラムでこの入れ子構造が出てきてるよ。LOOPの中にFOR、その中にIFってなってるのがわかるかな?こうやって入れ子の中にさらに違う処理を入れ子にして入れて行くのが、プログラムさ!そしてその入れ子の一番外側が、メインループになるんだよ。
・・・リョリョリョ・・・うう、やっと止まったぜ。つまりはだ!
プログラムが長くなっていくと、どんどんマリョリョ・・・人形の数が増えるって事だな!
そういうこと!入れ子構造はプログラミングで一番重要な考え方といって過言じゃないけど、重要さをひとことで説明するのは難しいんだ。ひとまずは、IFやループの中には好きなだけIFやループを入れられるって事を覚えおけばいいよ!
さあ、弾を打つコードだけど、IFの中にIFを書ける事がわかったから、もう書けるんじゃないかな?
もう一つあるぜ、タマのスプライトってどうやったら消えるんだ?
おっとそうだった。SPCLRっていう命令を使うんだ。SPCLR スプライト番号で、スプライトを消す事ができるよ!
よし、書いてみるぜ・・・
これでどうだ!
やった!
おめでとう!弾を撃てたね!
よーし、じゃあ敵を倒してやる!・・・あれ?倒れない?
それが次に解決しなきゃない問題だよ。敵を倒すためにはどうすればいいか。これは次回考えよう!
うおお、いったいどれだけプログラムを長くすりゃいいんだ!
ざっとこれの3倍書かないと完成せんじゃろうな!
ナニー!ジジイめいきなりあらわれてサラッと恐ろしい事を言いやがったな、3倍だと!
よいかの?コンピューターというのは、バカ正直に命令された事しかせんのじゃよ。「いい感じに弾撃ってよ」とか「テキトーに敵出して」とか言ってもダメなんじゃ。それはまさに今回で経験したじゃろう?
それこそ手取り足取り、ああしたらこう、こうしたらああと、動いて欲しいと思った事はどんな細かい事でも全部やり方をプログラムしてやらんとならんのじゃ。このゲームはまだ弾にも当たらないし、敵も攻撃してこないし自分も死なない、スコアもない、ないないづくしなんじゃ!それで3倍と言ったのじゃよ。
とはいえあせる事はないぞ。あせらず一つ一つ機能を理解しながら組み込んでいけば、必ず完成する!このワシが保証するわい。
そして今回やったように、プログラムに機能を追加する時はいきなりプログラムを書かずに一度やりたい事を文章で書いてみる事をおすすめするぞい。こういう、プログラムを書く前にプログラムに書きたい内容をまとめた物を仕様と言うんじゃ。
仕様を書かずにチャチャッとプログラムを書いてしまう達人プログラマもいるが、脳味噌がコンピューターになっているような達人の真似を初心者がいきなりしてはいかん。クルマの免許を持っていないのにいきなりレーシングカーに乗るようなもんじゃ。
この仕様の書き方というのも、プロの世界ではいろいろな書き方があるんじゃが、まずは今回のように紙のノートに普通の日本語でチャチャッと書いてみるとええ!二度手間に思えるかもしれんが、間違ったプログラムを作ってバグで悩む時間の事を考えたら、先に普通の言葉で書いといてアラを探す方ができあがるのが速いんじゃ!書いた文章のなかでおかしな所があったら、そこをきちんと考えてやらんといかんという事じゃよ。
紙のノートに書いた仕様が予習で、プログラムが授業みたいなもんなのかな?
うむ、その通り!さしずめ復習はデバッグじゃろうな。
おいおまえら!数学の話といいなんでもかんでも勉強に結びつけやがって!
そういやワンパク君、この前数学の授業で先生にほめられてたよね、勉強ができるようになるのもまんざらじゃないんじゃない?
ハハハ、ワンパク君もどんどんお利口さんになってもらわないとね!
ギギギ・・・
今回のポイント
入れ子構造
IF文のTHEN~ENDIF、LOOP~ENDLOOP、FOR~NEXTのそれぞれの中には、通常の命令だけでなく、違うIF,LOOP,FOR文をいくつでも重ねて書く事ができます。このような構造の事を入れ子構造と呼びます。長いプログラムを書く時は大雑把な場合分けやループからの中に細かい条件分けやループ、その中にさらに細かい条件分けやループ・・・という入れ子構造を意識して書くと、わかりやすいプログラムになって後々のデバッグや改造も楽になります。
仕様を書く
プログラムを書く場合、いきなりプログラミング言語でプログラムを書く前に、プログラムで書きたい内容を普通の日本語で書いてみましょう。普通の日本語で書いた時点であいまいな部分や明らかにおかしな部分があれば、プログラム化した時に絶対に困る部分です。そういった部分をプログラム化する前に整理しておくと、プログラムも書きやすいですし、書いたプログラムも綺麗に書く事ができます。
サンプルプログラムの公開キー
42APE33QJ
さてダミーがしゃべりださんうちに今回のオマケ問題じゃ!
その1:キミなら弾の絵はなんにするかのう?SMILETOOLで弾にしたい絵を探し出して、弾の絵をそれで差し替えてみるのじゃ!
その2:今の弾は撃ったらまっすぐ上に飛んで行くだけじゃが、プレイヤーが左に動いたら左、右に動いたら右というふうにして飛び先を誘導できるようにするにはどうすればいいじゃろうな?
その3:上級問題じゃ。最後のプログラムでやっている事を紙のノートに日本語で書いてみるのじゃ!つまりプログラムから逆に仕様を調べるという事じゃな。これは解析と言って、これがラクにできるようになると他人のプログラムを調べるのにとても役に立つぞい
ワレを呼んダカ、ワレー?
ギャー、退散退散・・・
guiide15.txt
· Last modified: 2019/11/08 15:00 (external edit)
Page Tools
Back to top