2013年10月13日日曜日

Nexus 7 で無料の高機能なBASICアプリでプログラムを作ってみた

  Nexus 7 に BASIC! という無料のプログラミング・アプリをインストールしたまま、しばらくはサンプル・プログラムを動かしてみるだけでしたが、 最近初めて自分のプログラムを作ってみました。
パソコンを黎明期から使っている私には、やはり手軽に使える BASICが懐かしいです。

  このBASICはプログラムに行番号が不要でラベルを使えるので、読みやすいプログラムが書けます。
  ユーザーが独自の関数を作り、それを式の中で使ったり、値の返らない(要らない)サブルーチンとして呼び出したりできます。
  いろんな命令が盛りだくさんで、加速度センサーなど、マシン(端末)に備わっている多くの機能を扱える高機能な BASIC です。
  実行速度も速いです。
  コメントや文字列に日本語を使うこともできます。

  このBASIC に関するホームページには、いろいろな名前が出てきて、私の頭がこんがらがりそうになったのでここで整理しておきます。

  •   正式な名前は「RFO BASIC! for Android」です。
  •   Google Play でのアプリ名は「 BASIC! 」だけです。
  •   マニュアルの名前は「 De_Re_BASIC! 」です。この言葉は「 BASIC! について」というような意味です。

  アプリ作者によるサイトは http://laughton.com/basic/ です。簡単なヘルプはアプリに入っていますが、詳しいマニュアルはここからダウンロードできます。ただし、全て英語です。といっても簡単な英語ですので、プログラミングに慣れた人なら比較的すらすらと読めると思います。
  iPhone や iPad などの iOS 端末用に、よく似た名前の(大文字と小文字が違う)「 Basic! 」というBASICアプリが APP Store にありますが、これと BASIC! とは全く別のものですので、間違わないでください。

  この BASIC のサンプル・プログラムのリストを眺めたとき、例えば「 Gr.circle 」という風に命令の途中に「.」が入っていたりして、オブジェクト指向のプログラミングをしなければいけないと誤解させるような面構えだったので、敬遠していたのですが、実は全然オブジェクト指向ではありませんでした。単に命令を分類する手段に「.」を使っている感じです。

  さて、私の作ったプログラムと実行結果の画像を下に載せておきます。
いろいろな大きさと色の正方形を画面いっぱいにたくさん描くプログラムです。

  このプログラムと似たようなプログラムで円をたくさん描いて、できた画像を私の Nexus 7 のホーム画面の壁紙として使っています。世界にたった一つの、自作の壁紙です。
このようなプログラムは、乱数のさじ加減を替えると、特定の傾向の色や、大きさの幅を持たせることができ、同種の図形による様々な模様を作り出すことができます。

  このBASICを使えば、グラフィックスに限らず、ちょっとした自分だけが使うユニークで便利なプログラムを作成することができます。しかも一つ一つのプログラムにアイコンを付けてホーム画面に配置するためのウィジェットが用意されているので、自分の作ったプログラムを他のアプリと同じような感覚で使うことができます。

-----------------------------------------------
Gr.open 255,0,0,0  % 背景は透明度なしで黒
Gr.orientation 0   % Force Landscape
Gr.screen w, h
dummy = randomize(0)
maxx = w
maxy = h
maxd = 400
halfd = maxd / 2

for i=1 to 500
  a = rnd()*128+127
  r = rnd()*235+20
  g = rnd()*235+20
  b = rnd()*235+20
  fill = 1
  Gr.color a,r,g,b,fill
determine:
  x1 = rnd()*maxx
  y1 = rnd()*maxy
  x2 = x1 + rnd()*maxd - halfd
  y2 = y1 + rnd()*maxd - halfd
  s = sqr((x2 - x1)^2 + (y2 - y1)^2)
  if s < 100 then goto determine
  Gr.set.stroke s
  Gr.line nl,x1,y1,x2,y2
  Gr.render
next i

do
until 0
-----------------------------------------------