N88-BASICでクマ
nl20603.zip(kuma1.bas)とNL-BASICは、
下記リンクよりダウンロードできます。
NL-BASIC(N88-BASIC互換?)ホームページへのリンク
Readme.txtを読んで、遊んで見て下さい。
下記リストをマウスで選択しCtrl+cでコピーし、
NL-BASICの画面でAlt+v(Ctrl+vではないので注意)
でプログラムを読込めます。
kuma1.bas
100 '----------------------------------------------------------------------
110 ' くま by ULproject for N88-BASIC
120 '----------------------------------------------------------------------
130 DEF FNR(X) = X * PI / 180 '--- 度をラジアンへ
140 PI = ATN(1) * 4 '--- π(arctan(1) = π/4)
150 B$ = CHR$(0)+CHR$(&H55)+CHR$(0)+CHR$(0)+CHR$(&HAA)+CHR$(0) '--- 黒赤
160 CLS 3 '--- 画面消去(1:文字 2:CG 3:両方)
170 X = 320 '--- 顔の中心位置x
180 Y = 200 '--- 顔の中心位置y
190 CIRCLE(X-60, Y-60), 40, 0, , , , F, B$ '--- 左耳
200 CIRCLE(X+60, Y-60), 40, 0, , , , F, B$ '--- 右耳
210 CIRCLE(X-60, Y-60), 20, 7, , , , F '--- 左耳中
220 CIRCLE(X+60, Y-60), 20, 7, , , , F '--- 右耳中
230 CIRCLE(X , Y ), 80, 0, , , , F, B$ '--- 顔
240 CIRCLE(X , Y+20), 45, 7, , , , F '--- 顔中
250 CIRCLE(X-30, Y-20), 15, 0, , , 1.2, F '--- 左目
260 CIRCLE(X+30, Y-20), 15, 0, , , 1.2, F '--- 右目
270 CIRCLE(X-30, Y-20), 5, 7, , , 1.5, F '--- 左目中
280 CIRCLE(X+29, Y-20), 5, 7, , , 1.5, F '--- 右目中
290 CIRCLE(X-25, Y-16), 2, 7, , , 1.5, F '--- 左目小
300 CIRCLE(X+34, Y-16), 2, 7, , , 1.5, F '--- 右目小
310 CIRCLE(X , Y+ 5), 10, 0, , , , F '--- はな
320 CIRCLE(X , Y+20), 25, 0, FNR(210), FNR(329) '--- くち
330 LINE(X-21, Y+32)-(X-22, Y+35), 0 '--- くち左
340 LINE(X+21, Y+32)-(X+22, Y+35), 0 '--- くち右
NL-BASIC,VL-BASICについての注意点とお知らせ
扇形の塗潰しは、はみ出しや塗残しなどの不具合が
でる可能性があります。
その時はPAINTなどで代用して下さい。
塗潰しの円や扇を描く過程を見る見ないを、
Alt+'-' , Alt+'^' で切替えることができます。
(NLBasic01.txt,VLBasic01.txtでも可能です。)
ここから、解説です。
N88-BASICのグラフィック座標は
(0, 0) … (639, 0)
…
(0,399) … (639,399)
のように左上が原点になっています。
(右下はSCREENモードにより変わります)
色は0:黒 1:青 2:赤 3:紫 4:緑 5:水色 6:黄 7:白
です。
N88-BASICのCIRCLE命令について説明します。
CIRCLE(320, 200), 50, 7
で半径50の白い円が画面中央に描かれます。
CIRCLE(x, y), r, c, a1, a2, e, F, b/t$
(x, y) … 円の中心座標
r … 円の半径
c … 円弧の色
a1, a2 … 円弧の開始,終了角(0~2π)(負の時半径描画)
e … 楕円の縦の半径に対する横の半径の割合
半径rの円を縦,横に潰した形になる。
e = 0.5 → 横r , 縦0.5r で横長
e = 2.0 → 横r/2 , 縦r で縦長
F … Fを指定すると円内部をc色で塗潰す
b/t$ … bを指定するとcの代わりにb色で塗潰す
bの代わりにt$を指定するとタイルパターン
で塗潰す
8色モードのタイルパターンの説明
150 B$ = CHR$(0)+CHR$(&H55)+CHR$(0)+CHR$(0)+CHR$(&HAA)+CHR$(0) '--- 黒赤
16進 2進
Blue 00 00000000 1の位(この位が1なら1)
Red 55 01010101 2の位(この位が1なら2)
Green 00 00000000 4の位(この位が1なら4)
02020202 … 合計
Blue 00 00000000 1の位(この位が1なら1)
Red AA 10101010 2の位(この位が1なら2)
Green 00 00000000 4の位(この位が1なら4)
20202020 … 合計
よって、B$は、
黒赤黒赤黒赤...
赤黒赤黒赤黒...
...
というタイルパターンで塗潰します。
N88-BASICの関数の定義
BASICでは1つの数式を関数として定義できます。
(IFなどの命令文を書くことはできません)
DEF FN関数名(x, y, ...) = ...
です。
130 DEF FNR(X) = X * PI / 180 '--- 度をラジアンへ
を実行しておくと、
FNR(90)は90 * PI / 180という計算が行われます。
CIRCLEの角度はラジアン単位なので、
この関数を使えば度(0~360)で指定できます。
140 PI = ATN(1) * 4 '--- π(arctan(1) = π/4)
は、円周率の代入です。
PI = 3.141592653589793
としてもかまいません。
Tan-1(1) = π/4なので4倍しています。
CLS nは画面消去です。
nが1または省略 → テキスト画面の消去
nが2 → グラフィック画面の消去
nが3 → 上記両画面の消去
N88-BASICのLINE
LINE(x1, y1)-(x2, y2), c
座標(x1, y1)から(x2, y2)にc色の線を引く
その他、箱や塗り潰し、破線など、
詳しくはNL-BASICなどのマニュアルを見て下さい。