前ページの答えから始めるよ。
| A1 「mes "C:\\program files\\hsp\\hsp2.exe"」または「print "C:\\program files\\hsp\\hsp2.exe"」 |
| A2 「mes 7\2」または「print 7\2」 |
| A3 「<<」 |
mes "1+1" stopこれで「1+1」が表示されるし、
mes 1+1 stopこれで計算結果の2が表示されるんだったよね? ちゃんと表示される、それでいいじゃないか、と言いたくなるよね。 指定テキストが表示されるのは問題ないよ。それでOK。 ただココでは例にしやすいゲームの場合を考えて。 大体のテキストは組み込んだテキストが画面に表示される。 しかし、ゲームの初めに「プレイするアナタの名前を入れてください」。 そういったユーザーに入力をさせるゲームが数え切れないほどある。 名前を入力するゲームは 入力したらそれだけで終わるわけではないはず。 どこかでそのユーザーが決めたデータを表示させたりするんだね。 ココで考えて!ポイントはココだから。 表示させるテキストはユーザーが決めるわけ。 プログラムを組むあなたが決めるわけではないんだよね?
mes "よく来たなサンプルよ" stopこんな風に全部スクリプトに埋め込むことはできないんだ。 ユーザーは何を入れるかわからない。 きちんとコチラが考えたテキストを入れるかもしれないし 「ああああ」と適当なテキストが入力されるかもしれないわけ。 プログラムを組む時に表示させるテキストが決められないんだ。 「こんにちはああああさん」「こんにちはアルティメットさん」 「こんにちは」と「さん」は不変だけど、中の文字が変わってくる…。 引き伸ばしまくったけどこういう時に使うのが『変数』なわけ。 変数とは何か。 今の例で何をするものなのか想像できたと思うけど、 どこのプログラムページを見てみてもイメージとして次のように書かれている。 「『変数=箱』とイメージすればよい」だ。 いい例えだと思うので私もコレで話を進めて行く。 箱と言っても中身の詰まったものではなくて、 中に何かを入れられる下記のような入れ物のこと。
この用意した箱には自由なものを入れることが出来る。
自由と言っても前ページに書いたように
「文字列型」と「数値型」の2種類だけなのだが。
テキストを渡す(指定)するのではなく、その変数を渡してやれば
ユーザーが指定したテキストが何であろうがOKってわけだ。
変数の使い方は前ページの問題と回避のトコで
「指定テキストが『変数』と誤認される」というものがあった。
そこでは「文字列をダブルクォーテーションで囲まなかった時」とあった。
つまり下記のようなテキストを書けば、変数になるということ。
mes variable stopその箱に何も入っていなかった(初期化してない)場合、 「0(数値)」と表示されてしまう。 文字列を代入する場合、ダブルクォーテーションで囲えばよい。 初めは何も入れないが、文字列型としたいという場合は、 ダブルクォーテーション2つ連続で並べればOKだ。 そうそう、肝心の入れ方についてだけど、 「1+2=3」というように左辺で演算が行われ、 右辺で答えが代入されるといったような 算数のやり方ではなく逆になることに注意してほしい。 逆とは「3=1+2」といった感じのこと(そのまんまだ)。 下のサンプルだと変数variableに「""(空文字)」を入れる感じ。
variable = "" mes variable stop中学くらいに一次・二次関数というもの習ったよね? その時に「y = 3x + 2」といった感じだったけどほとんど同じだ。 xに入っている値を3倍して2を足したものをyに入れる、といったもの。 変数は箱だ箱だと言っているがどこがそうかと言うと、 変数に別の変数を渡せばコピー(移動ではない)できる。 一度入ったデータを消したければ、数値なら0を、 文字・文字列ならダブルクォーテーションを入れればよい。 ダブルクォーテーションでの間違いが多いので1つ付け加えておく。 コレは変数を空にしているのではないということを覚えておいてネ。 それがどうしたのかということやなぜかという質問の答えはココでは書かない。
var1 = "コピー" var2 = var1 var1 = "" mes var1 mes var2 stopまた箱には「入れることのできる容量」というのがあるように、 変数にもサイズが決まっており、ある以上は入れられない。 文字列であれば63文字という中途半端(?)な数だけ、 数値であれば前ページで書いた「-2147483668〜2147483667」だけ。 64字以上の長〜いテキストを入れたい場合は、 変数自体のサイズを増やす命令を使えばいけるんだけど それだけで大分伸びるのでココでは説明しない…。 現段階で使用すると「バッファオーバーフロー」エラーが出ちゃう。 文字列の場合であれば、 変数サイズを変化することで上限を変えられるんだけど、 数値の扱う桁数の変更は…難しいよ。
variable = "変数の使用できるサイズを変更しなければコレを実行したときのようにエラーが起きる" stopえっ?上記は63文字もないのにエラーになっている? 書き方が悪かった。63字というのは半角での数。 半角・全角の違いは知ってるよね?一応書こうか…。 半角というのは全角文字の半分サイズしかないからで、 1バイト文字とも呼ばれ、その通り1文字1バイト使う文字だ。 全角文字は2バイト文字と呼ばれ、1文字2バイト使われる。 ちなみにコレはWINDOWSの文字コード「SHIFT-JIS」の場合なんだけど。 ソレで変数で扱えるのは63字ではなく、63バイト分だということ。 ひらがなや漢字だと30文字ほどしか扱えないので気をつけて。 そうそう変数の名前だけど、付けられる文字には決まりがある。 まず使える文字について。 使えるのは英数字・日本語の1,2バイト文字が基本。 記号については全角はどれでもいけるんだけど、 半角記号はアンダーバー「_」だけとなっているよ。 アット「@」でもエラーにはならないんだけど別の意味で使用されていて、 「@」の付いているものといないものは同じものとして扱われるのでダメだ。 変数名として使えるか否かは、 実際に使用すれば使えないものがエラーとなるので分かる。 次に開始文字について。 1文字目には半角の数字が来てはならない。 それ以外は使用できる文字であれば問題ないことでしょう。 次に文字数について。 変数名の最大文字数も決まっている。 半角で59文字、つまり59バイト以内であればOKである。 この上限を超えてもエラーにはなることはないが、 その変数に入れたデータをどうすることもできないだけである。 数値の演算はおろかデータを入れて表示しても「0」となるだけ。 最後に変数の数について。 変数は何個でも使えるというわけではないよ。 最大で4096個までしか使えないことになっているようだ。 4000個も宣言したことないからどうなるかはしらない…。 まぁこれについては皆もそんなに行かないだろうから気にしなくていいだろう。 さて、ココでプチ重要なポイントを。 使える文字といってなんでもイイというものではないだろう。 「a」や「xxx」などパッと見ただけで分かりにくいものは、後で苦労するよ。 分かりやすいネーミングをつけるように心掛けよう。 分かりやすいからと言っても長い(文字数の多い)名前もどうかと思う。 ココで、よく使われる手法を説明しておこう。 …といっても、正式もクソもない、管理人がよく使うやり方だけどね。 変数だけでなく、命令名でもよく使われるのだけど、 1単語を3,4文字位で表し、変数の一部として使用する。 何でもいいけど、例えば何かを変更したい時に使うということで用意した 「change」という変数名を使いたい時、について。 場合場合で3,4文字の選び方は違うけど、パっと見て元がわかるように。 で、「change」だと「chg」が一般的ではないかな。 「parameter」だと「param」、もっと短いのだと「prm」かな。 大体は母音「aiueo」を抜いた文字が多いかな? 一時変数名には、一時的という意味をもつ「temporary」を基にした、 「temp」や「tmp」が多いだろうね。 数値用と文字列用の一時変数が使いたい場合は、 「temporary number」「temporary string」を基にした、 「tmpnum」「tmpstr」な感じで。 …あ、そうそう。書くの忘れてた。 HSPでは、半角の英字に限り大文字と小文字を区別しない。 つまり、下のように書いても前に書いた変数と認識される。
TMP = "大文字のTMP" mes tmp stop前ページで書いておくべきことだったんだけどココで書く。 連結についてなんだけどね。 「数値+数値」は演算結果が表示されることを 既に知ってるはずだ。 「数値+文字列」の表示の場合はどうか。 文字列がダブルクォーテーションで囲まれた数値の場合、 「数値+数値」と同じで結果が表示されるが、 「A」や「あ」、「_」といった文字・記号だとこれらは表示されない。 「文字列+数値」の場合は上と同じだろうか? コレの場合はそれぞれの項のデータ全てを表示させることができる。 ただし、文字列側が文字列型数値の場合、 他の時のように演算が行われることはなく、 「"1"+2」は「12」のように文字列として連結されるだけである。 「文字列+文字列」の場合。 コレも上の「文字列+数値」と同じで、 文字列として連結されるだけである。 コレは前ページで書いておくべきだったと言うように、 mes命令のパラメーター部分で使われることが多い。 変数の場合も使われるのでココでも悪くはないのだが。 連結は半角の「+」記号で繋がれる。
mes 100 + 21 var = 39 + "abc" mes var mes 4 + "8xyz" var = "5" + 32 mes var stop扱える範囲であれば何個でも連結させることが可能だ。
var1 = 123 var2 = 987 var3 = var1 + var2 mes "「" + var1 + "+" + var2 + "」の結果は「" + var3 + "」だ" stopおさらいとして初めのRPG風メッセージを表示させるなら、
name = "アルティメット" mes "よく来たな"+name+"よ" stopと、上のようになるわけだけど、 しかしこれじゃあ値を直接プログラムに埋め込んでいて、 1回にまとめて書いたのと結果的に一緒だ、ということになるね。 確かにそう、この書き方じゃ変数の意味がない。 ユーザーに入力、選択をさせるっていう「操作」が必要だ。 けどココは変数の説明だけなのでまだ解説しない。 プログラムを組む上で必要となる入れ物、変数を覚えておこうね。 さぁてこのページ最後の締めくくりをしようか…。 下記スクリプトなんだけどどういうことか分かるかな?
variable = 1 variable = variable + 1 mes variable stopそのまんま素直に考えていけば分かると思うけど、 1行目に変数variableに1を入れている。 2行目にvariableに現在のvariableの値と1を足して入れている。 3行目に表示している、というプログラムだ。 別に加算以外に減乗除余算どれでも使えるよ。 また加減算だけ特別に下記の書き方が許されている。
variable = 5 variable++ mes variable variable-- mes variable stopコレはインクリメント・デクリメント演算子と呼ばれ、 あらゆるプログラミング言語で使用可能な演算子だ。 サンプルを見れば分かることと思うが、 元の値に1加減する時に容易に書けるものである。 HSPでは演算子を2つ重ねなくても1つだけでもエラーにはならないようだ。
variable = 3 variable- mes variable variable+ mes variable stop2以上加減したいという時には 代入演算子というものを使用する。 代入演算子とは「+=」「-=」といったもので、 左辺の変数を右辺分だけ増減するもの。
variable = 7 variable += 2 mes variable variable -= 4 mes variable stopコレの他に「*=」や「>>=」などといった代入演算子があるが、 残念ながらHSPでは使用することができない。 その代わりコレもまたHSP特別な書き方として 下記のように書くことができる。
variable = 8 variable + 6 mes variable variable - 5 mes variable stopコレで終わりだ。 このページでの宿題を発表しよう。 ちなみに1問だけだ。イイのが思い浮かばなかった…。
| Q4 | 変数「X」に「0123」を入れて「Xには0123が入っています」と表示させよ |