メインコンテンツへスキップ
見出し画像

何を知っていて何を知らないのか

    Pi STARTER(ラズベリーパイ用BASIC言語パッケージ)版
    ひとりで遊べる人狼ゲームを公開中(要ラズパイ&Pi STARTER)

    http://www.ne.jp/asahi/chitose/net/download/jinrou/

    書いたタイトル読み直して「安直にして深淵」と思いました。
    何に対しても問いかけることできますよねこれ。

    およそ人が何か新しいことを始める際に、まるっきりそれについての知識がゼロってことはあんまりありません(ゼロだとそもそもそれを始めることがあり得ないことになってしまうので)。
    そして私も含めて多くの人は、そのわずかな「知っていること」をハーケンがごとく足掛かりにして、そこから一歩ずつ「知らないこと」を積み上げていく。そして出来上がる成果は、まず間違いなくその人が「最も知っていたこと」を色濃く反映したものになっている可能性が高い。何を知っているかは人によって異なるため、同じレギュレーションを共有しても仕上がりはまったくの別物になることもクリエーティブの世界では珍しくありません。その違いを人は「作風」と呼ぶのでしょう。

    私のブログラミングにしてもそうで、過去(中学生~高校生の頃)に覚えたわずかなBASICの知識が最初の足掛かりです。
    私は何を知っていて何を知らなかったのか。長くなりますが備忘録としてここにまとめておきたいと思います。

    ○ 知っておりそれなりに使い込んでいたもの

    PRINT
    文字を表示するほか、PRINT A+B のように計算する命令としても使います。
    だいたいどのBASICの教本にもこれは初っ端から登場します。

    画像1

    INPUT
    使用者に文字通りインプットさせる命令。数値を入れさせることもできますし、文字列を入れさせることもできます。

    画像2

    IF ●=■ THEN ▲▲▲
    条件分岐というやつ。Aの値が1だったらこっちに行って、みたいな使い方をします。
    私はBASICでもともとテキストアドベンチャーゲームみたいなの作りたかったため、プログラムの大半がこれでした。今回の「人狼ゲーム」でも大半はこれのお世話になってます。足を向けて寝られません。
    余談ですがSMILE BASICでは結構これの書式が変わっていて大変でした。何で「AとBが等しい」を「IF A==B THEN」とか書かなきゃならんのか…。
    でも「ENDIF」でTHEN後の処理を複数行まとめられるようになったのは神。

    画像3

    LOCATE
    表示する場所の座標を指定する命令。昔は結構多用したものですが、今回はそんなに使わなかったかな?でも知っていたので役には立ちました。

    画像4

    COLOR
    色を付ける命令。私が人生で最初にパソコンで実行した命令がこれ。個人的にどうしても文字を緑色にしたかったのですよ(笑)。

    画像5

    GOTO
    プログラム内のどこそこに「飛べ!」という命令。基本的にプログラムは上から順に実行していくものなので、これを使って別のシーンへの分岐とかを行なうのです。テキストアドベンチャーとか作るうえではこれも必需。足を向けて寝られません。
    SMILE BASICで行番号ではなく「@●●●」といったタグに飛べるようになったため、使い勝手が神になりました。

    画像6

    …以上、おわりです。
    私が自信を持って「知ってる!」と言えるBASIC命令はこれだけでした。
    (SAVE/LOADとかRUNとかLISTとかは別としてですが)

    △ 見たことはあるけど使ったことはない

    FOR ●=1 TO ■ / NEXT
    ほとんどのプログラムの説明書でかなり最初の方のページに登場する命令。
    FORとNEXTに挟まれた箇所を指定した回数繰り返すというもの。
    避けてるわけではないんですが、どういうわけか使う機会に恵まれなかったんですよね。何でだろう?
    今回の「人狼ゲーム」では1回だけ使用しています(プレイヤーがすぐバレる嘘を付いて参加者から袋叩きに合うシーン)。

    画像7

    GOSUB / RETURN
    GOTOと似ているのですが、違うのは飛ばした先にあるRETURNを見つけたらもとの位置に戻ってくること。
    ベーマガ等の投稿プログラムではよく見かけたのですが、私は怖くて(笑)使ったことがありませんでした。
    これを使うとよく使う処理をまとめておくことができ、そのようにまとまったものを「サブルーチン」と言います。言葉だけはよく聞くのですが、自分で使ってみるまでそれが何を指すのか分かっていませんでした。

    画像8

    DIM
    変数にナンバリングを付ける命令。
    普通「A」という存在は当たり前ですが「A」ひとつだけですよね?
    ところがDIM A[10]とか宣言しておくと、A[0]、A[1]、A[2]…みたいにAをたくさん使えるのです。分身の術かよ!
    私の作った「人狼ゲーム」では10人のプレイヤーが登場するので、それぞれのプレイヤーに関するいろんな値をA~Jの中にナンバリングした変数に入れて管理するのに使いました。使ってみて便利さを実感!テレビ通販のあおり文句みたいですね。

    画像9

    RND
    乱数を発生させる命令。
    X=RND(6)+1 で、Xに1から6までのどれかの数値が入ります。
    サイコロですね。ゲーマー的に言うと1d6です(どうでもいい)。
    数当てゲームなどを本で読んで入力するとだいたいこれが入っていますが、自分で使うのは今回が初めてでした。数々の処理(感謝される/恨まれる/投票するものを決めるなど)でこのサイコロを振っています。
    X=RND(6) だとXの値が「0から5」になるのでそこだけ要注意!

    画像10

    …以上、これらはベーマガとかのプログラムで打ち込んでいる中によく登場したから記憶の引き出しの中にあって、それを今回出してみたらめちゃんこ役に立った、みたいな感じです。
    よく「プログラミング上達したければとにかく写経しろ」と言われますが、そのとき何が何だか全然分からず入力してたことも数十年の時を経て有効な知識になったりするので、バカにできないものです。

    × 全然知らなかったもの

    MAX と  MIN
    たくさんある変数の群れの中から最大値(MAX)または最小値(MIN)を求める命令。
    これは知らなかった!というか昔からこんなのありました?
    「人狼ゲーム」のキモである投票シーンで、誰が一番信用できないか(またはその逆)を判定させるために使用。これを知らなかったときはものすごく遠回りなプログラムを書いており、「ALL ABOUT Pi STARTER」でこの命令を見つけたときは本当に救われました。足を向けて眠れません。

    画像11

    VAL
    文字列を数値に変換する関数(「電子工作マガジンSUMMER2019」内別冊「マイコンBASICマガジン」記述より)。
    プレイヤー発言時に解像度の関係でどうしても画面切り替えにカーソルキーを使わせざるを得ず、数値入力とカーソルキー入力を併用させるために使用しました。私が悩んでるタイミングでこれを掲載してくれた「電子工作マガジン」に超感謝です。足を向けて眠れません。

    画像12

    他にも画面制御とか音を鳴らす命令とかも使っていますが割愛します。

    プログラミング分かる方から見れば、この知識で「人狼ゲーム」作るとか、お前どんだけアホやねんという感じでしょう。
    でもまぁ、作り始めると決めてしまったものは仕方ありません。暴走した車はゴールに着くかどこかに衝突するまで走り続けるほかはないのです。

    次回からは(私の気持ちが折れなければ)具体的な制作工程に入っていきたいかな、と思います。

     
     
    久保田裕之のさまざまな趣味活動記録。プログラミング・ゲーム・アニメ・声優・自転車など。 自作のゲームプログラム(ひとりで遊べる人狼ゲーム・ガイスター)公開中。http://www.ne.jp/asahi/chitose/net/download/

    あなたへのおすすめ