プチコン 1画面プログラム

(2ページ目)

 古くから短いプログラムリストでいかに面白いゲームを作るかという試みはポケコンや8bitパソコンで非常に多く見られました。その1つのレギュレーションが「1画面プログラム」です。要するに1画面(プチコンの場合は編集画面で29文字×24行)にリストが収まるようなプログラムということです。

 プチコンはmkIIによって手軽にQRコード経由で入力が可能になりましたが、それまでは外部とのプログラムリストのやりとりは(実際に2台の本体を持ち寄って転送する場合を除けば)すべて手入力となっていました。そのためこういった短いプログラムリストは大きな意味がありました。
 QRコードによる公開が主流になったとはいえいかに小さいサイズで面白いものを作るかというのを考えたり29文字×24行にいかにして収めるのかというパズルのようなプログラミングの楽しさが1画面プログラムにはあります
 こちらにあるようなリスト短縮法を使って皆さんもぜひ1画面プログラム作りにチャレンジしてみてください。1行プログラムもまた別の楽しさがあります)

mkII用にすべてのプログラムにQRコードを用意しました。(※音階演奏ソフトOMPに関してはMML演奏機能が標準機能にあるためQRコードは用意していません)
QRコードによるリストには末尾にREM文で簡易マニュアルを記しています。
QRコードの再配布は無改変の場合に限り自由に行ってもらって構いません。

プチコンはRUN(実行)は[START]ボタン、停止は[SELECT]ボタンで可能なので活用していきましょう。
あと[R][←][START]の同時押しでVRAM(画面表示) の初期化ができます。

《 注 意 》
mkIIの「ホームメニュー」から「作品を見る」で実行する場合において(ホームメニュー非対応)のゲームに関してはゲームオーバーと同時にメニュー画面に戻ってしまいます。そのためホーム画面から実行する場合は任意のキーを押した場合にゲームの先頭行を実行しそれまで時間待ちをするという処理を入れた方が良いでしょう。(※「プログラムを作る」で実行した場合は問題ありません。)
やり方が分からない場合は @START を先頭行に加えて、FOR B=0TO 1024:B=BUTTON():NEXT:GOTO @START を最終行に加えるとゲームオーバーの際に[START]ボタンでリトライができます。
1画面以外のゲームはすべて(ホームメニュー対応)となっているので問題ありません。
ちなみに1画面に収まらないプログラムはこちらの方で公開しています。


ゲーム


(このページにはまだありません1ページ目を見てください)

↑TOP


ツール


PETIT PAINT mkII

【mkII専用】(ホームメニュー対応) 2019年6月16日 公開

プログラムリスト QRコード(ファイル名:OCHAPNT)


《 実行画面 》

動作中の画面

《 使用方法 》

 シンプルで使いやすいお絵描きソフトです。プチコンmkII用のお絵描きソフトは処理落ちが目立つものが多いですが、このお絵描きソフトは、極細ペンを使用時は60fps、それ以外の太さでは30fpsに自動的に切り替え制御することで安定したfpsを確保して非常に描きやすくなっています。(たぶんプチコンmkII用お絵描きソフトでこれを実現しているのはこのPETIT PAINT mkIIだけ)
 起動したらまずは「ツヅキカラ?(Y/N)N:ショキカ」と聞いてくるので前回セーブした絵の修正を行うならば「Y」を入力、もしくはENTERの空入力(Aボタンを押してもOK)を行ってください。新しいキャンバスで描き始めるならば「N」と入力してください。(初回起動時はどちらを選択しても構いません)
 ここで普通に起動した場合には画面右に赤6諧調、緑6諧調、青6諧調の216色パレットが表示されます。これを表示させたくない場合は十字ボタンを押しながら起動してください。(パレットはキャンバスと独立したものではなくGRP上に表示される)

◎ボタン操作方法
極細ペン
十字ボタンを押さない
ペン
十字ボタン
ペン
十字ボタン
ペン
十字ボタン
極太ペン
十字ボタン
色変更
LXボタン
スポイト
Lボタン(もしくは Rボタン) + 画面タッチ
※ボタンを押している時にタッチしたドットの色を取得
セーブ
LYボタン 
ロード
起動時に自動的に行う
※すぐに前回の続きから描くことが可能!
 太ペンや極太ペンを使用時には斜め方向に入力することでさらに少しだけ太くすることができます。なお、Aボタン、Bボタンは超極太ペンとして使用できます。広範囲の塗りつぶし用に使ってみてください。(超極太は若干処理落ちする)
 消しゴム機能はキャンバスの色をスポイトで取得して描画することで可能です。(レイヤー機能はないので透明色を考慮する必要がない)
 アンドゥは無いですが、ラクガキ絵専用と割り切れば問題ないでしょう。


 タッチペンを使い自由自在にお絵描きができます。プチコンmkIIでも処理落ち無く快適に描くことができます。ペン(ブラシ)の太さは十字ボタンを押しながら描くことでワンタッチで瞬時に変更が可能です。(同一ストローク内での太さ変更も自由自在)
 描画の色を変更したい場合はLボタン(もしくはRボタン)を押しながら好きな色をスポイトで取得すればOKです。

 パレットの色を任意の色に変更したいという場合(パレットに無い色を使いたい場合)はXボタンを押した後、6桁の16進数でRGBの指定をします。これによって、現在描画色がその指定色に変更となります。例えば、R=240、G=160、B=128の色ならばF0A080と入力します。RGB各256段階の入力ができますが、プチコンmkIIの仕様上、Rは32諧調、Gは64諧調、Bは32諧調の合計65536色の範囲に丸められます。(これは32768色+透明色のプチコン3号よりも多い)
 ちなみにプチコンmkIIはパレット発色であるため色を変えた場合はキャンバスで使用さているその色コードの色がすべて変更となります。例えばカラーでお絵描きをしていて線画を黒にしていた場合にそれを茶色に変更したらすでに描画済みの線画の色もすべて茶色に変更してくれるため非常に便利です。

 セーブは一時ファイル"GRP1:_"への上書き保存を行います。これはファイル名を決める煩わしさがないため楽なのですが、上書きされては困る場合はRENAME "GRP:_","(任意のファイル名)"としてあらかじめ変更しておくと良いでしょう。

 このツールはブラシの太さをワンタッチで瞬時に変えられるというのが他のお絵描きツールにはない大きな特徴なのですが、それに加えてブラシの太さに連動したカーソル表示機能も他のお絵描きツールにはない特徴となっています。
 このブラシ連動のカーソルは消しゴム機能を使う場合(描いた絵を部分的に消す場合)に非常に有用で、大きな範囲を太いブラシで一気に消す場合もどの範囲が消せるかも一目瞭然だし、「描いて(消しゴムで)削る」という描き方をしている人にとっては非常に使いやすいツールとなっています。
 あとデフォルトの背景の色である白はパレットの右下にある白とは別の色なのです。したがって、背景色をスポイトで色選択してからXボタンで任意の色に変更した場合は背景の色を変えることができますが、その場合も白色は使用可能なのです。(だから、このツールで使用可能な色数は65536色中216色、ではなくて217色となっている)
 実はこのツールは説明しなくても分かる人も多いと思いますが、プチコン3号で作った「PETIT PAINT 2 QSP」のmkII移植版です。PETIT PAINT 2 QSPではオプションだったパレット生成機能を標準搭載してmkII独自機能に対応したものということです。
 高機能なお絵描きツールがたくさん揃っているプチコン3号とは異なり、プチコンmkIIはお絵描きツールはあまり潤沢とは言えません。したがって、このツールの存在価値は大きいでしょう。

《 改造点 》

◎セーブ時のダイアログの出る回数を減らす

 このソフトは使いやすさを重視して作られていますが、プチコンmkIIの仕様上デフォルトのパレットから色を変更した場合はCOLリソースのセーブやロードの必要性が出てきます。(セーブするごとにダイアログが2回出る)
 Xボタンによる色変更を使用しないのであれば毎回出るダイアログが少しうざく感じるかもしれません。もしも、色変更を使用しないのであれば4行目のLOAD"COL2L:_",0、18行目のSAVE"COL2L:_",0を削除することで、余分にダイアログが表示されることは無くなります。(ただし、標準の217色以外は使えなくなる)
 色変更をしないのであればXボタンを押したときの処理も削除できます。15行目のFOR J=B!=64TO 0から17行目のNEXTまでの範囲が削除可能です。

 これによって大幅なプログラムリスト短縮が可能になるためセーブやロード時に任意のファイル名が選択できるようにしても良いかもしれません。

◎カーソルの色を変更する

 このソフトのウリとなっているタッチ時に出てくるブラシの大きさを示しているカーソルですが、標準ではグレー(色コード1)となっています。これは色コード1〜30の範囲(ただし、色コード15以外)で自由に変更することが可能です。
 例えば赤(色コード2)に変更したい場合は25行のGCIRCLE M.N,R,1の「1」を「2」に変更、GPAINT M+!R*H,C,1の「1」を「2」に変更すればOKです。この2か所ある「1」を変えることで好きな色にカーソルを変更できます。使用可能な色コードの範囲内であれば描画色の補色(目立ちやすい色)にするということも可能です。

◎常時60fpsで動作させる

 このソフトでは極細ペンは60fps、それより太いペンは30fpsで動作させることで処理落ち無しを実現していますが、常時60fpsで動作させることも可能です。
 20行のFOR K=1TO 24の「24」を「11」に変更、K/24の「24」を「11」に変更、21行のK/24の「24」を「11」に変更、VSYNC K>23の「23」を「10」に変更、24行のVSYNC K<24を削除とすればOKです。
 これによって、極細ペン以外を使用時の追従性はアップしますが、素早く動かした時に線が途切れやすくなったり、(線が途切れかけてしまい)線が汚くなったりします。私は線のきれいさを選択しましたが、追従性が気になっている人はこの改造を行ってみるとよいでしょう。

↑TOP


PETIT DRUM + BASS

【mkII専用】(ホームメニュー対応) 2013年3月3日 公開

プログラムリスト QRコード(ファイル名:OCHAPDB)


《 使用方法 》

 ボタン操作によって演奏できるドラムとタッチ操作によって自由自在に弾くことのできるベース演奏プログラムを合わせて1画面のサイズに収めたものです。
 ベースとドラムは動作中いつでも簡単に切り替え可能です。

ベース
[START]ボタン
ドラム
[START]ボタン + 何か別のボタン
※押すボタンは[START][SELECT]以外ならどれでも良い
 ※起動時に選択する場合は[START]ボタンで起動する際に軽く押してすぐに離せばドラムになり、[START]ボタンを長押しすればベースになる。

 ドラムのボタン操作はDS用ソフト「バンブラDX」のロックドラムと同一で下記のようになっています。

◎ドラムのボタン操作
[↑]ボタン
クローズ
[↓]ボタン
タム M
[←]ボタン
タム L
[→]ボタン
タム H
[A]ボタン
スネア
[B]ボタン
バスドラ
[X]ボタン
タンバリ
[Y]ボタン
リム
[L]ボタン
オープン
[R]ボタン
シンバル

 同時ボタン入力が可能でそれぞれ別トラックで音を出しているため複数の音を同時に奏でることが可能です。

 ベースは[A][B][X]{R]ボタンで押さえるフレット番号を指定します。

◎ベースのボタン操作
[A]ボタン
フレット番号 1
[B]ボタン
フレット番号 2
[X]ボタン
フレット番号 4
[R]ボタン
フレット番号 8

 各ボタンは同時に押すことで[B]ボタン+[X]ボタンならば2+4=6でフレット番号6を押さえたことになります。上画面に出ている数字は現在押さえているフレット番号を示します。ベース譜を元に演奏する場合は下画面に出ている音名ではなくこちらを見ながら演奏すると良いでしょう。弦の音名は押さえているフレット番号によって変わります。
 なお、ベース演奏する際は[A][B][X][Y]ボタンを下にした縦持ちスタイルとなります。また縦持ち弦は1本1本独立管理されており、音量調整も自由自在に可能です。これはPETIT GUITARと同一なのでくわしくはこちらをご覧になってください。うまく使いこなせばタッピングなどの演奏表現もできるかもしれません。

《 改造点 》

◎ベースの音色を変える

 7行のBGMSET命令の中で使用されている@34を適当な数字に変えてください。@32@39が各種ベースになっています。

◎ドラムセットの音色を変える

 5行のMID$の中にある*-/2&$6%.1の10文字を変えます。左から順に上下左右[A][B][X][Y][L][R]ボタンに対応する音色となっていて@128のドラム系の中の音からNコマンド指定時の高さの音色を選びます。(C4=N60となる)
 選んだ音色の数字をCHR$で1文字にして上記10文字の指定の場所の文字と入れ替えるだけです。
 例えば[L]ボタンでマラカスの音を鳴らしたい場合はマラカスは04A#=N70なのでCHR$(70)である「F」を[L]ボタンの位置(9文字目)にある「.」と入れ替えれば良いです。

《 実行動画 》



このプログラムはキーボードボーカルギターを作ったならばドラムやベースも欲しいかも・・・ということで作ったものです。
ドラムは7行で作れたのでベースと併せて1本にまとめました。

↑TOP


コンソールお絵かき

【mkII専用】(ホームメニュー対応) 2013年2月20日 公開

プログラムリスト QRコード(ファイル名:OCHACONE)


《 使用方法 》

 グラフィックを全く使わずコンソールキャラのみで作ったお絵かきツールです。
 開始時はLOADするファイル名を入力します。ファイルがない時はそのまま[A]ボタンを空入力すればキャンセルできます。そして、下画面にタッチペンを使って枠内にドット単位で絵が描けます。画面上に並んでいる15色のパレットから自由に色を選ぶことが可能です。
 終了するときは[L]もしくは[R]ボタンを押してください。終了時にはファイルをセーブすることもできます。ロードしたときと同じファイル名でよければそのまま[A]ボタンを押してください。何も入力せず[A]ボタンを押せばキャンセルしてそのまま終了します。
 なお、ファイルはGRPリソースではなくCHRリソースで記録されています。
 あと、終了時にはコンソール(BGF)は、元に戻しているのだけどそのデータをスプライトキャラ(SPU0)にコピーしたまま書き換わった状態なので手動でCHRINIT"SPU"としてください。

《 改造点 》

◎線を引く

 現在はツールとしては機能は非常に貧弱で点を打つだけしかできません。ゆっくりタッチペンを動かせば点が繋がって線になるもののストレスを感じる人もいるでしょう。タッチペンを速く動かし1フレームの移動量が1ドットを越える場合には前フレームでタッチした座標と現在タッチしている座標を直線で繋げばスムーズな描画が可能になります。
 直線描画のアルゴリズムにはさまざまなものがありますが、ブレゼンハムのアルゴリズムがシンプルかつ高速で良いかもしれません。

《 実行画面 》

動作中の画面

 このプログラムはコンソールキャラを書き換えることでGPSETのような動作をさせているだけであり、ツールとしての使い勝手はそれほど良くはありませんが、当初考えたネタ通りのもの(1ドット単位で色を自由に変えられるお絵かきツール)が出来たと思います。

↑TOP


PETIT GUITAR

【mkII専用】(ホームメニュー対応) 2013年1月14日 公開
2013年1月16日 更新

プログラムリスト QRコード(ファイル名:OCHAPGTR)


《 使用方法 》

 タッチ操作によって自由自在に弾くことのできるギター演奏プログラムです。
 このPETIT GUITARを使用する時は本体を[A][B][X][Y]ボタンが下になるように縦にして(つまり画面左側の1番太い弦が使用時には1番上になる)左手で本体を支えます。そして、残った右手で弦を弾きます。簡単に言えば普通にギターを弾く感じで操作してもらえたらいいということです。

 コードは[A][B][X][Y]{R]ボタンを使って選択します。(下記使用ボタン一覧表参照)
 左手の準備ができたら右手で弾くのですが、弦は1本1本独立して制御しているためどのように弾いても構いません。(弾かない弦があるならば弾かないという選択も可能だし、1本ずつ弾いていけば単音演奏も可能)
 また、弦は弾く場所で音量が変わってきます。下画面の一番下が最大で上に行くごと(Y座標が小さくなるごと)に音が小さくなります。上手く弾けばビブラートっぽい音も出せると思います。
 あと、画面の上1/3は消音として働きますので「弦を押さえて音を消す」という動作も可能です。弦1本1本音量調節が可能なので効果的に使えば演奏の幅が広がるでしょう。

下画面操作図
PETIT GUITER操作
 ※下画面には線のみが表示されます

《 使用ボタン一覧表 》

音階の選択
A
1
[A]ボタン
B
2
[B]ボタン
C
3
[A]+[B]ボタン
D
4
[X]ボタン
E
5
[A]+[X]ボタン
F
6
[B]+[X]ボタン
G
7
[A]+[B]+[X]ボタン
#
[Y]ボタン

コードの種別の選択
メジャー
何もボタンを押してない状態で
[R]ボタン を押す
マイナー
[A]ボタン を押しながら
[R]ボタン を押す
セブン
[B]ボタン を押しながら
[R]ボタン を押す
マイナーセブン
[A]+[B]ボタン を押しながら
[R]ボタン を押す

 例えばCmを選択する場合には[A]ボタンを押しながら[R]ボタンを押して一旦ボタンを離した後に[A][B]ボタンを押せば良いです。(同時押しもOKなので[A][R]同時押しの後で[R]を離しつつ[B]を押してもいい)
 操作は少し複雑ですが、[X][B]{A]ボタンを2進数に置き換えてボタン操作の隣に書いている数字に当てはめればこの表そのものを覚える必要はないことが分かるでしょう。(例:[X]押す、[B]押さない、{A]押す→ 1015E

《 上画面表示について 》

 このプログラムは1画面のリストサイズに収めるため上画面の情報表示はシンプルになっています。(ver.1.1で表示方法が変更になりました)
 コードはAA#BCC#DD#EFF#GG#の12音階で表示(すべて開放弦の場合は「」と表示)されますが、コードの種別(マイナー、メジャーなど)はリストのサイズの関係上数字で記されています。

コードの種別
0
メジャー
1
マイナー
2
セブン
3
マイナーセブン
4〜7
(未使用)

 つまり、画面上に「A」、「1」表示されていたらそれはAmを意味します。(4〜7の未使用のコードを選択した場合は音階を指定してもすべて開放弦の場合と同じ音が鳴ります)

《 更新情報 》

◎ver.1.1 (2013/01/16)

 ギターコードのデータにミスがあったので修正しました。
 画面表示を少し分かりやすく改善しました。(数字だけの情報だったのがC#とか表示されるようになった)

《 改造点 》

◎音色を変える

 1画面のリストサイズに抑えるため音色変更の設定機能ないので14行のBGMSET命令の中で使用されている@27を適当な数字に変えてください。@24@31が各種ギターになっています。

◎コードを分かりやすくする

 数字では押しているコードの種別がが分かりにくいという人は18行の末尾に「;」を付けて19行と20行の間に次の行を加えてください。

 ?MID$("□□m7m7,P*2,2)
  はスペースを示す

 これでC3だった画面表示がCm7のように変わります。

◎コードを追加する

 コードがメジャー、マイナー、セブン、マイナーセブンだけでは不足という人は各自で追加してください。
 コードは6弦〜1弦までの押さえるフレットを数字で表した6桁の数(例えばAmの場合は002210という感じで開放弦は0にしておく)に圧縮をかけて2バイトにしています。その圧縮プログラムを用意しましたのでご利用下さい。

INPUT D$
A=9
FOR I=0TO 5
 P=VAL(MID$(D$,I,1))
 A=A+!!P*(P<A)*(P-A)
P(I)=P
NEXT
A=A-1
FOR I=0TO 5
 P(I)=P(I)-A*!!P(I)
NEXT
E$=CHR$(A+P(0)*16+P(1)*64+1)+CHR$(P(2)+P(3)*4+P(4)*16+P(5)*64+1)

 D$に6桁の数字を入れるとE$に2桁の文字が入ります。これをA、A#、B、C、C#、D、D#、E、F、F#、G、G#の順に12回行い合計24文字が1種別のコードデータとなります。このデータを6行目末尾のA$に加えてください。データを加えた場合には7行目のFOR文の終了値はLEN(A$)/2-1に変更してください。
 またコードを追加した際に上記のコード表示の改造を行っている場合は追加したコードの名称をMID$の引数に加えてください。デフォでは0〜7の8種のコードが登録でき、[Y]ボタンを活用すればさらに8〜15までが使えるため最大で16種のコードを登録できます。(9種以上のコードを使用するには19行目末尾の P=CP=C+E*8 にする。11種以上のコードは変数A$に格納できないので分割処理を行う必要がある)

《 実行動画 》



このプログラムはSOUND PADで新しい持ち方を考えた時にギターへの応用ができそうということで作ったものです。
コードのデータ作成はこちらのサイトのコード表(外部サイトへのリンク)を参考にしました。データ化の際に入力ミスなどがありましたらご連絡ください。

↑TOP


Petit Brainfuck

【mkII専用】(ホームメニュー対応) 2012年12月9日 公開

プログラムリスト QRコード(ファイル名:OCHAPBF)


《 使用方法 》

 難解プログラミング言語「Brainfuck」のインタープリタです。Brainfuckは"+"、"-"、"<"、">"、"."、","、"["、"]"の8つの命令で成り立っています。詳しくはWikipediaなどで調べてください。

 まず実行したら画面上に「CODE」と表示されます。ここでBrainfuckのソースコード(プログラム)を入力すればそれを実行します。この入力したコードはファンクションキーの[F1]に入っているので活用してください。
 この直接入力による実行ではLINPUT命令の仕様上32文字までしか入力できません。しかし、ソースコードの入ったMEMリソースファイルをあらかじめ用意しておけばこのコード入力の場面でファイル名を入力すると255文字までのコードを実行できます。MEMリソースはPETIT EDITORなどを用いて入力してあらかじめセーブしておくと良いでしょう。(APPENDしてラベルスタートを使うとその都度PETIT EDITORをLOADする必要がなく非常に便利)
 また空入力(何も入力しないで[A]を押す)の場合は前回実行したコードを再び実行します。

 実行中は画面上に「RUN」と表示されコードの中で現在実行中の部分と操作しているポインタ(ポインタが示す値は2桁の16進数で表示)に緑色のカーソルがあります。なおこの実行速度は十字ボタンや[A][B]ボタンを押している間は変更できます。上が1.5倍速、下が2倍速、左が3倍速、右が5倍速、[A]が10倍速、[B]が30倍速(それ以外のボタンを押せば100倍速以上)ですが、慣れたら[A][B]しか使わなくなるかもしれません。
 文字出力は緑色の枠内に行われます。実行が終わったら再び最初と同じようにコードの入力を求める状態になります。
 あとは適当にコーディングして試してみてください。(Brainfuckは非実用言語だけどポインタ操作の概念を学んだりコード短縮を楽しむことはできる)

 なお、このPetit Brainfuckはいくつか制限があります。
◎Petit Brainfuckの仕様
  • 命令 " , " (入力命令)はサポートされない
  • ソースコードは最大255文字まで
  • 要素数は60個(0〜59)(ループしているので-1は59と見なされる)
  • 出力文字は63文字まで
  • " [ "、" ] "を入れ子にして使用できない[ ] は可だけど [[ ]] は不可)
 コードを直入力しているのかファイル名を入力しているかを短いリストで識別を行っている都合上ファイル名の先頭に"_"があるMEMリソースファイルは読み込めません。4行目の末尾に+(A==95)を付ければ"_"で始まるファイル名も読み込めるようになります。

 Brainfuckがどんなものかよく分からない人、命令の使い方を知りたい人、サンプルコードを見てみたい人のために可読性重視の「Brainfuckインタープリタ」のページを作りました。命令の実装方法なども記しているので良かったらご覧になってください。

 (プチコン用)Brainfuckインタープリタ

《 改造点 》

 このPetit Brainfuckは1画面のリストサイズながら使用時の快適さや実行時の分かりやすさを優先して、なおかつホームメニューでの実行を可能になるように作ったため上記のような仕様上の制限があります。そのためそれらを改善する方法を書いていきます。

◎命令 " , "(入力命令) をサポートする

 11行と12行の間に次の1行を入れたらOKです。

 IF P==44THEN LOCATE 0,0?"CHR":FOR H=0TO 1H=ASC(INKEY$()+N$)NEXT:P(C)=H-1

 命令 " , " を実行する際に「CHR」と表示されるのでそこで何か1文字入力すればそのキャラコードの値がポインタに入ります。

◎ソースコードを256文字以上対応にする

 これはMEMリソースのサイズ制限によるものです。ファイルをGRPに保存すれば48KBへと大幅拡大されますが、プチコン内部の保存領域を大きく占有してしまうし、それに対応したテキストエディタも必要になってきます。
 それが問題ないならば48KBのうち現在実行中のコードから256バイト分を読み出して表示すればレイアウトはほとんど変更することなく実現できます。

 ちなみに256文字ではなく255文字が仕様上の上限になっているのはコードのサイズが0文字の場合にMID$でNullが返されてしまいASCでエラーが発生してしまうのでコードの末尾にスペースを付けているためです。
 コードが0文字の時は再入力を行うようにすれば上限の256バイトまで使用可能になります。(まぁ上限が255文字から256文字になるだけで1文字分しか変わりませんが)

◎要素数を61個以上にする

 Brainfuckでは十分な要素数の配列(Wikipediaによると少なくとも30000個)を必要と定義づけられていますが、このPetit Brainfuckはソースコードの上限サイズが255バイトなので要素数60個でほとんど問題ないと思います。しかし、上記のようにソースコードのサイズ上限を引き上げた場合はこの限りではありません。
 このPetit Brainfuckでは操作しているポインタ(要素)を視認できるようにしていますが、これは画面表示レイアウト上80個が限界(リスト短縮の都合上60個を上限としている)であり、それ以上増やす場合はレイアウトを根本的に変える必要があります。要素数を増やした場合にはすべてを表示できないので現在操作している前後10〜20個の要素のみを画面に表示するようにすると良いでしょう。

◎出力文字を64文字以上にする

 これも画面レイアウト上の制限です。
 現在の枠は32文字x2行(ただし、最初の1文字目は未使用)ということで63文字が上限となっているのですが、これも出力文字であるN$をRIGHT$を使用して最新の64文字のみにするなどの変更をすれば表示レイアウトを維持したまま上限を超えることは可能になります。

◎" [ "、" ] " を入れ子にして使用できるようにする

 現在は実行されたコードの中で最も新しい "[" と次に真っ先に来る "]" のみが考慮されています。(ソースサイズの上限が255バイトであるため入れ子で使用することはほぼないと思う)
 入れ子(=多重ループ)で使用できるようにするのは簡単で "[" が現れるたびにネストをインクリメントし "]" が現れたらデクリメントしてその値がゼロになった時にループから抜けるようにするだけです。
 文章だけでは分かりにくいため上記の「Brainfuckインタープリタ」のページに詳細を記しているのでそれを参考にしてみてください。

手っ取り早く行いたいならば「Brainfuckインタープリタ」のサブルーチン@WHILE@WENDを入力(ただし、変数Jは変数Kに置き換え)して22行と23行のIF文を次のように修正すれば入れ子対応になります。

22行 IF P==91THEN GOSUB @WHILE
23行 IF P==93THEN GOSUB @WEND

◎ブレークポイントを設定できるようにする

 次の1行を23行と24行の間に入れたらOKです。

 IF P==35THEN LOCATE 0,0LINPUT"BRK";A$WAIT 20

 コードの中に"#"を記述すると画面上に「BRK」と表示されてそこで一時停止します。解除は[A]ボタンでできます。
 P==35P==35OR(512AND B) にすると実行中いつでも[R]ボタンでBRKできます。)

《 実行動画 》



PEIT EDITORを活用できるようなプログラムを作ろうと考えてこれを作ったわけですが、一部制限があるもののBrainfuckに興味がある人でお手軽な実行環境が欲しいという人には十分な内容になっていると思います。

↑TOP


PETIT EDITOR

【mkII専用】(ホームメニュー対応) 2012年11月23日 公開
2012年11月25日 追記

プログラムリスト QRコード(ファイル名:OCHAEDIT)


《 使用方法 》

 MEM$の編集に特化した簡易テキストエディタです。256文字までのテキストを編集できます。
 起動したらロード画面になるので編集したいMEMリソースのファイル名を入力してください。空入力の場合は現在のMEM$の内容を編集します。(mkIIでは[A]ボタンに[ENTER]キーが割り振られているので何も入力せず[A]ボタンを押すだけで空入力になる)
 ロードが終わったら編集画面になります。ここではソフトウェアキーボードで文字入力、十字ボタンでカーソル移動、[Y]ボタンで削除、[X]ボタンで挿入ができます。
 セーブをしたい場合は[R]もしくは[START]ボタンを押せばセーブ画面になるのでファイル名を入力してください。セーブせずに別のファイルをロードしたい場合にはセーブ画面のファイル名も空入力にすれば良いです。セーブ画面の次はまたロード画面になります(煩雑そうに見えるけど使ってみるとメニューでセーブを選ぶよりも手軽になっている)
 セーブ画面で「RELOAD.」の文字が出ている段階で編集したMEM$の内容が確定されてファンクションキー[F1]にその内容が入ります。セーブはしないけど一時的に保存しておきたい場合にも[A]ボタンのみの空入力は便利です。確定データはファンクションキーに入っているためリテラルデータとしてプログラム内などで活用できます(プログラム内での活用については、下記の実行動画の1分20秒以降の部分を参照)
 ただし、ファンクションキーを使ったデータの一時保存は「プログラムを作る」で実行時のみ有効です。「ホームメニュー」で実行した場合には一時保存ではなくファイル名を入れて保存してください。

 画面表示については画面の上が現在編集をしているファイル名でその下に表示されているのがその編集中のMEM$のサイズとカーソルの座標です。(座標は縦横の座標ではなく1〜256で何文字目の部分にカーソルがあるのかを示している)
 またファイルの末尾には[EOF](「end of file」の意味)と表示されています。カーソルのある位置に文字が自由に入力できますが何もない部分には自動的にスペースが挿入されていきます。末尾にスペースができた場合には見た目と実際のファイルサイズの違いがあるためこの[EOF]によってどこがファイルの末尾なのかを判断してください。

◎ボタン操作
ソフトウェアキーボードカーソルの場所に文字を入力 ※すでに文字がある場合には上書きしながら入力していく
[F1] キーデータの活用 ※短いルーチンを活用する場合に便利
十字ボタンカーソルの移動 ※上下左右は繋がっているけど左右においては座標の数字通りの移動となるため右下と左上が繋がっている
[X] ボタンスペースを挿入する ※サイズが256文字になっている場合は挿入できない
[Y] ボタン1文字削除 ※カーソルがある場所の1文字を削除
[R]もしくは[START] ボタンセーブ画面に移動 ※セーブ画面の後にデータが確定されてロード画面になる

《 改造点 》

1画面のサイズで必要な機能は粗方入っているのですがあと需要があるとすれば[BS]ボタン機能と新規ファイル作成機能くらいでしょう。

◎[BS]キーの機能を付ける方法

[B]ボタンを[BS]キーとして使用したい場合は15行と16行の間に下記の1行を加えると良いです。

 IF B==32THEN M$=LEFT$(M$,Z-!!Z)+RIGHT$(M$,(L-Z)*(L>=Z))Z=Z-!!Z

これによって、[BS]キーのようにカーソルの1つ前の文字が削除できるようになります。

◎新規作成機能を付ける方法

[L]+[A]ボタンで新規作成を行いたい場合は7行と8行の間に下記の1行を加えると良いです。

 IF B==272THEN M$=""B$=""MEM$=""

この機能を付けなくても削除ボタンで全部消してやればいい(消したあと[R]ボタンで確定する)だけだし、その手間も面倒ならば実行モードで手動でMEM$=""CLEARを実行すれば問題ありません。

あと削除、挿入などのボタン割り当てが気に入らない人は(1画面プログラムでありながら)IF文でBUTTON()関数の値を判定しているだけなのでリストを見れば簡単に改造が可能です。
アンドゥ、リドゥ、選択・コピー・貼り付けなどもあると便利ですが、この程度のサイズの編集ならば無くても問題ないでしょう。(これらの機能が欲しい人は各自で実装してください)

APPENDすればさらに便利に!

 このPETIT EDITORはサイズが小さいためMEM$を編集して使うプログラムにAPPENDして使えば一旦セーブして実行するという面倒な作業が不要になります。
 その場合は、プチコンは先頭行からでないと実行できないため途中の行(PETIT EDITORを置いた行)から実行するのが大変ですが、あらかじめPETIT EDITORの先頭にラベル@EDIT(重複する場合は他のラベル名)を付けておいて
ラベルスタートを先頭行(1行目)に入れておけば RUN @EDIT もしくは @EDIT[START] ですぐに使用できるようになるため非常に快適です。

《 実行動画 》



MEM$(MEMリソースを使ったセーブデータ)の編集だけではなく単にテキストエディタとして1行プログラムや140文字プログラムを書くのに使えると思います。プログラムへの書き出しもファンクションキー経由で簡単にできます。
プチコン本体のエディタは折り返し機能がないので長いリストを見辛いし、使用文字数も分からないためこのPETIT EDITORは活躍できるでしょう。
APPEND命令とは異なり自由な場所に挿入できるためよく使うルーチンをこのPETIT EDITORで書いてセーブしておけばプチコンのプログラム開発効率もアップするかもしれません。

2012年11月25日追加

PETIT EDITOR type B

 上記の通常版のPETIT EDITORはMEM$の編集に重点を置いたため「上書きモード」で入力し[DEL]で削除、[INS]で挿入となっていますが、これではプログラムを書いたりする場合にはやや使いづらいかと思います。
 そこで「挿入モード」で入力し[BS]で削除するPETIT EDITOR type Bを作りました。(わざわざ別バージョンにしたのは1画面に収めるため)

 PETIT EDITOR type B →  プログラムリスト / QRコード(ファイル名:OCHAEDTB)

 ボタン操作は通常版と比べて[Y]ボタンが[BS](カーソル前の1文字削除)へと変更となっています。(あと[DEL][INS]がない以外は通常版と同じ)

《 type Bの注意点 》
サイズが256文字に達している時は文字入力ができないので不要な文字を削除してください。
256文字目は[BS]では削除できないので一旦255文字目を削除した後に256文字目を入力してください。

↑TOP


このページは2012年11月以降に初公開した1画面プログラムを記載しています。
1画面プログラムのページ → 1page 2page プチコンオリンピック


RETURN/RETURN *MAIN

inserted by FC2 system