プチコン3号入門講座
コンソール画面で文字表示をしよう
プチコン3号ではコンソール画面、グラフィック画面、スプライト、BG画面がそれぞれ独立しています。今回はその中からコンソール画面について書いていきます。
コンソール画面とは何かというと端的にいえば普通の文字表示のことです。
では、DIRECTモードでPRINT "プチコン3ごう" としてください。画面にはプチコン3ごうと表示されたはずです。これがコンソール画面による文字表示なのです。(表示するのが文字列なので""が必要なのは分かりますよね?)
プチコン3号は上画面は50文字×30行、下画面は40文字×30行となっていますが、ここでは上画面表示に関してのみ書いていきます。下画面については後述の「下画面を使ってみよう」に詳しく書いています。
せっかく文字表示を行うならば自分が好きなように表示をしたいと思います。そのために使用するのがLOCATEという命令です。LOCATE 画面X座標 , 画面Y座標 , 奥行き とすることで好きな位置に表示ができます。(「, 奥行き」)は省略が可能)
ここで注意しなくてはならないのがその座標です。プチコン3号においては画面の左上が原点(X座標0、Y座標0)に設定されていて一般的な数学のグラフとは異なり画面のY座標は下方向がプラスの向きとなっています。
つまり、X座標は0〜49、Y座標は0〜29の範囲で指定ができるわけです。
奥行きに関しては少し変わっていて-256〜+1024の範囲で指定が可能です。この奥行きというのは3DSの立体視に関わってきます。負数(マイナス)で指定するとは画面から飛び出して見えて正数(プラス)で指定すると画面から引っ込んで見えます。
LOCATE 20,15,-256
PRINT "プチコン3ごう"
|
とすると画面の中央付近に"プチコン3ごう"と表示されてかなり飛び出して見えます。飛び出し方が大きくて上手く立体視ができないという人は3Dスライダーを調節するか-256ではなくもっと0に近い数字(例えば-100とか)に変更してみてください。
これで、プチコン3号は立体視が簡単にできるということが分かったと思います。
ちなみにLOCATEの後に付いている20とか15のような数字は引数(ひきすう)と言います。
「 ; 」(セミコロン)による結合表示も可能でPRINT "スコア”;Sとすればスコアという文字列と変数Sの値を両方表示できます。(文字列と数値ではなく文字列同士の結合ならば「;」の代わりに「+」でも良いけど後述の複数行に渡る結合には使えない)
「;」を使った結合表示は別の行に分けて書いた場合も有効です。
LOCATE 10,10
PRINT "プチコン";
PRINT "3ごう"
|
これで"プチコン"と"3ごう"が結合して表示されていることが分かると思います。「 ; 」を省けば普通に改行して"3ごう"と表示されます。
なお、「 ; 」を付けなければ自動的に改行されるためY座標29に表示すると自動的に改行されてしまい画面全体がスクロールしてしまうことに注意しましょう。(スクロール無しでY座標29に表示する場合には「 ; 」が必須になる)
画面上の文字をすべて消すにはCLSを使います。一部の文字だけ消したいというときは" "(スペース)などの見えない文字で上書きするといいです。(スペースで上書きする場合には下記のCHKCHR()での判断時に注意)
コンソールで表示の際はキャラを動かしたり表示する文字数が減ったりする場合にはその跡が残ってしまうためこの消去作業が必須になってきます。
例えば、下記は「タイムが20から0まで減少するというプログラム」ですが、タイムの表示が10から9へと変わる時に表示される文字数が減り元々表示されていた"10"の"1"の上に"9"が表示され"0"の上には何も表示されず0がそのまま残ってしまい見た目では10秒から1減って90秒に増えたようになってしまいます。
FOR T=20 TO 0 STEP -1
LOCATE 20,12:PRINT "TIME=";T
VSYNC 60
NEXT
|
そのため、元々表示されていた文字を何らかの方法で消す必要があります。
《改善法1 表示前に一旦消去する》
FOR T=20 TO 0 STEP -1
CLS
LOCATE 20,12:PRINT "TIME=";T
VSYNC 60
NEXT
|
最も単純で分かりやすい改善方法です。速度が十分なプログラムはこれで問題ないですが、タイム以外の部分を表示させている場合にはそれも消えてしまうためその部分を再表示する必要が出てしまいます。
CLSで画面表示している文字をすべて消すのではなくタイムの数字の部分だけスペースで消去という方法もあります。例えばタイムが最大2桁ならばCLSの部分をLOCATE 25,12:PRINT " (スペース2つ)" に変えれば良いです。タイムが最大4桁ならばスペースが4つ分です。
《改善法2 タイムの末尾に ;" (スペース)" を付ける》
FOR T=20 TO 0 STEP -1
LOCATE 20,12:PRINT "TIME=";T;" "
VSYNC 60
NEXT
|
スペースを1文字分結合表示することで、1文字分減ってもスペースで自動的に"0"が上書きされるため正しく"9"と表示が可能です。1文字減る可能性がある場合はこれが最も手間がかからない方法です。(1文字分表示する量が増えるため画面右端ギリギリに表示している場合には改注意が必要)
2文字一気に減る可能性がある場合には2文字分のスペースを末尾に付けます。
《改善法3 タイムの末尾に「,(カンマ)」を付ける》
FOR T=20 TO 0 STEP -1
LOCATE 20,12:PRINT "TIME=";T,
VSYNC 60
NEXT
|
これはタブを利用した表示消去です。プチコン3号では PRINT 1,2,3 のように記述した場合には1、2、3がそれぞれ標準設定では4桁分の文字数で表示されます。(4桁に満たない数字は自動的に隙間が空くし、4文字以上の場合は8文字分、8文字以上の場合は12文字分となる)
そのためTの後に,を付けるとTは4桁単位の文字数で表示が可能になります。そのため4桁以上一気に桁数が変わるというので無ければこれで問題なく表示が可能です。(1画面プログラムなどの文字数制限を行う必要があるプログラムではオススメ)
《改善法4 タイムを整形して表示する》
FOR T=20 TO 0 STEP -1
LOCATE 20,12:PRINT "TIME=";FORMAT$("%4D",T)
VSYNC 60
NEXT
|
FORMAT$を使えば表示する文字数や桁数を指定できます。
4桁の整数で表示する倍には"%4D"と指定すれば良いです、(4桁に満たない場合は先頭に空白ができ表示する変数の値が整数でない場合は整数になるように小数第1位が四捨五入された表示になる)
FORMAT$を使用した場合の注意点としては整数部分に関しては指定する桁数より大きな数字を表示した場合(例えば整数部分を2桁指定で123を表示した場合)は自動的にその桁数分だけ確保されるため表示はちゃんとされる代わりに表示位置がずれるという問題があります。そのため、桁揃えのためにFORMAT$を使用するならば表示する数値の最大桁数以上の桁数を指定しておくのがベターです。
このように表示の問題が起きても様々な改善方法があります。どれを選んでも良いのですが、文字数が変化するのが前提ならば自由度が高いFORMAT$を使用するのが最もオススメです。(アクションゲームなどで自キャラが動くことでその跡が残るという場合には改善法1にある「消してから表示」がオススメ)
この文字に色を付ける場合はCOLOR命令を使います。COLOR 描画色とすることであらかじめ決められた16色の中から選択できます。
色番号 | 描画色 | 目安色 | 定数リテラル |
0 | 透明色 | | |
1 | 黒 | | #TBLACK |
2 | 暗い赤 | | #TMAROON |
3 | 赤 | | #TRED |
4 | 暗い緑 | | #TGREEN |
5 | 緑 | | #TLIME |
6 | 暗い黄色 | | #TOLIVE |
7 | 黄色 | | #TYELLOW |
8 | 紺色 | | #TNAVY |
9 | 青 | | #TBLUE |
10 | 暗いマゼンタ | | #TPURPLE |
11 | マゼンタ | | #TMAGENTA |
12 | 暗いシアン | | #TTEAL |
13 | シアン | | #TCYAN |
14 | 灰色 | | #TGRAY |
15 | 白 | | #TWHITE |
※目安色はあくまで目安なのでプチコン3号上での色とは微妙に異なります。
描画色は透明色以外はwebカラーの基本16色と概ね同じと思われます。
透明色は上記では便宜上黒色にしていますが、実際は文字より奥に表示しているものが透けて見えます。
赤色でプチコン"と表示するにはCOLOR 3:PRINT "プチコン"とします。プチコン3号 ver.3.2.0から定数リテラルが加わりました。赤で表示したい場合にはCOLOR 3の代わりにCOLOR #TREDで全く同等の役割となります。(「テキストレッド」と覚えておけば良い)
複数の命令を1行に連続して書きたい時はこのように「:」(コロン)を使います。これをマルチステートメントといいます。マルチステートメントで記述することで処理のひとまとまりが分かりやすくなるという反面でマルチステートメントをやりすぎると可読性(プログラムリストの読みやすさ)が低下してしまうことになるためほどほどにしておいた方が良いでしょう。
なお、この16色はあらかじめシステムで決められた色であり自分で変更することはできません。
「コンソール画面の文字の大きさを変えたい」という場合はver.3.2.0で新しく加わったWIDTH命令で可能になります。WIDTH 8だと標準の8ドット角のフォントですが、WIDTH 16とするとフォントが16ドット角の大きさ(つまり、縦横2倍の大きさ)になります。(WIDTH 16を使用時には文字サイズが縦横2倍になる関係でX座標は0〜24、Y座標は0〜14が表示可能な範囲となる)
WIDTH 16を使用時は縦横2倍の大きさになるだけで細かいフォントで表示されるわけではありません。EDITモードでも文字が大きくなるため「標準の文字サイズでは小さすぎてプログラミングをするのが辛い」という人は積極的に使ってもいいかもしれません。なお、WHDTH 8を実行しなくてもACLSを実行すれば標準のWHDTH 8へと戻ります。
WIDTH命令を使用時には自動的にCLSが行われてしまうためコンソール画面では1文字単位で自由な大きさに変更することはできません。1文字単位で文字の大きさを変えたい場合はこちらに書いているGPUTCHR命令を使ってください。GPUTCHR命令はコンソール画面ではなくグラフィック面(GRP面)への表示であるため上記の16色の縛りもなくRGBで好きな色を指定が可能になります。
プチコン3号では多くの文字が使用できますが、それらは内部では文字コードで記録されています。それを調べるのがASC()という関数です。
CHR=ASC("A") とすれば文字"A"の文字コードが変数CHRに代入されます。PRINT CHRとすれば65と表示するので"A"という文字の文字コードが65であることが分かります。ASC(複数文字の文字列)とした時は先頭1文字の文字コードを返します。したがって、複数の文字列の文字コードをすべて知りたい場合はFOR〜NEXTなどのループとMID$を使ったりや文字列変数への添え字を使う方法(例えばA$[3]で文字列変数A$の4文字目の文字が分かる)によって1文字ずつ取り出しASC()で文字列を調べると良いでしょう。
では、文字"A"以外はどうなのかというと下記のような文字コードになっています。
《 文字コード表 》 (文字コード32〜127のみ掲載)
文 字 | コード | 文 字 | コード | 文 字 | コード | 文 字 | コード | 文 字 | コード | 文 字 | コード |
10進数 | 16進数 | 10進数 | 16進数 | 10進数 | 16進数 | 10進数 | 16進数 | 10進数 | 16進数 | 10進数 | 16進数 |
スペース | 32 | 20 | 0 | 48 | 30 | @ | 64 | 40 | P | 80 | 50 | ` | 96 | 60 | p | 112 | 70 |
! | 33 | 21 | 1 | 49 | 31 | A | 65 | 41 | Q | 81 | 51 | a | 97 | 61 | q | 113 | 71 |
” | 34 | 22 | 2 | 50 | 32 | B | 66 | 42 | R | 82 | 52 | b | 98 | 62 | r | 114 | 72 |
# | 35 | 23 | 3 | 51 | 33 | C | 67 | 43 | S | 83 | 53 | c | 99 | 63 | s | 115 | 73 |
$ | 36 | 24 | 4 | 52 | 34 | D | 68 | 44 | T | 84 | 54 | d | 100 | 64 | t | 116 | 74 |
% | 37 | 25 | 5 | 53 | 35 | E | 69 | 45 | U | 85 | 55 | e | 101 | 65 | u | 117 | 75 |
& | 38 | 26 | 6 | 54 | 36 | F | 70 | 46 | V | 86 | 56 | f | 102 | 66 | v | 118 | 76 |
’ | 39 | 27 | 7 | 55 | 37 | G | 71 | 47 | W | 87 | 57 | g | 103 | 67 | w | 119 | 77 |
( | 40 | 28 | 8 | 56 | 38 | H | 72 | 48 | X | 88 | 58 | h | 104 | 68 | x | 120 | 78 |
) | 41 | 29 | 9 | 57 | 39 | I | 73 | 49 | Y | 89 | 59 | i | 105 | 69 | y | 121 | 79 |
* | 42 | 2A | : | 58 | 3A | J | 74 | 4A | Z | 90 | 5A | j | 106 | 6A | z | 122 | 7A |
+ | 43 | 2B | ; | 59 | 3B | K | 75 | 4B | [ | 91 | 5B | k | 107 | 6B | { | 123 | 7B |
, | 44 | 2C | < | 60 | 3C | L | 76 | 4C | ¥ | 92 | 5C | l | 108 | 6C | | | 124 | 7C |
− | 45 | 2D | = | 61 | 3D | M | 77 | 4D | ] | 93 | 5D | m | 109 | 6D | } | 125 | 7D |
. | 46 | 2E | > | 62 | 3E | N | 78 | 4E | ^ | 94 | 5E | n | 110 | 6E | 〜 | 126 | 7E |
/ | 47 | 2F | ? | 63 | 3F | O | 79 | 4F | _ | 95 | 5F | o | 111 | 6F | \ | 127 | 7F |
プチコン3号では使える文字がたくさんあるのですが、その中から文字コード32〜127の文字のみを掲載しました。
この表を見ると"¥"(円マーク)の文字コードは92となっています。その92の隣に記述している5Cというのは92を16進数で表記した数値となっています。
文字から文字コードを返すASC()の逆として文字コードから文字を返すCHR$()があります。では試しにPRINT CHR$(92)としてみましょう。画面に"¥"(円マーク)が表示されましたね。
ちなみに上記の表以外にも多くの文字、記号がありCHR$()では、0〜65535の値が指定可能(0〜65535以外の値も整数型で扱える範囲内の数ならば指定可能だけど実質0〜65535に丸められる)となっています。ひらがな等は16進数で&H3000〜&H30FF(10進数で12288〜12543)、プチコンの独自の記号は16進数で&HE200〜&HE2FF(10進数で57856〜58111)に入っています。
これ以外の文字もCHR$で指定できますが、プチコン3号のPRINT命令で表示ができない文字は[×]が表示されます。(漢字表示の方法については下記参照)
プチコン3号では画面の特定座標にどのような文字が表示されているかを調べる関数CHKCHR()が用意されています。A=CHKCHR(X,Y)とすることで座標(X,Y)に表示されている文字コードが変数Aに代入されます。
ちなみに何も表示されていなければ0、画面外の座標を指定していれば-1という値を返します。
《 CHKCHR()使用サンプル「避けゲーム」 》
CLS
X=25:S=0
@LOOP
S=S+1
B=BUTTON()
IF B==4 THEN X=X-1
IF B==8 THEN X=X+1
IF X<0 THEN X=0
IF X>49 THEN X=49
LOCATE RND(50),29:PRINT "@"
IF CHKCHR(X,0)==ASC("@") THEN @END
LOCATE X,0:PRINT "V"
VSYNC 2
GOTO @LOOP
@END
BEEP 11
LOCATE 0,1:?"SCORE=";S
|
BUTTON()に関しては後述の「ボタンやスライドパッドでキャラを動かしてみよう」を参照、IFに関しては後述の「IF〜THEN〜による条件判断」を参照、IFに関しては後述の「VSYNCとWAITでタイミングを取れ」を参照
これは十字ボタンの左右で"V"を動かし画面上に表示されている障害物"@"を避けるゲームです。
コンソール画面では後から表示された文字によって先に表示されている文字が上書きされてしまう(重ね合わせて表示させることができない)ためにプレイヤーキャラを表示した後にCHKCHR()を記述すると仮にプレイヤーキャラと障害物が衝突していたとしてもそれを取得できません。したがって、プレイヤーの移動座標を決定 → CHKCHR()で読み取る → 障害物が無ければそこに移動(障害物があれば衝突処理を行う)という流れになります。
プチコン3号にはコンソール画面を上下左右にスクロールさせるSCROLL命令がありますが、このゲームでは上記のように「Y座標29に表示したら自動的にスクロールする」というのを活用してスクロールさせています。
CHKCHR()使用時に注意するのは上記のように画面の一部の文字を消したい時に" "(スペース)で上書きして消してしまった場合です。文字コード表を見ての通りスペースの文字コードは32となっています。見た目では何も表示されてないのに0ではなく32という文字コードを返したら困ることがあるでしょう。
つまり、CHKCHR()を使用する場合には画面の一部の文字を消したい時には" "(スペース)で上書きするのはあまり良くないということです。では、どうするかというと" "(スペース)ではなくCHR$(0)で上書きしてしまうのです。これならば消えた部分は0を返すので問題は無くなります。
プチコン3号で漢字表示を行うにはver.3.2.0より前は下記のDIALOG命令を使うしかありませんでしたが、ver.3.2.0からはPRINT命令で普通に漢字表示が可能になりました。標準搭載の美咲フォントは8x8ドット(実質7x7ドット)ということで決して識別しやすいフォントではありませんが、従来はDIALOG命令以外では自前でフォントを用意してグラフィック表示を行うしかなかったので大きな進化です。(識別しやすいフォントではないとはいえこのドット数ということを考えると美咲フォントはトップレベルの見やすさを誇る)
とはいえ、漢字が標準で表示可能になったというだけであってそれを実際に使うにはそれなりの知識が必要になります。
すべての文字は上記のように文字コードが設定されているため文字コードさえ分かればCHR$()を使って漢字表示は可能になります。プチコン3号では文字コードにはunicodeが採用されていて「UTF-16 コード表」などのキーワードでWeb検索をすれば文字コードは検索可能です。例えばプチコン3号の「号」の文字コードは53f7となっているため PRINT "プチコン3"+CHR$(&H53F7) とすれば画面には"プチコン3号"と表示されます。(文字コードは基本的に16進数で記載されているため表示の際には数字の前に&Hを付ける必要がある)
PCなどでネットが自由に活用できる環境の人ならばネット検索というのも1つの手段ですが、3DS本体しかない人は大変ですし、常にネットに繋がっているわけではないという人ならばやはり本体だけで何とかしたいところです。
本体だけで何とかできるようにするためSYSフォルダの中にKANJITBLというファイルが用意されました。これは音読み順に使用可能な漢字が羅列してあるので必要な漢字を見つけ出して自分のプログラムにコピーして使うと良いです。
こうすることで、「CHR$を使いPRINTで漢字表示」ではなくプログラムリストの中で漢字を扱うことが可能になります。「プログラムリストで漢字を使いたい」という人ですでにunicodeを調べているならばファンクションキー経由かソースコード操作命令を使いunicodeをリテラルな文字列(漢字)に変換するプログラムを作りそこから自分が作っているプログラムにコピペをするという方法もあります。
ファンクションキーに登録する方法ならば非常に簡単です。例えば「プチコン3号」の「号」の字はKEY 1,CHR$(&H53F7)とするだけでF1に登録できるので「号」の文字を入力したい場所でF1を押せばいいです。複数の漢字を登録したいならばまとめて1つのファンクションキーに登録するプログラムを作ると良いでしょう。
ただし、ファンクションキーには登録できる文字数に制限があるため注意が必要です。1つのファンクションキーには最大256文字登録可能で、実際に入力できるのは後ろから128文字分となっています。128文字を超えた分を知りたい場合はKEY 1 OUT A$としてやればF1に入っている文字列を変数A$に入れることができるためPRINT A$でその内容が分かります。文字列変数の中に入っている文字列をリテラルな文字列にしたい場合はソースコード操作命令を使うと良いです。例えばPRGEDIT 1:PRGSET A$とすれば変数A$の内容をプログラムスロット1の最初の行にリテラルな文字列として書き込むことができます。
「unicodeからリテラルな文字列に変換する」といっても難しそうに感じる初心者の人もいると思いますし、KANJITBLから1文字ずつ調べて見つけ出してコピペするという原始的な方法には耐えられないという人も非常に多いと思います。そこで自前でIME(Input Method Editorの略で端的に言えば日本語入力を補助するソフト)を作ったプチコンユーザーもいます。
日本語入力を補助するソフトはいくつかありますが、個人的にはりゅうまごさんが作られた「RMG IME」がオススメです。公開キーはバージョンアップ等で変わるためここには書きませんがぜひWeb検索をして実際に使ってみてください。(「RMG IME」のGoogle検索へのリンクはこちらです)
正しくはコンソール画面ではないのですが、プチコン3号には3DSの内蔵フォントを使って表示するDIALOG命令があるのでここで簡単な使い方について書いておきます。
DIALOG "プチコン3号"とすれば下画面に"プチコン3号"とダイアログ表示されます。
もちろん、DIALOG命令では直接文字列を記述するだけではなくCHR$()による指定や文字列変数を使った表示も可能です。(1度に表示できるのは256文字までで改行を行うにはCHR$(10)もしくはCHR$(13)を入れる必要がある)
DIALOG命令は下記のようになっています。
DIALOG テキスト文字列 , 選択タイプ番号 , キャプション , タイムアウト時間
これらの項目はすべて記述する必要はなく省略が可能です。テキスト文字列についてはすでに書いた通りで普通に文字列で記述したり、CHR$()を使い文字コードを記述するなどの方法があります。
選択タイプ番号とは0、1、2、3、4、5のいずれかの値を入れるとその書式で画面上に[はい]、[いいえ]などのボタンの種類や配置場所が変わります。実際に数字を変えて自分の目的に合ったものを選択すると良いでしょう。(省略時は0番が選択される)
キャプションというのは上に1行で表示される文字のことです。そのダイアログの説明などを入れると良いでしょう。(省略時はキャプションが"DAILOG"になる)
タイムアウト時間は秒数を設定できます。DIALOG "プチコン3号",0,"テスト",3 とすれば3秒でダイアログは自動的に終了しますが、DIALOG "プチコン3号",0,"テスト",-180 のように負数で指定すればフレーム単位になります。1秒は約60フレームなので180フレームは約3秒となります。(省略時はボタンを押すまでダイアログは終了しない)
数値変数=DIALOG(テキスト文字列 , 選択タイプ番号 , キャプション , タイムアウト時間)
このように記述すると数値変数には押したボタンの値が入ります。画面左のボタンを押すと値は-1になり、画面右のボタンを押すと値は1、タイムアウトになった場合は値は0になります。
数値変数=DIALOG(テキスト文字列 , ボタン種類 , キャプション , タイムアウト時間)
また2番目の引数が負数の時は画面上にボタンが配置されない代わりに本体のボタンやタッチ状態が使用できます。ただし、このボタンの値は後述のBUTTON()関数の値とは異なりDIALOG命令独自の値な所に注意が必要です。
ボタン種類 | 使用可能ボタン |
-1 | ABXYボタン |
-2 | 十字キー |
-4 | LRボタン |
-8 | タッチパネル |
※使用可能ボタンを選択するためには使いたいボタンの種類の所の数字をそれぞれ足して行きます。
例えば十字キーとタッチを使用したい場合は-2と-8を足して-10を設定します。
タッチは押しているか否かしか分からないため座標を調べたい人はTOUCH OUT命令と併用してください。
押したボタン | 変数に入るボタンの値 |
Aボタン | 128 |
Bボタン | 129 |
Xボタン | 130 |
Yボタン | 131 |
上ボタン | 132 |
下ボタン | 133 |
左ボタン | 134 |
右ボタン | 135 |
Lボタン | 136 |
Rボタン | 137 |
タッチパネル | 140 |
※例えばAボタンを押した場合は128、Bボタンを押した場合は129、十字キーの上を押した場合は132、タッチパネルを押した場合は140という値になります。
ver.3.2.0から使用可能なボタンが増えました。
B=DIALOG("3びょういないにABXYLRのどれかのボタンをおせ!",-5,"ボタンせんたくテスト",3)
IF B==0 THEN DIALOG "しっぱい"
IF B==128 THEN DIALOG "Aボタンをおしたよ"
IF B==129 THEN DIALOG "Bボタンをおしたよ"
IF B==130 THEN DIALOG "Xボタンをおしたよ"
IF B==131 THEN DIALOG "Yボタンをおしたよ"
IF B==136 THEN DIALOG "Lボタンをおしたよ"
IF B==137 THEN DIALOG "Rボタンをおしたよ"
|
※IF命令については後述の「IF〜THEN〜による条件判断」を参照
DIALOG命令では自動的に一定時間入力待ちをしてくれるためBUTTON()関数のようにループでボタン入力待ちを行わなくても動作が可能です。
したがって、簡単な時間制限付きゲームもこのDAIALOG命令とIF命令による条件判断のみで作ることが可能です。(ABボタンは使うけどXYボタンは使わないとか、十字キーでダイアログ表示上のカーソルを動かしたいとかいう細かい要求に対応するならばループ命令やBUTTON()関数と併用する必要がある)
文字列変数=DIALOG(初期文字列 , キャプション文字列 , 最大文字数)
このように記述するとファイル名入力の専用のダイアログになります。ファイル名には使用可能な文字の種類や文字数に制限があるのですが、このダイアログを使えばファイル名に使えるかどうかをわざわざ自分で判定しなくても最初から使用可能な文字のみにすることが可能なのですごく便利です。
初期文字列にはその「ゲームのデフォルトのファイル名」「ロードしたときのファイル名」などを入れておくと良いでしょう。
またファイル名に使える文字数は最大14文字ですが、ファイル名の先頭に識別コードを付けたり、末尾に拡張子を付けたりという場合を考慮して14文字よりも少なくすることも可能になっています。識別コードは例えばゲーム名が「じゃんけんゲーム」ならばセーブのファイル名を「JANKEN○○○○」にしたいという際にJANKENの部分を省いた8文字分を入力させたいとか、GRPファイルの保存ならば「GRPであることを明示するため」末尾に.GRPを付けたいというのであれば残りの10文字分を入力させたいとかいうこともできるということです。
SAVE_NAME$=DIALOG("SAVE_DATA","セーブのファイルめいにゅうりょく", 10)
SAVE "DAT:"+SAVE_NAME$+".SAV",SAVE_DATA
|
これでデフォルトのファイル名は SAVE_DATA(これは変更が可能)、拡張子.SAV(これは固定)で配列変数SAVE_DATA[]に記録しているセーブデータをセーブすることができます。
セーブやロードの詳しいやり方については長くなるため改めて別の機会に書きます。
RETURN (プチコン3号講座のページにもどる) RETURN *MAIN (トップページにもどる)