プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

タートルグラフィックス for プチコンmkII V0.4

タートルグラフィックスをバージョンアップしました。
今回はかなりの機能追加を行い、ついに再帰処理が可能となりました。
また、今回からプチコンmkII専用となりました。

■V0.4の概要
・複数のサブプログラムに分けることができるようになった
・サブプログラム間の呼び出しができるようになった
・比較演算命令(同じ、より大きい、より小さい)の導入
・実行中の一時停止追加
デバッグモードの追加
・ヘルプの追加
・その他

■画像・動画
タートルグラフィックスV0.4でコッホ曲線を描いたデモ


http://www.youtube.com/watch?v=G8CBAZaXJxY:MOVIE

■QRコード
QRコードは以下です。

タートルグラフィックス for プチコンmkII V0.4 (ファイル名:EDTURTLE)
1/6

2/6

3/6

4/6

5/6

6/6

なお、プログラムの編集用エディタが必要ですので、別途以下のリンクからテキストエディタも入れておいてください。

ショートテキストエディタV0.12のQRコード - プチコンで遊ぼう!


■機能の詳細など

◆最大10個のサブプログラムに分割ができるようになった

最大10個のサブプログラムに分割することができます。
(サブプログラムの最大数はPGMAXで定義されていて、簡単に増やすことができます。)

サブプログラムは0〜9の番号が付いており、それぞれの番号で呼び出します。
LS、LD、ED、EX、RNのオペランドにサブプログラム番号を指定することができるようになりました。
例えば、0番のサブプログラムのリストを表示する時はコマンドラインで、

LS 0

また、1番のサブプログラムを実行する時は、

RN 1

とします。

また、複数のサブプログラムをひとつずつMEMとしてLOAD、SAVEするのはかなり面倒なので、ロードされているサブプログラムをまとめてGRPに書き込むようにしました。
GRP1に読み書きします。
ただし、GRPのロード、セーブはタートルグラフィックス内では未サポートなので、タートルグラフィックスを実行する前に、
LOAD "GRP1:xxxx"
のようにGRP1に読み込んでから、タートルグラフィックスをRUNしてください。
タートルグラフィックスのコマンドQTで終了すると、サブプログラムがGRP1に書き込まれるので、
SAVE "GRP1:xxxx"
として保存しておくことができます。


◆サブプログラム間の呼び出しができるようになった

追加命令CS(Call Sub-program)により、サブプログラム中から別のサブプログラムを呼び出すことができます。
CSのオペランドに、呼び出すサブプログラム番号を指定します。
呼び出されたサブプログラムが終端に達すると、呼び出し元の位置に戻ります。
例えば、0番のサブプログラムに以下のように記述すると、

RP 3 CS 1 ER 0

1番のサブプログラムを3回呼び出すことができます。
また、実行中のサブプログラム自身を呼び出すこともできます(自己呼び出し)。
タートルグラフィックスにはIF〜THEN構文がありませんが、後述する比較演算子とうまく組み合わせると、処理の分岐を行うことができます。
また、さらに自己呼び出しを組み合わせると、再帰処理を行うことができます。
自分で使う値はうまくスタックに積んでおく必要があります。
詳しくはサンプルにて。


◆比較演算命令(同じ、より大きい、より小さい)の導入

比較演算命令の追加で「同じ」、「より大きい」、「より小さい」の3つの判定ができるようになりました。
ただし、高級言語のプログラミングのように、A==Bのような書き方はできず、四則演算と同様にスタックを使った命令となります。
「同じ」はVE(Validate Equal)、「より大きい」はVG(Validate Grater than)、「より小さい」はVL(Validate Less than)です。
条件が成り立てば 1 、そうでなければ 0 がスタックに積まれます。
具体例を示します。

DS 1 DS 2 VL 0 PP 0 MS $0

四則演算同様、先にスタックに積まれた値が第1項となるため、この解釈は
1 is less than 2
であり、条件が成立するので、1が返ります。


◆実行中の一時停止追加

サブプログラムの実行中にSTARTボタンを押すと、一時停止となり、
H)HALT D)DEBUG ON/OFF
OTHER)CONTINUE
と表示されます。
Hを入力すれば実行を停止しコマンドラインに戻ります。
Dを入力すればデバッグのON/OFFを切り替えた上で、実行を継続します。
それ以外を入力した場合には、そのまま実行を継続します。


デバッグモードの追加

命令DBで1を指定するか、サブプログラム実行中に一時停止をしてDでデバッグ切り替えをすると、デバッグモードとなります。
デバッグモードでは、ステップ実行となり、下画面に内部状態が表示され、上画面にはタートルの位置が座標で表示されます。
下画面の内部状態は、REGがレジスタ、USTがユーザースタック(USTPはスタックポインタ)、SSTがシステムスタック(STがスタックポインタ)を表します。
システムスタックには、PG(サブプログラム番号)、PC(プログラムカウンタ)、CN(ループカウント)があります。


◆ヘルプの追加

コマンドラインで、『?』を1文字だけ入力すると、簡易ヘルプが表示されます。
?は命令ではないので、プログラム中に実行することはできません。


◆その他

・命令WTの追加
ウェイトを指定します。1は1/60秒を表し、0〜60を指定できます。

・ダイレクトモードエラーの修正
以前のバージョンでは、ダイレクトモード専用命令をプログラム中で使ってしまうことができましたが、V0.4からRNでプログラム実行時に使うと、Not Direct Modeエラーとなります。



■サンプル
コッホ曲線を描くサンプルです。
サブプログラム0番

PU 0 LT 90 FW 90 RT 180 PD 0 DS 1 DS 180 CS 1

サブプログラム1番

PP 1 PP 0 PS 0 PS 1 PS 1 DS 3 DV 0  PP 1
 PS 1 DS 5 VL 0 DS 1 AD 0 PP 0
 PS 0 PS 1 CS $0 PP 1 PP 0
 LT 60 PS 0 PS 1 CS $0 PP 1 PP 0
 RT 120 PS 0 PS 1 CS $0 PP 1 PP 0
 LT 60 PS 0 PS 1 CS $0 PP 1 PP 0

サブプログラム2番

PP 1 FW $1 PS 1

サンプルを入力するには、編集用エディタが必要ですので、別途以下のリンクからテキストエディタも入れておいてください。

ショートテキストエディタV0.12のQRコード - プチコンで遊ぼう!

コマンドラインで ED 0 を実行し、0番をエディタから入力してください。
同様に ED 1 で1番、ED 2 で2番を入力します。
実行は、コマンドラインで RN 0 と入力してください。

簡単にプログラムの解説をします。
サブプログラム0番
まず、タートルが画面中央にあるので、タートルを左の方に動かしてから、サブプログラムを呼び出すための準備をしています。
サブプログラム1番は、スタックに、(1)呼び出すサブプログラム番号、(2)線分の長さ、の2つが入っていることを前提としているので、サブプログラム番号は1、線分の長さは180を設定しています。
そして CS 1 のところでサブプログラム1番を呼び出します。
サブプログラム1番
再帰処理を行うメイン部分です。
スタックから線分の長さを取り出し、3で割ります。
その長さが5よりも小さくなる時は、その長さの線分を描くサブプログラム2番を、そうでない時は自分自身(1番)を再度呼ぶようにサブプログラム番号をスタックに積みます。
その上でコッホ曲線のジェネレータの通りタートルを動かします。
サブプログラム2番
単に線分の長さだけタートルを直進させます。

実はサンプルのGRPをとったQRコードもあります。以下からお使いください。

コッホ曲線を描くサンプル (ファイル名:GRP:EDTTKOCH)

ドラゴン曲線を描くサンプル (ファイル名:GRP:EDTTDRGN)

使い方は、タートルグラフィックスを実行する前に、
LOAD "GRP1:EDTTKOCH"
のようにGRPに読み込んでから、タートルグラフィックスをRUNしてください。

以上です。 Let's Enjoy!!