SCREEN


 [機能] 各画面の表示を0か1で指定する。

 [書式] SCREEN [T],[G],[S],[B]

 [説明]
  省略された部分は以前の状態を保持します。
  当BASIC は以下の4種類の画面を持っています。
   T - テキストスクリーン 0か1
   G - グラフィックスクリーン 0か1
   S - スプライトスクリーン 0か1
   B - バックグランドスクリーン 0か1
  その他に表示されないスプライトとBGで使用されるグラフィックバッファを持っています。
  グラフィックバッファのサイズは初期状態で画面と同じサイズです。
  (初期状態) screen 1,1,1,0

 [例]
   screen 1,1,0,0 :'Text & Graphic



  PRIORITY


 [機能] 各画面の表示優先順位を決定します。

 [書式] PRIORITY "TGSB"

 [説明]
  "TGSB"の文字の並びで左から順に手前に表示される画面を決定します。
   T - テキストスクリーン
   G - グラフィックスクリーン
   S - スプライトスクリーン
   B - バックグランドスクリーン

 [例]
   priority "TSG" :'Priorities Text>Sprite>Graphic



  PSET


 [機能] グラフィック画面に点を描きます。

 [書式] PSET(x,y) [,カラーコード]

 [説明]
  座標(x,y) カラーコードで描画。
  カラーコード範囲:(-2147483648~2147483647)
  カラーコード=0 は透明色(黒)です。

 [例]
   pset(100,100),rgb(20,20,200)



  LINE


 [機能] グラフィック画面に線を描きます。

 [書式] LINE(x1,y1)-(x2,y2), [カラーコード] [,|b or bf|]

 [説明]
  座標(x1,y1)-(x2,y2) カラーコードで描画。
  'b'を指定すると四角形を描きます。
  'bf'を指定すると塗りつぶされた四角形を描きます。

 [例]
   line(50,50)-(200,400),hsv(160,25,80),b



  CIRCLE


 [機能] グラフィック画面に円を描きます。

 [書式] CIRCLE(x,y) ,半径 [,カラーコード]

 [説明]
  中心座標(x,y) カラーコード 半径で描画。

 [例]
   circle(100,100),80,col(5)



  OVAL


 [機能] グラフィック画面に楕円を描きます。

 [書式] OVAL x,y,x2,y2[,カラーコード][,f]

 [説明]
  範囲(x,y)(x2,y2)の枠の中に楕円をカラーコードで描画します。
  スイッチ f を指定すると円の中は塗りつぶしされます。

 [例]
    oval 100,100,400,250



  PAINT


 [機能] グラフィック画面を塗りつぶします。

 [書式] PAINT(x,y), [カラーコード] [,境界カラー]

 [説明]
  座標(x,y) カラーコード 境界カラーの指定で塗りつぶします。
  境界カラーが指定された時はその色が塗りつぶしの境界になります。
  省略された時は最初の座標(x,y)のバックグランドカラーが境界色になります。
  *AntialiasがONモードの時は、Line,Circleの描画で指定色以外の滲んだカラーコードが使われるため
   境界の線として判別されません。境界に使う描画はAntialiasのOFFモードで描画して下さい。

 [例]
   circle(100,100),80,col(5)
   paint(100,100),col(2),col(5)



  SYMBOL


 [機能] グラフィック画面に文字を描きます。

 [書式] SYMBOL(x,y),"文字列",フォントサイズ [,カラーコード]

 [説明]
  座標(x,y) カラーコード "文字列" フォントサイズの指定で描画。

 [例]
   symbol(20,20),"Test。",32,col(15)



  GET@


 [機能] グラフィック画面(1番目の座標)からグラフィックバッファ(2番目の座標)へ画像データを収めます。

 [書式] GET@(x1,y1),w1,h1,(x2,y2)[,w2,h2]

 [説明]
  当BASICはグラフィック画面の他にグラフィックバッファを持っています。
  これはスプライトとバックグランドグラフィックで使用されます。
  (GET@PUT@)命令はグラフィック画面とグラフィックバッファの間で
  直接グラフィックデータのやり取りをすることができます。
  w1,w2= 横サイズ    h1,h2= 縦サイズ
  転写元と転写先のサイズが異なる場合、拡大縮小描画されます。
  各種重ね合わせの方式は pen命令で設定することができます。

 [例]
   get@ (32,32),16,16,(64,64)



  PUT@


 [機能] グラフィックバッファ(2番目の座標)からグラフィック画面(1番目の座標)へ画像データを引き出します。

 [書式] PUT@(x1,y1),w1,h1,(x2,y2)[,[w2],[h2][,描画モード]]

 [説明]
  w1,w2=横サイズ h1,h2= 縦サイズ
  転写元と転写先のサイズが異なる場合、拡大縮小描画されます。
  各種重ね合わせの方式は pen命令で設定することができます。
  <描画モード>の指定で次の選択ができます。
   0. グラフィックバッファからグラフィック画面への描画。
   1. グラフィック画面からグラフィック画面への描画。
   2. グラフィックバッファからグラフィックバッファへの描画。

 [例]
   put@(0,0),32,32,(64,64),16,16  :'zoom x2


  ROLL


 [機能] グラフィック画面をスクロールさせます。

 [書式] ROLL [x],[y],[vx],[vy]

 [説明]
  x,y ではソフトウェア描画によるスクロールの移動量を指定します。
  実際にグラフィック画面は描画で書きかえられます。(描画時間の負荷はかかります)
  x,y が省略されると描画は行われません。(vx,vyを指定する時はx,y省略推奨)
  球面スクロールで画面端に消える部分は逆側から現れます。

  vx,vy は表示開始位置を変える仮想ハードウェアスクロール機能です。
  表示開始する座標を指定します。
  グラフィック画面のどの部分をBG画面枠中に表示するかを指定します。
  グラフィック画面サイズからはみ出している部分は黒く表示されます。
  予め bg_view ,,,,,1 でBG画面同期オンモードにしておきます。
  表示される範囲はBG画面と同じ枠になります。拡大率も同期します。
  BG画面と重ねあわせスクロールする表現が可能になります。

 [例]
   for i=1 to 128
   roll 0,-1
   pause 16
   next

 BG画面と重ねあわせスクロールするサンプル
 [smp_2roll.bas]

   100 cls 3:screen 0,0,0,0
   110 for i=0 to 15
   120 line(0,i)-(15,i),rgb(64+i*8,64+i*8,64+i*8)
   130 next
   140 get@(0,0),16,16,(16,0)
   150 for j=0 to 4
   160 for i=0 to 63
   170 line(i+j*64,0)-(i+j*64,320),rgb(64,64,64+i*2)
   180 next
   190 next
   200 bg_scale 2,2
   210 for i=1 to 256
   220 bg_fill 1,int(rnd(1)*32),int(rnd(1)*32)
   230 next
   240 if size(0)+size(1)>800 then sz=2 else sz=1
   250 bg_view (size(0)-256*sz)\2,0,256,256,sz,1
   260 bg_scene 0,0:screen 0,1,0,1
   270 for i=0 to 4000
   280 bg_roll 0,1
   290 roll ,,i\2 mod 64,0
   300 vsync
   310 next



  GLOAD


 [機能] 画像をグラフィック画面の指定した場所に読み込む。

 [書式] GLOAD "ファイルネーム"[,n][,(x1,y1)]

 [説明]
  座標の指定がない時は左上からになります。
   n=0  グラフィック画面に読み込む。 (デフォルト)
   n=1  グラフィックバッファに読み込む。
  グラフィックバッファでは最大2048x2048までの画像を読み込めます。
  初期バッファサイズより大きい画像を読み込むとバッファサイズもそれに合わせて拡大されます。
  png jpeg(jpg) に対応してます。

  システム内部素材の読み込みについて "mt**_sys.png"
  ファイル"mt**_sys.png"の形式(**は数字)はシステムで予約されたファイル名として
  自動で内部素材と判別され、システムから素材が読み出されます。
  各素材は指定の座標位置にそれぞれ読み込むことができます。
  "mt**_sys.png" はシステムの予約ファイル名でフォルダの中に実体はありません。
  カレントフォルダの現在位置がどこであるかにかかわらず
  パスなし"mt**_sys.png"の指定で素材を読み込むことができます。
  数字が一桁の時は0を付け加えて二桁表記で指定して下さい。(例:"mt03_sys.png")

  素材番号対応表(数字**の中身)
  04トランプカード(72x96pixel単位 13x4カード)
  05 チェス,リバーシ(64x64pixel単位 横7個ずつ)
  06 将棋駒(64x64pixel単位 横8個ずつ)
  07 麻雀牌(32x48pixel単位 横9+α個ずつ 横向きは48x32p 上視点牌32x24p)
   (点棒は始点[296,0]から10x118p 横16pおき 横始点[360,0])
  31 歩行キャラ (1キャラ32x48pixel 4方向1キャラ16パターン)
  32 モンスター リアル調 (128x128pixel 横6体ずつ)
  33 モンスター アニメ調 (96x96pixel 横8体ずつ)
  マップチップ詳細
  41 宝箱等, 42 ドア, 43 台座スペース, 44 銅像ツリー,
  45 ワールドマップ, 46 町, 47 村, 48 雪町, 49 城,
  50 森, 51 妖精森, 52 水辺森, 53 神殿, 54 雪, 55 砂漠,
  56 火山, 57 運河, 58 洞窟, 59 闇洞窟, 50 氷洞窟,
  61 洞窟等パーツ, 62 各区切りパーツ(城町洞窟部屋他),
  63 マグマ海川パーツ, 64 各区切りパーツ(森洞窟他),
  65 ワールドマップパーツ

 [例]
     gload "image.png"
     gload "mt46_sys.png",1,(80,40) :'material-town



  GSAVE


 [機能] グラフィック画面の指定した場所をファイルに保存する。

 [書式] GSAVE "ファイルネーム"[,n][,(x1,y1)-(x2,y2)]

 [説明]
  範囲の指定がない時は全体になります。
   n=0 グラフィック画面を保存します。 (デフォルト)
   n=1 グラフィックバッファを保存します。
  png jpeg(jpg) に対応してます。

 [例]
   gsave "gd01.jpg",,(100,100)-(200,200)



  POINT


 [機能] グラフィック画面の座標(x,y)からカラーコードを読み取ります。

 [書式] POINT(x,y)

 [説明]

 [例]
   c=point(x,y)



  PEN


 [機能] 描画するペンのサイズを設定します。

 [書式] PEN [ペンサイズ] [,描画モード]

 [説明]
  [ペンサイズ]で描画のペンサイズを設定します。値が大きい程ペンの幅も大きくなります。
  PSET,LINE,LINE B,CIRCLE の描画に影響を与えます。

  [描画モード]
  PorterDuffといわれる描画モードで下地画像と描画画像の重ね合わせ方式を選択します。
  get@,put@での描画に影響を与えます。
  PorterDuffの詳細についてはこちらの公式解説をご覧下さい。
  https://developer.android.com/reference/android/graphics/PorterDuff.Mode
  他にもよりわかりやすい情報がありますので'PorterDuff'で検索することをお勧めします。

  次の中から 0~17の数値で指定します。
  0.CLEAR    1.SRC      2.DST      3.SRC_OVER
  4.DST_OVER 5.SRC_IN   6.DST_IN   7.SRC_OUT
  8.DST_OUT  9.SRC_ATOP 10.DST_ATOP 11.XOR
  12.DARKEN  13.LIGHTEN 14.ADD     15.MULTIPLY
  16.SCREEN  17.OVERLAY
  アルファ値も含めた処理が行われます。
  基本的にカラー0の黒は透明扱いになります。
  種類が多いですが通常の使用では1番(デフォルト)か3番を指定します。

  いくつか使用度の高い代表的なものを紹介します。
  1.SRC
  描画画像をそのまま描画します。
  3.SRC_OVER
  上から重ね合わせを行う描画です。
  11.XOR
  論理演算のXORを利用した描画です。
  14.ADD
  論理演算のORを利用した描画です。
  15.MULTIPLY
  論理演算のANDを利用した描画です。

 [例]
      pen 8
      line(50,50)-(200,400)
      pen ,3
      put@(100,100),16,16,(200,200),,,1


  SIZE


 [機能] 画面のサイズを取得します。

 [書式] SIZE(n)

 [説明]
  取得する種類。
  n=0: グラフィックの水平方向の画素数を得る。
  n=1: グラフィックの垂直方向の画素数を得る。
  n=2: テキストの水平方向の文字数を得る。
  n=3: テキストの垂直方向の文字数を得る。
  n=4: 文字のフォントサイズを得る。



  LAY


 [機能] 画面の1/100を単位として、レイアウトで機種依存しない座標値を返します。

 [書式] LAY(n)

 [説明]
  機種の解像度に依存しない位置指定ができます。
  画面の縦横の短い方の1/100のPixel数を1の単位とします。
  例えば1080x1920の機種の場合、lay(1)は108Pixelの値を返します。
  lay()関数を使った記述によりどの機種でも同じ比率の描画が可能となります。
  特にUI_BUTTON命令でのボタン座標の指定に使用できます。
  [例]画面20%から60%までの四角描画
  line(lay(20),lay(20))-(lay(60),lay(60)),col(15),b



  COL


 [機能] 用意されたシンプルなカラーセットからカラーコードを生成します。

 [書式] COL(n)

 [説明]
  0:黒(透明) 1:暗い青 2:暗い赤 3:暗い紫 4:暗い緑 5:暗いシアン 6:暗い緑 7:暗いグレー
  8:グレー 9:青 10:赤 11:紫 12:緑 13:シアン 14:黄色 15:白

 [例]
     circle(240,200),80,col(5)



  RGB


 [機能] 赤青緑の三原色からからカラーコードを生成します。

 [書式] RGB(red,geen,blue)

 [説明]
  各色の値の範囲は 0 から 255です。

 [例]
   line(50,50)-(120,80),rgb(200,40,100)



  HSV


 [機能] 色相(Hue)彩度(Saturation)明度(Value)からカラーコードを生成します。

 [書式] HSV(hue,saturation,value)

 [説明]
  各値の範囲です。
  hue (0-360)  saturation (0-100)  value (0-100)


  GETBITMAP


 [機能] グラフィック画像をビットマップ配列に取り込みます。

 [書式] GETBITMAP

 [説明]
  ビットマップ配列によるグラフィック画面加工の概要。
  グラフィック画面を内部のビットマップ配列に取り込んで一括して加工処理をしてグラフィック画面に戻すことができます。
  GETBITMAP:取り込む命令、PIX_():ピクセル単位でカラー読む関数、
  PIXEL:ピクセル単位でカラー設定する命令、SETBITMAP:全画面に戻す命令と
  これを囲む for~next のループ命令で構成されます。

 [例]
  参照:pixc



  SETBITMAP


 [機能] ビットマップ配列をグラフィック画像に描画して戻します。

 [書式] SETBITMAP

 [説明]

 [例]
  参照:pixc getbitmap


  PIXEL


 [機能] ビットマップ配列の指定座標へcolorコードデータを書き込みます。

 [書式] PIXEL color[,x,y]

 [説明]
  PIXELとPIX_()関数では座標xyを省略することができます。(省略した方が速度は上がります)
  座標を指定した時はグラフィックポインタの位置が設定され
  次回省略した時にそのグラフィックポインタの位置に操作が行われます。

  更にPIXEL命令を行った後はグラフィックポインタは自動的に次の座標へ移動します。
  ポインタは右へ1ピクセルずつ移動して、画面端までくると1段下がってまた左端からになります。
  また最初のfor文の時にグラフィックポインタは座標(0,0)の左上に設定されます。
  詳しい使用法は下部の座標指定時と省略時のサンプルをご覧下さい。

 [例]
  参照:pixc



  PIXC  PIXR  PIXG  PIXB


 [機能] ビットマップ配列の指定座標からcolorコードデータを読み出します。

 [書式] PIXC([x,y])

 [説明]
  colorコードそのものの取得と、赤緑青の単独取得の関数があります。
  PIXC() colorコードを取得します
  PIXR() colorコードの赤要素を取得します(0~255)
  PIXG() colorコードの緑要素を取得します(0~255)
  PIXB() colorコードの青要素を取得します(0~255)

  座標を省略できます。(速度が上がります)
  省略した時はグラフィックポインタの位置の読み込みになります。

 [例] ビットマップ配列サンプル
    '座標指定時
     100 cls 3:gload"sample.png"
    110xx=size(0)-1:yy=size(1)-1
     120 getbitmap
     130 for y=0 to yy
     140 for x=0 to xx
     150 p=pixg(x,y)
     160 pixel rgb(0,0,p),x,y
     170 next
     180 next
     190 setbitmap

 '[smp_bmp_ary.bas]
 '座標省略時(速度向上)
     100 cls 3:gload"sample.png"
     110 k=size(0)*size(1)-1
     120 getbitmap
     130 for i=0 to k
     140 pixel rgb(0,0,pixg())
     150 next
     160 setbitmap

 解説
  緑の要素を取得して青のプレーンに描画するサンプルです。(画像"sample.png"を用意する必要があります)
  getbitmapで始まりsetbitmapで終わります。
  for~nextのループ内で加工処理しています。
  省略時サンプルでは座標の指定がなくpixel命令の時に自動的にポインタが移動しています。
  最初のfor文でポインタは(0,0)に設定されます。
  省略時のループ回数は画面の面積分[size(0)*size(1)]になります。
  途中変数を経由させない方が速度は上がります。
  結果は青系の画像が表示されます。