第6回

    • 論理計算…プログラムを考える
      −BASIC言語を使う−

    • ◎10進BASICの使い方

       ↓このページからプログラムをダウンロードする。

      「十進BASIC」のホームページ

      ◎自分のPCの種類、OSのバージョンに合うものを選択する。

       *アップル製のコンピュータなら、MAC(intel)を選択する。

       *ダウンロードしてできるアイコンには「BASIC」と表示される。

      ◎フォルダの中身を確認する。

       Applications の BASICJa フォルダを見る。

      例 FRACTAL のフォルダを見る。

       → JULIA.BAS を選択し、下の OPEN ボタンを押す。

      *これでプログラムが読み込まれた。

       ウィンドウの▲(実行)ボタンを押すとプログラムが走る。

      ◎プログラムを終了するときは上部のアップルマークとなりにある「BASIC」を押し、「Quit basic」を選択する。

      ◎プログラム例をコピー&ペーストできる。

      平尾塾のホームページ

       ↑こちらの「受講生連絡ボード」にあるプログラム例をコピーして貼り付ける。

      
      
      ◎これから扱う数字・アルファベットはすべて「半角」です。
      
      ◎自分で書いたプログラムを保存したい時は、プログラムのウィンドウを出して(クリックして)
      から「ファイル→名前を付けて保存→アルファベットの名前(保存場所を確認)」を入力して保存する。
      
      *一時的に保存するなら「デスクトップ」が便利。
      
      
      ◎座標系の設定
      
      SET WINDOW文は,描画領域に座標系を導入する。
      
      SET WINDOW 左端 , 右端 , 下端 , 上端
      
       BASICでは,描画領域の形状は原則として正方形。
      
       サンプルとして左端 x座標が 0,右端 x座標が 500,下端 y座標が 0,上端 y座標が 500となる座標系を作ってみる。
      
      SET WINDOW 0,500,0,500
      
      END
      
      
      ◎線を引く
      
      PLOT LINES文は,指定された点を,順次,線分で結んでいく。
      
      PLOT LINES: x1,y1 ;x2,y2
      
      座標(x1,y1)から(x2,y2)までを線で結ぶ。セミコロン;でつなげば、線を延長できる。
      
       サンプルとして(50,250)と(450,250)を線で結んでみる。
      
      SET WINDOW 0,500,0,500
      
      PLOT LINES:50 ,250 ;450,250
      
      END
      
      
      ◎多角形を描く
      
      多角形は線を結んで描く。
      
      *三角形のサンプル
      
      
      SET WINDOW 0,500,0,500
      
      PLOT LINES:250,450;50 ,250 ;450,250; 250,450
      
      END
      
      *直線の座標に加えて、頂点の座標(250,450)を入れたので三角形になる。
      *一筆書きになるので、最後に始点の座標を書くことを忘れないで。
      
      
      *四角形のサンプル
      
      SET WINDOW 0,500,0,500
      
      PLOT LINES:50,450;50 ,250 ;450,250; 450,450;50,450
      
      END
      
      *一筆書きになるので、最後に始点の座標を書くことを忘れないで。
      
      
      ◎円を描く
      
      DRAW circle WITH SCALE(r)*SHIFT(x,y)
      
      rは円の半径。x,yは中心の位置を示す座標
      
      *円のサンプル
      
      *(250,250)を中心に半径50の円を描いてみる。
      
      SET WINDOW 0,500,0,500
      
      DRAW circle WITH SCALE(50)*SHIFT(250,250)
      
      END
      
      
      ◎塗りつぶし円を描く
      
      DRAW disk WITH SCALE(r)*SHIFT(x,y)
      
      circle が disk に変わっている。座標と半径は同じ。
      
      *(250,250)を中心に半径50の塗りつぶし円を描いてみる。
      
      SET WINDOW 0,500,0,500
      
      DRAW disk WITH SCALE(50)*SHIFT(250,250)
      
      END
      
      
      ◎線の太さを変える
      
      SET LINE WIDTH 数値
      
      *線の太さを標準の太さに対する倍数で指定する。
      
      *線の太さのサンプル。下から標準、2倍、5倍、10倍の太さ。
      
      SET WINDOW 0,500,0,500
      
      PLOT LINES:50 ,250 ;450,250
      
      SET LINE WIDTH 2
      PLOT LINES:50 ,300 ;450,300
      
      SET LINE WIDTH 5
      PLOT LINES:50 ,350 ;450,350
      
      SET LINE WIDTH 10
      PLOT LINES:50 ,400 ;450,400
      
      END
      
      
      ◎線の色を変える
      
      SET LINE COLOR 数値
      
       実行開始時のline colorは1。
      
      本BASICでは,色指標は0から255までが利用でき,あらかじめ次のように割り当てられている。
       0白, 1黒, 2青, 3緑, 4赤, 5水色, 6黄色, 7赤紫,8 灰色,9 濃い青,10 濃い緑,
      11 青緑, 12 えび茶,13 オリーブ色,14 濃い紫,15 銀色,・・・
      
      *色指定のサンプル。下から色指標1、2、3、4を指定。
      
      SET WINDOW 0,500,0,500
      
      SET LINE COLOR 1
      PLOT LINES:50 ,250 ;450,250
      
      SET LINE COLOR 2
      PLOT LINES:50 ,300 ;450,300
      
      SET LINE COLOR 3
      PLOT LINES:50 ,350 ;450,350
      
      SET LINE COLOR 4
      PLOT LINES:50 ,400 ;450,400
      
      END
      
      
      ◎色指標を調べるプログラム
      
      *数値を入れると色が出ます。
      
      10 SET WINDOW 0,500,0,500
      
      INPUT PROMPT "色の数値は?":c
      
      SET LINE COLOR c
      
      SET LINE WIDTH 10
      
      PLOT LINES:50 ,250 ;450,250
      
      goto 10
      
      END
      
      *このプログラムを止める時は「中止」ボタンを押す。
      
      
      ◎全ての色を見るプログラム
      
      10 SET WINDOW 0,500,0,1300
      
      for c=0 to 255
      
      SET LINE COLOR c
      
      SET LINE WIDTH 5
      
      PLOT LINES:50 ,10+c*5 ;450,10+c*5
      
      next c
      
      END
      
      
      ◎これらを組み合わせる
      
      *塗りつぶしたい図形は PLOT LINES:座標 で描く。
      *塗りつぶし図形の色はSET AREA COLOR 数値 で指定する。
      *プログラムで指定した順に図形は上書きされることに注意。
      
      SET WINDOW 0,500,0,500
      
      SET LINE COLOR 3
      
      SET LINE WIDTH 3
      
      PLOT LINES:20 ,250 ;470,250
      
      SET LINE COLOR 5
      
      SET LINE WIDTH 5
      
      PLOT LINES:250,450;50 ,50 ;450,50; 250,450
      
      SET LINE COLOR 7
      
      SET LINE WIDTH 7
      
      PLOT LINES:50,350;50,150 ;450,150; 450,350;50,350
      
      SET LINE COLOR 9
      
      SET LINE WIDTH 9
      
      DRAW circle WITH SCALE(70)*SHIFT(150,150)
      
      SET AREA COLOR 11
      
      DRAW disk WITH SCALE(50)*SHIFT(300,350)
      
      END
      
      
      ◎背景の色を変える
      
      *背景をウィンドウと同じ大きさの四角形で塗りつぶす。
      
       PLOT AREA:0,0;500,0;500,500;0,500;0,0
      
      *塗りつぶし図形の色はSET AREA COLOR 数値 で指定する。
      
      
      ◎文字を描く
      
      PLOT TEXT ,AT x,y : 文字列式
           x,y は座標。点(x,y)を基点として文字列を描く。
        文字列式とは、""で文字を囲ったもの。
      
      *サンプル
      
      10 SET WINDOW 0,500,0,500
      
      PLOT TEXT ,AT 250,250 : "文字列"
      
      END
      
      
      ◎文字の色
      
      SET TEXT COLOR 数値式
      
       数値は色指標のこと。
      
      *サンプル
      
      10 SET WINDOW 0,500,0,500
      
      SET TEXT COLOR 4
      
      PLOT TEXT ,AT 250,250 : "文字列"
      
      END
      
      
      ◎文字の角度
      
      OPTION ANGLE DEGREES 角度を〜°で表現する。
      
      SET TEXT ANGLE 数値式
      
       数値は〜°で指定する。
      
      *サンプル
      
      10 SET WINDOW 0,500,0,500
      
      OPTION ANGLE DEGREES
      
      SET TEXT COLOR 4
      
      SET TEXT ANGLE 90
      
      PLOT TEXT ,AT 250,250 : "文字列"
      
      END
      
      
      ◎フォントの指定
      
      SET TEXT FONT FontName$ ,size
      
        文字列を描くときに用いるフォントとそのサイズ(ポイント数)を指定する。
      
        FontName$が空文字列,あるいは存在しないフォント名であると,文字の大きさのみを変更する。
      
      *サンプル
      
      10 SET WINDOW 0,500,0,500
          
         SET TEXT COLOR 4
          
         SET TEXT FONT "MS 明朝",40
          
         PLOT TEXT ,AT 150,150 : "文字列"
          
         SET TEXT COLOR 3
          
         SET TEXT FONT "MS ゴシック",40
          
         PLOT TEXT ,AT 250,250 : "文字列"
          
         END
      
      
      ◎文字の高さ
      
      SET TEXT HEIGHT 数値式
      
        文字の高さを指定する。高さはドット数。縦横ともサイズが変わる。
      
      *サンプル
      
      10 SET WINDOW 0,500,0,500
          
         SET TEXT COLOR 4
          
         SET TEXT HEIGHT 100
          
         PLOT TEXT ,AT 50,150 : "文字列"
          
         END
      
      
      ◎文字のコマンド・組み合わせの例
      
      *マック用サンプルは平尾塾の受講生連絡ボードを参照。
      
       ↓
      
      https://hiraosemi.simdif.com/
      
      
      10 SET WINDOW 0,500,0,500
          
         OPTION ANGLE DEGREES
          
         SET TEXT COLOR 5
          
         SET TEXT ANGLE 70
          
         SET TEXT FONT "MS 明朝",40
          
         PLOT TEXT ,AT 50,200 : "川"
         PLOT TEXT ,AT 150,150 : "川"
         PLOT TEXT ,AT 250,100 : "川"
         PLOT TEXT ,AT 350,80 : "川"
         PLOT TEXT ,AT 450,50 : "川"
          
         SET TEXT COLOR 2
          
         SET TEXT ANGLE 0
          
         SET TEXT FONT "MS 明朝",20
          
         PLOT TEXT ,AT 50,350 : "雨"
         PLOT TEXT ,AT 80,250 : "雨"
         PLOT TEXT ,AT 250,450 : "雨"
         PLOT TEXT ,AT 450,150 : "雨"
          
         SET TEXT COLOR 255
          
         SET TEXT ANGLE 300
          
         SET TEXT FONT "MS 明朝",150
          
         PLOT TEXT ,AT 200,350 : "風"
          
         END
          
      
      ◎画面にマス目を描く
      
      DRAW GRID(p,q)
      
            x軸方向 間隔p,y軸方向 間隔qの格子を描く。
      
      *サンプル
      
      SET WINDOW 0,500,0,500
      
      PLOT LINES:250,450;50 ,250 ;450,250; 250,450
      
      DRAW GRID(10,10)
      
      END
      
      
      ◎RGBで色を指定する
      
      SET COLOR MIX(色指標)  数値式,数値式,数値式
      
        色指標に対応する色を変える。色指標は数値式で与える。
        3つ並んだ数値式は,赤,緑,青の順に強度を0〜1の数値で指定する。
      
      *サンプル
      *色指標 4 を紫に変える。
      
      10 SET WINDOW 0,500,0,500
          
        SET COLOR MIX(4)0.5,0.1,1
      
         SET TEXT COLOR 4
          
         SET TEXT HEIGHT 100
          
         PLOT TEXT ,AT 50,150 : "文字色"
          
         END
      
      
      
      ◎境界を波型にする
      
      *行番号10と20の間でプログラムを繰り返す。これをFOR〜NEXT構文と呼ぶ。
      
      *このサンプルではdが0から360になるまで、360回処理を繰り返す。
       何も指定しなければdは1ずつ増える。
      
      *太い線でサインカーブを4周期描いている。
      
      *360回が終わると次の行に進む。
      
      
      
      SET WINDOW 0 , 360 , 0 , 360
      
      OPTION ANGLE DEGREES
       
      SET AREA COLOR 5
      
      plot AREA:0,0;360,0;360,360;0,360
      
      SET COLOR 4
      
      DRAW disk WITH SCALE(50)*SHIFT(180,180)
       
      10 FOR d=0 TO 360
       
         SET LINE COLOR 2
          
         SET LINE WIDTH 40
          
         LET y1=SIN(d*4)*10
          
         LET y12=SIN(d*4+1)*10
          
         PLOT LINES: d, 180+y1;d+1,180+y12
          
         SET AREA COLOR 2
          
         plot AREA:0,0;360,0;360,180;0,180
          
      20 next d
       
      END
      
      
      
      ◎グラデーションその1
      
      *行番号10と20の間でプログラムを繰り返す。これをFOR〜NEXT構文と呼ぶ。
      
      *このサンプルではdが250から0になるまで、250回処理を繰り返す。
       step -1の指定でdは1ずつ減る。
      
      *250回が終わると次の行に進む。
      
      *4の色がRGBで0,0,1(青)から0,0,0(黒)まで変化する。
      
      *250本のライン(太さ3)を上から下端まで塗り重ねている。
      
      
      
      SET WINDOW 0 , 500 , 0 , 500
      
      SET AREA COLOR 5
      
      plot AREA:0,0;500,0;500,500;0,500
      
      
      10 FOR d=250 TO 0 STEP -1
      
         SET COLOR MIX(4)0,0,d/250
          
         SET LINE COLOR 4
          
         SET LINE WIDTH 3
          
         PLOT LINES: 0,d;500,d
          
          
      20 next d
       
      END
      
      
      
      ◎グラデーションその2
      
      *行番号10と40の間でプログラムを繰り返す。これをFOR〜NEXT構文と呼ぶ。
      
      *このサンプルではdが500から0になるまで、500回処理を繰り返す。
       step -1の指定でdは1ずつ減る。
      
      *500回が終わると次の行に進む。
      
      *4の色がRGBで1,1,1(白)から0,0,1(青)まで変化する。
      
      *500本のライン(太さ5)を上端から下端まで塗り重ねている。
      
      
      SET WINDOW 0 , 500 , 0 , 500
      
      10 FOR d=500 TO 0 STEP -1
      
         SET COLOR MIX(4)d/500,d/500,1
          
         SET LINE COLOR 4
          
         SET LINE WIDTH 5
          
         PLOT LINES: 0,d;500,d
          
          
      20 next d
       
      END
      
      
      
      ◎色の塗り方
      
      SET AREA STYLE 文字列式
      
       PLOT AREA文の塗りつぶし方を指定する。
      
       文字列式の値は,"HOLLOW", "SOLID", "HATCH" のいずれか。
       ("SOLID"は通常の塗りつぶし。"HOLLOW"は内部を塗らない。つまり線画と同じ。)
       この命令を特に使うのは次のハッチの場合。
      
      SET AREA STYLE "HATCH"
      
       線で塗りつぶす。(ハッチング)
      
      
      ◎ハッチングの種類
      
      SET AREA STYLE INDEX 数値
      
       area styleに"HATCH"が指定されたときのハッチの描き方を指定する。
      
       1: 横線 2:縦線 3:斜線(135°) 4:斜線(45°) 5:縦横 6:斜めクロス
      
      
      *サンプル
      *本来、塗りつぶしは不透明だが、背景を黒にすると、視覚効果で混色を表現できる。
      
      SET WINDOW 0,500,0,500
      
      SET area COLOR 1
      
      PLOT AREA:0,0;500,0;500,500;0,500;0,0
      
      SET AREA STYLE "HATCH"
      
      SET LINE COLOR 0
      
      SET LINE WIDTH 20
      
      PLOT LINES:20 ,250 ;470,250
      
      SET AREA STYLE INDEX 4
      
      SET area COLOR 5
      
      PLOT area:250,450;50 ,50 ;450,50; 250,450
      
      SET AREA STYLE INDEX 3
      
      SET AREA COLOR 7
      
      PLOT area:50,350;50,150 ;450,150; 450,350;50,350
      
      SET AREA STYLE INDEX 5
      
      SET area COLOR 2
      
      DRAW disk WITH SCALE(70)*SHIFT(150,150)
      
      SET AREA STYLE INDEX 6
      
      SET AREA COLOR 27
      
      DRAW disk WITH SCALE(50)*SHIFT(300,350)
      
      SET TEXT COLOR 255
      
      SET TEXT FONT "MS 明朝",50
       
      PLOT TEXT ,AT 50,400 : "静"
      
      PLOT TEXT ,AT 380,400 : "動"
      
      END
      
      
      *サンプル(RGB)
      *青・緑・赤の混色
      
      
      SET WINDOW 0,500,0,500
      
      SET area COLOR 1
      
      PLOT AREA:0,0;500,0;500,500;0,500;0,0
      
      SET AREA STYLE "HATCH"
      
      SET AREA STYLE INDEX 3
      
      SET area COLOR 4
      
      DRAW disk WITH SCALE(100)*SHIFT(300,200)
      
      SET AREA STYLE INDEX 4
      
      SET area COLOR 3
      
      DRAW disk WITH SCALE(100)*SHIFT(200,200)
      
      SET AREA STYLE INDEX 2
      
      SET AREA COLOR 2
      
      DRAW disk WITH SCALE(100)*SHIFT(250,300)
      
      END
      
      
      
      
      
      
      ◎図形を動かす
      
      *図形を動かすには、座標に数を加減することで描画位置を変える。
      
      *行番号10と40の間でプログラムを繰り返す。これをFOR〜NEXT構文と呼ぶ。
      
      *このサンプルではnが1から50になるまで、50回処理を繰り返す。
       何も指定しなければnは1ずつ増える。
      
      *50回が終わると50行のgoto命令で10行に戻る。
      
      *nは二つの円を描く座標を増減させている。
      
      *アニメーションに見えるように、20行に画面を消す clear命令が入っている。
      
      *30行の WAIT DELAY 0.4 は「0.4秒プログラムを止める」という命令である。
       これがないと画面がチラチラしてしまう。
      
      *このプログラムを止めるには、一時停止ボタンを押すと開くウィンドウの「中止」
       ボタンを押す。
      
      
      SET WINDOW 0,500,0,500
       
      10 FOR n=1 TO 50
          
      20      clear
             
            SET LINE COLOR 3
             
            SET LINE WIDTH 3
             
            PLOT LINES:20 ,250 ;470,250
             
            SET LINE COLOR 5
             
            SET LINE WIDTH 5
             
            PLOT LINES:250,450;50 ,50 ;450,50; 250,450
             
            SET LINE COLOR 7
             
            SET LINE WIDTH 7
             
            PLOT LINES:50,350;50,150 ;450,150; 450,350;50,350
             
            SET LINE COLOR 9
             
            SET LINE WIDTH 9
             
            DRAW circle WITH SCALE(70)*SHIFT(150+n,150+n)
             
            SET AREA COLOR 11
             
            DRAW disk WITH SCALE(50)*SHIFT(300-n,350-n)
             
      30      WAIT DELAY 0.4
             
      40   NEXT n
          
      50   GOTO 10
          
      END
      
      
      
      ◎波を動かす
      
      *前に描いた波型の境界を運動させる。
      
      
      SET WINDOW 0 , 360 , 0 , 360
      
      OPTION ANGLE DEGREES
      
      10 FOR a=360 TO 0 STEP -30
          
            SET AREA COLOR 5
             
            plot AREA:0,0;360,0;360,360;0,360
             
            SET COLOR 4
             
            DRAW disk WITH SCALE(50)*SHIFT(180,180)
             
             
            FOR d=0 TO 720
             
               SET LINE COLOR 2
                
               SET LINE WIDTH 40
                
               LET y1=SIN(d*4+a)*10
                
               LET y12=SIN(d*4+a+1)*10
                
               PLOT LINES: d, 180+y1;d+1,180+y12
                
               SET AREA COLOR 2
                
               plot AREA:0,0;360,0;360,180;0,180
                
            next d
             
            WAIT DELAY 0.006
             
            clear
             
         NEXT a
          
         GOTO 10
          
      END
      
      
      
      ◎衛星軌道のシミュレーション
      
      *三角関数を使って斜めの楕円軌道を表現する。
      
      
      10 SET WINDOW -3,3,-3,3
          
      20 OPTION ANGLE DEGREES
          
      30 FOR t=0 TO 360 STEP 8
          
      40    clear
             
      50    LET x=SIN (t)
             
      60    LET y=SIN(t)/3+COS (t)/3
             
      80    SET COLOR 1
             
            DRAW disk WITH SCALE(0.1)*SHIFT(x,y)
             
      85    DRAW circle WITH SCALE(0.5)*SHIFT(0,0)
             
      90    SET COLOR 0
             
             
      100    IF y<0 THEN DRAW disk WITH SCALE(0.49)*SHIFT(0,0)
              
      110    WAIT DELAY 1
              
              
      120 NEXT t
           
      130 GOTO 10
           
       END
      
      
      
      ◎らせんを描く
      
      *上下左右2000ドットの画面に直径8ドットの円盤を移動させて螺旋を描いている。
      
      10 SET WINDOW  -1000,1000,1000,-1000
      30 OPTION ANGLE DEGREES
      40 FOR t=1 TO 1800 STEP 10/(t*1200+10)
      50    LET  x=SIN (t)*t/2
      60    LET  y=COS (t)*t/2
      80    DRAW disk WITH SCALE(8)*SHIFT(x,y)
      90    WAIT DELAY 0.01
      110 NEXT t
      500 END
        
      
      
      【背景画像の読み込み】
      
      *まず背景画像を用意する。縦横比に注意。正方形ならプログラムと合う。
      
      *正方形でない画像の場合はスクリーンの比率を変えるか、スクリーン上で短辺が
       圧縮されることを考慮してプログラムを書く。
      
      *次の二枚の画像をダウンロードする。(自作プログラムと同じフォルダに入れる。)
      
      

      
      ◎読み込んだ画像の上に文字を書く
      
      *最初の行の GLOAD "画像ファイル名" が読み込みの命令である。
      
      *画像ファイル名を間違えないように。
      
      *縦横比が1:1でないことに注意。
      
      
      GLOAD "spiral.jpg"
      
      SET WINDOW 0,500,0,500
      
      SET TEXT COLOR 255
      
      SET TEXT FONT "クレー",50
      
      PLOT TEXT ,AT 50,300 : "静"
      
      PLOT TEXT ,AT 410,300 : "動"
      
      END
      
      
      ◎読み込んだ画像の上に文字と図形を書く
      
      *画像ファイル名を間違えないように。
      
      *プログラムで作った背景画像を張り込むと、プログラム実行速度が速くなる。
      
      *フォントによっては、円の中に文字が入らないことがある。
      
      
      GLOAD "blue.jpg"
      
      SET WINDOW 0,500,0,500
      
      SET line COLOR 3
      
      SET LINE width 10
      
      PLOT LINES:250,360;150 ,200 ;350,200; 250,360
      
      PLOT LINES:150,300;250 ,140 ;350,300; 150,300
      
      SET TEXT COLOR 255
      
      SET LINE COLOR 4
      
      SET LINE width 5
      
      SET TEXT COLOR 255
      
      SET TEXT FONT "クレー",50
      
      DRAW circle WITH SCALE(50)*SHIFT(75,350)
      
      PLOT TEXT ,AT 50,300 : "静"
      
      DRAW circle WITH SCALE(50)*SHIFT(425,350)
      
      PLOT TEXT ,AT 400,300 : "動"
      
      DRAW circle WITH SCALE(50)*SHIFT(75,150)
      
      PLOT TEXT ,AT 50,100 : "寂"
      
      DRAW circle WITH SCALE(50)*SHIFT(425,150)
      
      PLOT TEXT ,AT 400,100 : "滅"
      
      DRAW circle WITH SCALE(50)*SHIFT(250,425)
      
      PLOT TEXT ,AT 225,375 : "空"
      
      DRAW circle WITH SCALE(50)*SHIFT(250,75)
      
      PLOT TEXT ,AT 225,25 : "漠"
      
      END
      
      
      
      ◎外部絵定義を使う
      
      *プログラムの END の後ろに図形のプログラムを書く。
      
      *プログラムの中で図形を簡単に呼び出すことができる。
      
      * 最初に DECLARE EXTERNAL PICTURE 図形プログラムの名前 を宣言する。
        ここでは star と名づける。
      
      *END の後、100〜150行が「外部絵定義」である。
      
      * EXTERNAL PICTURE star と END PICTURE の間に図形プログラムを書く。
      
      *図形を呼び出したい時は   DRAW star WITH ROTATE(k)*SCALE(1)*SHIFT(250,250)
       のように命令する。その意味は次の通り。
      
      * DRAW @star WITH AROTATE(k)*BSCALE(1)*CSHIFT(250,250)
      
      @定義した外部絵の名前。ここでは star 
      
      A図形は自由に回転させることができる。角度をkに入れる。
      
      B拡大・縮小ができる。1は1倍(等倍)のこと。
      
      C描く図形の中心となる座標。
      
      
      *外部絵の図形を狙い通りの場所に表示させるには、図形の中心座標を(0,0)に
       しなければならない。スクリーンの左下隅が(0,0)である。
      
      
      
      DECLARE EXTERNAL PICTURE star
      
      OPTION ANGLE DEGREES
      
      FOR k=0 TO 360 STEP 10
      
         CLEAR
          
         GLOAD "blue.jpg"
      
         SET WINDOW 0,500,0,500
      
         DRAW star WITH ROTATE(k)*SCALE(1)*SHIFT(250,250)
          
         SET TEXT COLOR 255
          
         SET LINE COLOR 4
          
         SET LINE width 5
          
         SET TEXT COLOR 255
          
         SET TEXT FONT "クレー",50
          
         DRAW circle WITH SCALE(50)*SHIFT(75,350)
          
         PLOT TEXT ,AT 50,300 : "静"
          
         DRAW circle WITH SCALE(50)*SHIFT(425,350)
          
         PLOT TEXT ,AT 400,300 : "動"
          
         DRAW circle WITH SCALE(50)*SHIFT(75,150)
          
         PLOT TEXT ,AT 50,100 : "寂"
          
         DRAW circle WITH SCALE(50)*SHIFT(425,150)
          
         PLOT TEXT ,AT 400,100 : "滅"
          
         DRAW circle WITH SCALE(50)*SHIFT(250,425)
          
         PLOT TEXT ,AT 225,375 : "空"
          
         DRAW circle WITH SCALE(50)*SHIFT(250,75)
          
         PLOT TEXT ,AT 225,25 : "漠"
          
         WAIT DELAY 1
          
      NEXT k
      
      END
      
      100 EXTERNAL PICTURE star
        
          SET line COLOR 3
           
          SET LINE width 10
           
          PLOT LINES:0,105;-100 ,-55 ;100,-55; 0,105
           
          PLOT LINES:-100,55;0 ,-105 ;100,55; -100,55
           
      150 END PICTURE
        
      
      
      ◎ランダム関数を使う
      
      *サイコロのプログラム
      
      *10行はランダム関数をリフレッシュする命令
      
      *20行のR N Dは0以上1未満の数を発生させる関数。6をかけると0以上6未満の
       数になる(0から5.999999…)。
      
      *I N T(小数)は、小数の整数部を取り出す関数。5.999999…なら「5」になる。
       20行ではサイコロにするために1を足している。これでnは1から6のどれかになる。
      
      *30行のSTR$(n)は「数値のnを文字のnにする」関数。フォントや色や大きさを変える
       ためには、数字を文字として扱わなければならない。ここではn$が文字の変数。
       let n$=STR$(n)で「数値のnが文字のnに変換される。」
      
      
      
      SET WINDOW 0,500,0,500
      
      10 RANDOMIZE
      
      20 LET n=1+INT(6*RND)
      
      30 let n$=STR$(n)
      
      SET TEXT COLOR 4
      
      SET TEXT FONT "Times New Roman",80
      
      PLOT TEXT ,AT 250,200 :n$
      
      END
      
      
      ◎ランダム関数と外部絵定義を組み合わせる。
      
      *定義した絵(ボール)をランダムに配置するプログラム。
      
      *20行以下で6個のボールのx座標をランダムに決める。
      
      *30行以下で6個のボールのy座標をランダムに決める。
      
      *40行で背景を読み込む。
      
      *50行以下で外部絵定義したボールを様々な大きさで表示。
      
      *100行以下が外部絵定義。グラデーションの応用。
      
      
      DECLARE EXTERNAL PICTURE ball
      
      OPTION ANGLE DEGREES
      
      10 RANDOMIZE
          
      20   LET m1=1+INT(550*RND)
          
         LET m2=1+INT(500*RND)
          
         LET m3=1+INT(450*RND)
          
         LET m4=1+INT(350*RND)
          
         LET m5=1+INT(250*RND)
          
         LET m6=1+INT(100*RND)
          
          
        30 LET n1=1+INT(150*RND)
          
         LET n2=1+INT(350*RND)
          
         LET n3=1+INT(450*RND)
          
         LET n4=1+INT(650*RND)
          
         LET n5=1+INT(500*RND)
          
         LET n6=1+INT(550*RND)
          
          
      40   GLOAD "blue.bmp"
          
         SET WINDOW 0,500,0,500
          
          
      50   DRAW ball WITH ROTATE(0)*SCALE(1)*SHIFT(m1,n1)
          
         DRAW ball WITH ROTATE(0)*SCALE(0.5)*SHIFT(m2,n2)
          
         DRAW ball WITH ROTATE(0)*SCALE(1.5)*SHIFT(m3,n3)
          
         DRAW ball WITH ROTATE(0)*SCALE(0.8)*SHIFT(m4,n4)
          
         DRAW ball WITH ROTATE(0)*SCALE(1)*SHIFT(m5,n5)
          
         DRAW ball WITH ROTATE(0)*SCALE(1.2)*SHIFT(m6,n6)
          
      END
      
      100 EXTERNAL PICTURE ball
        
          FOR d=1 TO 30 STEP 1
           
             SET COLOR MIX(4)1,d/30,d/30
              
             SET LINE COLOR 4
              
             SET LINE WIDTH 10
              
             DRAW circle WITH SCALE(30-d)*SHIFT(d/2,d/2)
              
          NEXT d
           
      150 END PICTURE
      
      
      
      ◎多数のボールをランダムに配置する
      
      *10行目の100を変えれば任意の個数のボールを配置できる。
      
      
      GLOAD "blue.bmp"
      
      SET WINDOW 0,500,0,500
      
      DECLARE EXTERNAL PICTURE ball
      
      OPTION ANGLE DEGREES
      
      10  FOR t=1 TO 100
      
         RANDOMIZE
          
         LET m1=1+INT(500*RND)
          
         LET n1=1+INT(500*RND)
          
         LET s1=0.1+(0.8*RND)
          
         DRAW ball WITH ROTATE(0)*SCALE(s1)*SHIFT(m1,n1)
          
      NEXT t
      
      END
      
      100 EXTERNAL PICTURE ball
        
          FOR d=1 TO 30 STEP 1
           
             SET COLOR MIX(4)1,d/30,d/30
              
             SET LINE COLOR 4
              
             SET LINE WIDTH 10
              
             DRAW circle WITH SCALE(30-d)*SHIFT(d/2,d/2)
              
          NEXT d
           
      150 END PICTURE
        
      
      
      
      ◎キャラクターの一覧
      
      *chr$(128010)からchr$(129000)までのキャラクターを描く。
      
      *下から上に10個ずつ10行で示す。左下の最初の記号がchr$(129010)番である。
      
       SET WINDOW 0,500,0,500
          
         SET TEXT FONT "MS 明朝",40
      
         FOR m=1 TO 10
      
            FOR n=1 TO 10
             
               PLOT TEXT ,AT 10+40*n,10+40*m :chr$(128000+10*m+n)
                
            NEXT n
             
         next m
          
      END
      
      
      
      ◎文字以外のキャラクターを外部絵定義で利用する。
      
      *140行で魚のキャラクターを指定する。
      
      
      DECLARE EXTERNAL PICTURE kingyo
      
      OPTION ANGLE DEGREES
      
      10 RANDOMIZE
          
         LET m1=1+INT(550*RND)
          
         LET m2=1+INT(600*RND)
          
         LET m3=1+INT(650*RND)
          
         LET m4=1+INT(750*RND)
          
         LET m5=1+INT(850*RND)
          
         LET m6=1+INT(500*RND)
          
         RANDOmize
          
         LET n1=1+INT(150*RND)
          
         LET n2=1+INT(350*RND)
          
         LET n3=1+INT(450*RND)
          
         LET n4=1+INT(250*RND)
          
         LET n5=1+INT(500*RND)
          
         LET n6=1+INT(50*RND)
          
         FOR k=0 TO 500 STEP 10
          
            CLEAR
             
            GLOAD "blue.bmp"
             
            SET WINDOW 0,500,0,500
             
             
            DRAW kingyo WITH ROTATE(0)*SCALE(1)*SHIFT(m1-k,n1)
            IF (m1-k)<-50 THEN LET m1=INT(550+k)
             
            DRAW kingyo WITH ROTATE(0)*SCALE(0.5)*SHIFT(m2-k,n2)
            IF (m2-k)<-50 then LET m2=INT(550+k)
             
            DRAW kingyo WITH ROTATE(0)*SCALE(1.5)*SHIFT(m3-k,n3)
            IF (m3-k)<-50 then LET m3=INT(550+k)
             
            DRAW kingyo WITH ROTATE(0)*SCALE(0.8)*SHIFT(m4-k,n4)
            IF (m4-k)<-50 then LET m4=INT(550+k)
             
            DRAW kingyo WITH ROTATE(0)*SCALE(1)*SHIFT(m5-k,n5)
            IF (m5-k)<-50 then LET m5=INT(550+k)
             
            DRAW kingyo WITH ROTATE(0)*SCALE(1.2)*SHIFT(m6-k,n6)
            IF (m6-k)<-50 then LET m6=INT(550+k)
             
            WAIT DELAY 1
             
         NEXT k
          
         goto 10
          
      END
      
      100 EXTERNAL PICTURE kingyo
        
          SET TEXT COLOR 4
           
          SET TEXT FONT "クレー",50
           
      140    PLOT TEXT ,AT 0,0 : "??"
           
      150 END PICTURE
      
      
      
      
      

      人工知能論ホームページ