【四川省への道】第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
|