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