判定してないので、今は壁を通り抜けることができます。Vimmerなので移動はjkhlです。IF壁の判定を行う前に、マップ内の移動区間を定めたいと思います。select次は、壁(#)の判定です。次に移動する場所に#があったら、移動しないようにする修正にしました。COLORコンソールに表示する文字色と文字色を変えてみます。color命令で数字を指定すれば、数字に割り当てられている色が設定できます。nexttakk@ubu16:~/basictest$では作成中のゲームのマップに色を付けてみましょう。GOSUBGOSUB命令を使って、ダンジョンにモンスターを出現させます。行番号は修正する度に変わるので、ラベル名にします。monsterというラベルにしました。return移動してると時々モンスターが現れるようになりました。モンスターが現れたという表示だけではつまらないので、ヒットポイントを作って、モンスターからダメージを受けるように修正します。ヒットポイントの変数名はhpにしました。100サブルーチンの方はヒットポイントを10引く処理を追加します。returnあと、ヒットポイントが表示されていないと、ダメージを受けていることが分からないので、もう一つサブルーチンを追加します。return全ソースです。760takk@ubu16:~/basictest$モンスターに遭遇すると、ヒットポイントが減ります。変数の入れ替え流行りの言語、例えばPythonでは、変数の入れ替えは、一文でできてしまいます。b,aPythonさん、なんてエレガントに書けてしまうのでしょう。C言語を軸に育ってしまった私としては、驚きの構文です。9takk@deb9:~/tmp$結果です。10takk@deb9:~/tmp$素敵ですね。Python空とんでます。私はPerl派なのでこれが一番すっきりしているように思います。Pythonも捨てがたいですが。9takk@deb9:~/tmp$結果はPythonと同じです。Rubyでも同じことができますね。軽く処理を書きたいなら、Perl/Python/Ruby世代の言語が良いのでしょうか。酒を飲みながら趣味でプログラミングするベテランの友人は、頑としてBASICしか使わないそうです。わからない気もないです。この頑固友人のような人たちは軽くすっきり書くプログラミングの面白さを味わうことはできないのでしょうか。いえいえ、BASICでも変数の入れ替えが1命令でできてしまいます。その名もSWAP命令。変数Bこのように使います。=";Btakk@deb9:~/tmp$はい、すっきりしてますね。BASEとは、配列の添字の既定の下限を宣言する命令です。qb)では、01以外も指定できます。BASEを1にして、わざと0番目に入れてみます。コンパイルエラーになるのでしょうね。optionbase.basエラーでません。実行はどうでしょうか。0takk@deb9:~/tmp$代入されています。したら、確保した領域を0で初期化するだけなのかもしれません。0takk@deb9:~/tmp$なるほど、0以外の値が見えます。たくさんの領域で確認してみます。0のプログラムを作ります。op0両者を比べてみましょう。0takk@deb9:~/tmp$やはり思った通りです。BASEはおそらく領域確保して、初期化する位置だけの指定でしょう。代入できてしまうので、注意が必要です。SPC『スペース☆ダンディ』ティザーPV/『SPACE☆DANDY』Teaserアニメ『スペース☆ダンディ』(2014)スペースSFコメディです。いうことでBASICでスペースです。スクリプト言語では、同じ文字が連続する文字列をこのように簡単に生成できます。"$a\n"'AAAAAtakk@deb9:~/tmp$今回は、空白の生成をします。空白を10文字生成したい場合、Perl/Python/Rubyでは、こんな感じでしょうか。"AAA\n"takk@deb9:~/tmp$これをBASICでやるには、SPC命令です。40takk@deb9:~/tmp$実行結果です。AAAtakk@deb9:~/tmp$SPACE$(数字)と命令も同じように使えます。BASICは子供の頃に夢中になって、ベーマガの打ち込みしたり、自分で考えてプログラミングしたつもりですが、こんな命令があったことも忘れてました。DATE$/TIME$/VAL/STR$時間計算です。DATEとTIMEを使ってみましょう。time$takk@deb9:~/tmp$実行結果はこうです。./date09-05-201723:15:39takk@deb9:~/tmp$時分秒を個別で取得したい場合は、TIMEで返る文字列の一部をMID$を使って抽出します。140takk@deb9:~/tmp$実行結果です。./time23:32:39233239takk@deb9:~/tmp$ただこれでは文字列を取得してるだけですので計算ができません。文字列を数字にするには、VAL()を使います。数字を文字列に戻すには、STR$()を使います。sec$実行結果です。129takk@deb9:~/tmp$29に100が加算されて129が表示されました。129の前にスペースがありますが、負の数の時、-が入ります。200takk@deb9:~/tmp$では、時間を数値に直して、計算してみます。こんなプログラムになりました。hour$;":";min$;":";sec$takk@deb9:~/tmp$結果です。READ/DATADATAを使うと楽に定数定義できます。atakk@deb9:~/tmp$,(カンマ)で区切って一行に複数の値を定義できます。60,70,80,90,100takk@deb9:~/tmp$READで複数の変数に格納するには、変数を,(カンマ)で区切っ指定します。60,70,80,90,100takk@deb9:~/tmp$結果です。RESTORERESTOREを使います。DATAで定義された値は、順番に読み込みされますが、定義がない場合はどうなるでしょうか。atakk@deb9:~/tmp$このように定義がない場合、0が読み込まれます。0takk@deb9:~/tmp$読み込みをDATAの先頭に戻すには、RESTOREを使います。atakk@deb9:~/tmp$DATAの先頭に戻って500が読み込めました。OPEN/INPUT/CLOSEファイル読み込みをします。ファイルを開き、読み込み、閉じる。ファイルを扱うのはこの手順ですね。#番号でファイルを読み込みます。EOFを見つけるまで繰り返し読むため、do~loopを使っています。読み込むデータを作成。100takk@deb9:~/tmp$では、ビルドして、ファイルを読み込んでみましょう。処理は、読み込んでそのまま表示するだけです。100takk@deb9:~/tmp$ファイルと結果を比較してみます。sample.txttakk@deb9:~/tmp$何も表示されてませんので、一致しましたね。OPEN/WRITE/CLOSE読み込みの次は書き込みです。サンプルはファイルコピーをするプログラムです。sample.txtをout.txtへコピーします。130takk@deb9:~/tmp$結果を見てみましょう。sample.txttakk@deb9:~/tmp$あれ、sample.txtとout.txtのサイズが違います。100takk@deb9:~/tmp$書き込み時に勝手に””が付与されていますね。実はwriteを使うと、区切り文字とクォートが自動で付与されるようになっています。変数を用意して試してみましょう。120takk@deb9:~/tmp$以下が結果です。なんとCSV形式ですね。out0.txt"HELLO1","HELLO1","HELLO3"takk@deb9:~/tmp$ではwriteをprintに変えてもう一度、ファイルコピーをやってみましょう。130takk@deb9:~/tmp$結果です。out2とsample.txtが同じサイズです。近代の言語では、配列の要素は配列の変数さえ分かればすぐに取得できますね。."\n"'32takk@deb9:~$BASICではどうしていたのでしょう。";sizeこのようにbound(境界)を求める関数を使ってました。boundで最大値が取得できます。51要素数は、最大50-最小0+1の、51になります。BASEを変えてみましょう。";size最小が10に底上げされたので、要素数は11です。11二次元配列の場合は残念なことに、次元数をbound関数に指定せねばなりません。10三次元になっても指定が面倒なのは同じです。見つかりませんでした。email.ホーム2.プログラミング言語2-1.BASICスポンサーリンク広告プロフィール管理人:takketeお仕事:システムエンジニア日々何か向上したくて、もがいています。Policyホーム検索トップサイドバースポンサーリンク広告プロフィール管理人:takketeお仕事:システムエンジニア日々何か向上したくて、もがいています。thanksタイトルとURLをコピーしました。