DSiや携帯でプログラミングしよう!

1.d-BASIC本体のページは
   DSi版(白黒)※これが元祖です。カラーのより早いです。
 http://www.wb.commufa.jp/yoccha/
dbs2.html
 です。

   DSi版(カラー)※パソコンの場合はこれを使ってください。
 http://www.wb.commufa.jp/yoccha/
dbs2c.html
 です。

   au携帯版(カラー)※他社携帯では未確認です。
 http://www.wb.commufa.jp/yoccha/
dbs2k.html
 です。
2.サンプルプログラム(共通)は
 http://www.wb.commufa.jp/yoccha/
dbst.html
 にあります。
DSi
3.ここはd-BASICの説明のページです。

 d-BASICとは

携帯端末(携帯電話やニンテンドーDSiなど)のブラウザー上で プログラムを作ったり動かしたりできるものです。

 d-BASICの目的

遊び(ほとんど)と学習(少し)がおもな目的です。
このような言語のことをTOY(トイ:おもちゃ)言語 と呼ぶようですが、まさにそれです。

 d-BASICの動作環境

インターネットのブラウザー(あまり古くないもの)ならば、 たいてい動作すると思います。
JAVASCRIPT(ジャバスクリプト)というもので作っていますので、 ブラウザーの設定でON(使用する)にして下さい。
COOKIE(クッキー)もON(使用する)にすると、書いたプログラム文を クッキーとして保存できます。
本来は、ニンテンドーDSiのDSiブラウザー上で遊ぶために作ったのですが、 最近の携帯電話でも遊べます。
もちろん、表示が小さすぎますがパソコンでもOKです。

<au携帯のPCサイトビューワーでの使用法>
d-BASIC本体は「au携帯版」を使ってください。
設定はPCモード、全画面表示OFF、画像表示OFF、広告表示OFF、 拡大縮小表示100%、JavaScriptON、CookieON、リフレッシュOFF、 ポインタOFF、起動時表示ページはPCサイトビューワーメニュー、 本体の機能/設定の画面表示の文字サイズの入力文字は小に設定、 テキスト入力画面のサブメニューのユーザー設定でショートカットキーで 「キゴウ」を設定
PCサイトビューワーでは、最後に表示したページをキャッシュ(保存)して いるので、メニューで「前回表示画面」を選べば通信料がかからずに何度でも 見ることができます。ただし、サイトに接続したときのクッキー保存場所と、キャッシュ (前回画面表示)でのクッキー保存場所は異なるようですので注意してください。
編集したら、こまめにSAVEすることをお勧めします。

 言語の仕様

亜流ですがBASIC言語と思って使ってください。
昔?のポケットコンピューター(SHARP製)のBASICを参考にしてつくりました。
本当はもっと忠実に真似たかったのですが、これが今の私には限界でした。
一行一行実行していくインタープリタ型といわれる方式です。
いろいろと制約がありますので、列記します。

 命令語の説明

以下において
「数」と書いてあるところは、数式、数値、数値用変数が使えます。
「文字」と書いてあるところは、文字、文字列、文字列用変数が使えます。

今後、命令を増やすかもしれません。

 CLS

液晶画面と文字出力部の表示をすべて消します。
カラー版ではCLS '色名' とすると全体をその色にします。
色名はblack,white,red,blue,green,yellowなどhtmlのスタイル指定で 使っている色名そのまま使います。カラー版デフォルトはwhiteです。
この色はプログラムRUN後も保持します。

 WAIT 数

その数x1/60秒程度、次の行へ移るのを待ちます。
(5以下の場合は5とみなします。)
端末によっては それ以上かかります(特にDSi)ので適当に調節してください。

 END

この行でプログラムを終了します。(READYモードにもどります。)

 RND 数

1〜指定した数までの乱数(ランダムな数)を返します。
例)A=RND 7 とするとAに1,2,3,4,5,6,7のいずれかの値が入ります。

 INKEY$

文字列用変数=INKEY$ の書式で使います。
(条件式内では使えません。)
この命令が実行されるまえの最終的に押されたキーボタンの値を 返します。
この時点でキーボタンが押された情報は消えます。

 PRINT 文字or数,文字or数,文字or数

「,」(コンマ)で区切ることで3つまで1度に出力します。
文字出力部に 出力されます。
(間には半角スペースが1つ挟まれて出力します。)
例)PRINT A,B 例)PRINT 'A=',A,'YEN'

 PSET(X,Y)

XとYには数式、数値、数値用変数が入ります。
液晶画面のXとYの座標のドットを黒く点灯します。

 PRESET(X,Y)

XとYには数式、数値、数値用変数が入ります。
液晶画面のXとYの座標のドットが点灯していれば消します。

 POINT(X,Y)

XとYには数式、数値、数値用変数が入ります。
数値用変数=POINT(X,Y) の書式で使います。
液晶画面のXとYの座標のドットが点灯していれば1,
液晶画面のXとYの座標のドットが消えていれば0の値を返します。

(XとYが液晶画面の範囲を外れた場合)
-50<=X<100 かつ -50<=Y<100には仮想のドットがあります。
仮想のドットが点灯していれば2を返します。それ以外は-1です。

LINE(X1,Y1)=(X2,Y2)条件

条件のところは#LD,#LC,#BD,#BCのいずれかを書きます。
液晶画面に長方形を描いたりする命令です。
X1,Y1とX2,Y2の座標を角とする長方形を描きます。
(条件により以下のようになります。)

例)LINE(B-3,C-5)=(B+1,C+4)#LD

 GCURSOR(X,Y)

XとYには数式、数値、数値用変数が入ります。
GPRINT命令の開始位置のドットを指定します。
(指定しない場合の初期値(デフォルト)はX=0,Y=3です。)

 GPRINT '16進数・・・'

液晶画面にドット絵を描くときに使います。
縦4つのドットのパターンを1組として 1組ごとに16進数(0123456789ABCDEF (A〜Fは、10進数で10〜15のこと))の1文字で 指定します。
16進数を幾つも並べるとドットパターンも並べて表示されます。
縦4つのドットの「重み」の値を上から1,2,4,8とするとき、点灯させるドットの所の 重み値の合計値を16進数でかきます。
(例えば、1と2と8を点灯なら1+2+8=11つまりB)
GCURSOR命令で指定する位置は最初のドットパターンの8の所に該当します。
この命令の前にドットが点灯していたとしても、ドットパターン内では無視されて 上書きされます。
例)GCRSUR(0,10)
  GPRINT '15D2AF'

 COLOR '色名'

カラー版のみ。PSET,LINE,GPRINTの前に指定すると、その色で描きます。
一度指定すると、再度指定するまでその色のままになります。
初期値(デフォルト)はblack(黒)です。
例)COLOR 'yellow'
  PSET(1,5)

 IF THEN〜ELSE〜ENDIF

複数行での命令です。書式は

IF 条件式 THEN
実行文1
ELSE
実行文2
ENDIF

条件式が真(正しい)ならば実行文1のみが実行され、偽(正しくない)ならば実行文2のみが 実行されます。
ELSE 実行文2は不要ならば省略できます。実行文は複数行でかまいません。
例)IF A>=5 THEN
  PRINT A
  ELSE
  PRINT 'A<5'
  ENDIF

 WHILE〜WEND

複数行でのループ命令です。書式は

WHILE 条件式
実行文
WEND

条件式が真ならば実行文が実行されWENDの行までくると、またWHILEの行に戻ります。
そこで再び条件式をチェックし...と繰り返します。
偽のときは実行文は行われずに WENDのつきの行へ移ります。
実行文は複数行でかまいません。
例)WHILE Z$='U'
  PRINT Z$
  WAIT 10
  Z$=INKEY$
  WEND

 FOR TO〜NEXT

複数行での命令です。書式は

FOR 数値用変数=初期値 TO 終了値
実行文
NEXT

初期値と終了値には数式、数値、数値用変数が入ります。
終了値は初期値より 大きい値として下さい。
初期値で実行文に移り、NEXTまでくるとFORのところに 戻って数値用変数に1を加えて実行文に移り...と繰り返します。
終了値までの回数だけ実行文を繰り返します。
実行文は複数行でかまいません。
使っている数値用変数は実行文の中で普通の数値用変数と同じように使えます。
例)FOR N=0 TO 9
  PSET(0,N)
  NEXT

IF文の中にIF文、WHILE文のなかにWHILE文、FOR-NEXT文の中にFOR-NEXT文など を入れ込むことができます。

 演算子の説明

(数値演算用)

+ 加 - 減 * 乗 / 除 { }括弧(この括弧を使ってください)
が使えます。
計算式全体の結果が整数でない場合は整数に四捨五入されます。

(文字列用)

+ 複数の文字列を連結します。

(比較演算子)

条件式(結果は真または偽)で使います。
A=B (AとBは等しい。文字列と文字列用変数でも使えます。)
A<B (AがBより小さい)
A>B (AがBより大きい)
A>=B(AはB以上)
A<=B(AはB以下)
A<>B(AとBは異なる)
 ※A,Bには数式、変数が入ります。
条件式1 AND 条件式2(条件1かつ2)
条件式1 OR 条件式2 (条件1または2)
のように2つの条件式をつなげることができます。

 画面の説明

上半分:すべて出力結果を表示するだけです。

  液晶画面

1番上のマス目のある長方形のところを(仮想の)液晶画面と呼びます。
古い白黒の液晶画面風にしてあります。(白黒版)
このマス目の1つ1つがドットで、 点灯すると黒くなります。
ドットは左から右の方向にX=0,1,2...37、上から下の 方向にY=0,1,2...15のドットが配置してあります。(合計38x16ドット)
※au携帯用にカラー版を作成し、39x30ドットに増やしました。
ドットが大きいし数が少ないと思われるかもしれませんが、プログラム実行の速さや 表示のみやすさを考えて、このようにしてあります。

  文字出力部

液晶画面のすぐ下に3行分の文字出力部があります。
プログラムから出力された文字は ここに表示されます。
出力が3行を超えると自動的に上にスクロールされます。
(PRINT命令による出力はここに表示されます。)

  モード表示部

modeと書かれた黄四角の中に「モード」が表示されます。
モードとは、プログラムの処理状況のことでEDIT,READY,RUNなどの種類があります。

下半分:入力で使う部分です。

  テキストエリア

大きい四角のところは、プログラム文を記述するところです。
中身を編集する場合、DSiや携帯電話では別画面のエディタ(編集ソフト)が 表示されます。
エディタは各端末独自のものですので、その操作はそれに従って下さい。

  機能ボタン

 CLSボタン

液晶画面と文字出力部の表示をすべて消します。
RUNモード中はボタンは使えませんが、 プログラム文にCLS命令を入れておくことができます。

 READYボタン

EDITモード(編集モード)のときにこのボタンを押すと、 テキストエリアに書かれたプログラム文を実行する「準備」をひそかに行います。
準備が終わるとREADYモードになります。
プログラムが間違っているとERROR(エラー)表示が出てEDITモードに戻ります。
そのときはプログラム文を見直してください。

 RUNボタン

READYモードのときに押すとプログラムを実行します。
EDITモードのときに押すとREADYボタンを押してRUNボタンを押したのと同じ動作をします。
エラーのときは各モードにもどります。

 READYモードについて

なぜREADY(準備)モードを設けたかといえば、実行までの速度をはやくするためです。
実行(RUN)前の「準備」は結構時間がかかります。
(待っている間は「Wait.」の表示が出ます。)
同じプログラム文を何度も実行するときは これで「準備」の時間を省けるのです。

 BREAKボタン

プログラム実行(RUNモード)中に押すとプログラムを中断します。
(また途中から はじめるということはできないのでSTOPボタンとすべきかもしれませんが。)
READYモードのときに押すとEDITモードになります。

 SAVEボタン

テキストエリア内のプログラム文を各端末内にCookie(クッキー) と呼ばれるファイルで保存します。
1度押すとモード表示部に「SAVE?」と表示されます。
本当に保存するならば再度 押してください。
保存されると文字表示部に「Saved into Cookie」と表示されます。

 LOADボタン

過去にSAVEボタンでプログラム文をクッキーに保存してあれば、このボタンで読み出す ことができます。
読み出されるとテキストエリア内にあるプログラム文の後ろに追加されます。
1度押すとモード表示部に「LOAD?」と表示されます。
本当に読み出しするならば再度押してください。
読み出されると文字表示部に「Loaded from Cookie」と表示されます。

 Cookieとは

ブラウザから各端末に保存できるデータのことです。
普通はブラウザで入力したIDやパスワードなどの文字を 再入力を避ける目的などのために保存するために使います。
(サイズに制限があり4kB?(au携帯は2kB?)くらいのようです。)

 プログラム文の保存方法

パソコンや携帯電話の場合は、テキストエリアでプログラムを コピーして適当なファイルなどに ペーストして保存できるし、その逆もできると思います。
(DSiブラウザーの場合は今のところできません。)
(参考:パソコンからau携帯にテキストファイルを送る方法)

  キーボタン

最下段のA,B,C,L,U,D,Rのボタンです。
プログラム実行(RUN)中に使うことができます。
プログラムでINKEY$命令を使ったとき'A','B','C','L','U','D','R'の値を返します。
(L:left,R:right,U:up,D:downのつもりでアルファベットを選びました。)
プログラム実行中だけ使える(仮想)キーボードと思ってください。
ちなみにパソコンの場合でも、キーボードからの直接の情報はRUN中は使いません。

<カラー版(au携帯用)の場合>
L,R,U,Dボタンの中央に赤い横長ボタンがあります。
RUN中にボタンのフォーカス(選択の四角線)をここに置くと、
携帯の上下左右方向への「選択」1アクションだけで'L','U','D','R'の値を返します。
逆にRUN中はL,R,U,Dを選択しようとすると強制的に赤ボタンにフォーカスがいきます。
RUN中、赤ボタンからフォーカスをはずしたいときは赤ボタンを押してください。
(RUNボタンを押すと自動的に赤ボタンへ、赤ボタンを押すとRUNボタンへ移ります)

A,B,Cは通常通り、ボタンの「選択」と「押し」の2アクション必要です。

 d-BASICの作成経緯

僕がプログラミングを始めたのは大学生時代ポケットコンピューターというものを 買ってからです。
プログラミングの楽しさを初めて味わうにはとってもよかったなと思います。
私はプロではなくアマチュアのプログラミング愛好者です。
今の時点でちょっとしたプログラムを書いて楽しむためにはJAVAスクリプトがいいと思い、 遊んでいました。
必要なソフトといえばメモ帳とブラウザだけですからね。
でもHTMLとかCSSとかの知識も必要で初心者の初心者には面倒くさいと思ったんです。
自分の子供にプログラミングの楽しさを教えようと思いたったとき、 ポケットコンピューターしかないなと考えました。
でも今はほとんど販売してないんです。
考えていたころ、ちょうどDSiの発売がはじまりました。
DSでプログラム遊びができるソフトだれか作って欲しいなーと思いましたが、 もしかしたら自分でもつくれる?
JAVAスクリプトで?ということで
本やらネットやらで調べたところ、「トイ言語はやる気があれば誰でもできる」との ことで、作ってみたのです。
この状況は、「しろうとが、立派な家を建てられるような大工道具を使って、 わざわざ小さな道具を作り、それで鳥小屋を作っている」ようなおもしろい感覚です。

 参考リンク

 更新履歴



ネットでの公開開始:2009.1.11
携帯用の追加、GCURSORの修正、名称をd-Basicに変更:2009.1.13
cookieの修正、携帯用画面の変更、サンプルプログラム追加:2009.1.14
変数のある数式の不具合修正:2009.1.16
携帯用のLRUDボタンの扱いの変更:2009.1.18
括弧の扱いの変更、配列変数追加、au携帯用をカラー化・画面変更:2009.1.20
loadを上書きから追記に変更等2009.1.22
DSiカラー版を作成2009.1.25

Copyright (C) 2009-11 yocch. All rights reserved.