【四川省への道】第2話


こんにちは、トラップですぅ。(^o^)/

前回は全くプログラムを載せていなかったので、今日はすぐに
ソースリストにいってみましょう。(^^)

◎とにかく表示してみよう

 さて、せっかくデータを作ったのですから表示させてみたいですね。
 綺麗なプログラム・・・というのは、とりあえず無視無視!
 牌を表示するだけの最低限のプログラムを書いてみましょう。

 えっと、まず最初に「WIDTH」で画面を初期化して、後はGPRINTを
 並べちゃえば、なんとかなるかな。さすがにGPRINTの羅列じゃ何
 だから、XとYの2重ループで・・・。

    1 REMサンプル No.1
    100 WIDTH,M,N
    110 CLS
    120 DIM P$(35),Q$(35)                 :'P$は上半分,Q$は下半分用の変数
    130 GOSUB *PINIT                      :'牌のデータをP$,Q$に読み込む
    140 GOSUB *TESTDRAW                   :'牌を描画する。
    150 CALL@11                           :'画面をタッチするまで待つ
    990 *THEEND:CLS:WIDTH,,N:CALL@20:CALL@18:KEY 0,"":END
    1000 '
    1010 *PINIT
    1020 P$(0)="0000101211202123210100FF"
    1030 Q$(0)="0109099FFDB5FDD33F3101FE"
       ・
       ・
       ・
    1720 P$(35)="02071A7D1A0703061F0601FF"
    1730 Q$(35)="0101C1F1C181C1B17DB1C1FE"
    1740 RETURN
    2000 '
    2010 *TESTDRAW
    2020 FOR Y=1 TO 8
    2030   IF Y<5 THEN K=0 ELSE K=18
    2040   FOR X=1 TO 18
    2050     XX=X*12-1 : YY=Y*16+13+7      :'牌は横12x縦16ドットなので
    2060     GCURSOR(XX,YY)   : GPRINT P$(K);
    2070     GCURSOR(XX,YY+8) : GPRINT Q$(K);
    2080     K=K+1
    2090   NEXT
    2100 NEXT
    2110 RETURN

 ふう、表示だけなら、こんな感じで良いでしょうかね。(^_^;)
 (1040〜1710行は、SHISEN10.BA0の2〜35行のデータから作成して下さい)
 (1行を真ん中から2つに分けて、上記リストのようにすればOKです。)

 こんな短いプログラムにも関わらず、幾つか失敗もありました。
 当初、GPRINTを使う時、表示したい位置の左上の座標を指定するものと
 思い込んでたら、実は左下の座標を指定するということだったのです。
 従って、(0,0)-(0,7)に表示するためには、(0,7)を指定しないと
 いけないのです。マニュアルに載ってはいますが、すっかり勘違い
 してました。(^^ゞ コマッタモンダ

 この他、起動時と終了時のWIDTH命令による処理など、きちんと
 行わないと、連続して実行した時に画面が乱れること。CLS等で
 画面を消さないと、いつまでも「お待ちください」のメッセージが
 消えないこと。CALL@11を使えば、画面をタッチするまでは先に
 進まない(オートパワーオフはする)ことなど、結構勉強になりました。

 ま、なにはともあれ無事に表示できると嬉しくなりますね。(^-^)
 画面に表示された牌を見ると、「絶対に作り上げるんだ!」って
 気持ちになってきます。

 この時点でおわかりでしょうが、四川省は構造を決めて作っていった
 のではなく、絵を表示するところから徐々につみあげていった物です。
 設計してから開発すべきとの意見もありますが、気楽に作るには、
 これも悪い方法ではないでしょう。プロトタイピングということで
 許してくださ〜い。(^_^;)

☆補足:GPRINT用の牌データ・ファイル

 牌のデータは「SHISEN10.BA0」というファイルに入っています。
 構成は、1レコード50バイトで、全36レコード。具体的には、牌の上半分
 12x8ドットを表す16進文字列が24バイト、続けて下半分を表す16進文字列が
 24バイト、最後に区切りとしてCR+LFの2バイトが並んでいます。
 始めの24バイトをP$、次の24バイトをQ$という変数に入れた場合、
 次のような感じで、(0,0)-(11,15)の範囲に牌の絵が表示できます。

    GCURSOR(0,7)
    GPRINT P$;
    GCURSOR(0,7+8)
    GPRINT Q$;

☆次回予告

 牌のデータができた以上、後戻りは許されません。
 次回は、ペンタッチによる操作ルーチンにてお会いしましょう。
【今回のソースお持ち帰り】 SAMPLE1.SRC