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

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

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

SMILE BASIC 小技(3)

今回は、小技というよりも、よく使うコード。

様々な場面でボタンが押されるまで処理を止める、ということがある。
その時に使うのが次のコード。

'何かの処理...
BWAIT  'ボタンが押されるまで待つ
'次の処理
END

DEF BWAIT
'ボタンが押されていない→押される→離される、まで待つ
 WHILE BUTTON(0)!=0:WEND
 WHILE BUTTON(1)==0:VSYNC 1:WEND
 WHILE BUTTON(0)!=0:WEND
END

「何かの処理」の中でボタンを押している時に、そのままボタン押し待ちの処理に入ると、なぜかいきなり押されたことになることがある。
それを防ぐために、ボタンが押されていない→押される→離される、まで待つという処理をよく使う。
このBWAITの箇所は多くのプログラムで使うことになる。

サンプルプログラムでもMID$関数の代わりにA$[n]を使う記法は使われている

3号プログラミング覚え書き(3) 文字列編(http://d.hatena.ne.jp/eidaht/20150822/1440208747)で書いた、
「・特定の文字を取りたい時は、MID$だけでなく、A$[0]のような記法でも使える」
については、
「仕様上規定されていないので非推奨」と書いたけど、
サンプルプログラムでも使われているので大丈夫そう。
(例えば、SYS/STAFFROLLの中で使われいる。)

ドルアーガの塔 アドベンチャーシート for プチコン3号 (α版)

ドルアーガの塔 アドベンチャーシート for プチコン3号 (α版)

ほとんどが工事中のα(アルファ)版ですが、よければどうぞ。
ある程度のところまでは速攻でアップする予定です。

プロジェクト名: EDDRU

公開キー: 4D3J43K3 → 最新版はhttp://d.hatena.ne.jp/eidaht/20201231/1338118772からどうぞ

公開日: 2016/03/07

バージョン: 0.01


入力フォームができてないのでLINPUT文で代用してるので、文字入力はとっても使いづらい状態。とりあえず2,3日以内には入力フォームは作ります。
その後は、EDKANJIPNLを取り込んで漢字入力ができるようにしたいと思います。

★重要:スロット3へのオートセーブ
間違えて終了してプログラムの変数が消えてしまうと悲しいので、項目をどこか更新すると、数秒後にスロット3にオートセーブします。

EDDRUを起動時にスロット3にセーブデータがあればそれを読み込みます。したがって、プログラムを中断しても、再度STARTすると中断前の状態からはじまります。

起動時にスロット3にセーブデータがなければLOAD画面に移りファイルを指定します。キャンセルすると1巻の初期値が表示されます。

手動でファイルにセーブしたい時は、画面左下のファイルアイコンをタップしてセーブしてください。


★セーブ形式
テキストファイル(JSON形式)になっていますので、プログラム本体がバージョンアップしてもセーブ形式に互換性がなくなることはないようにしています。

SMILE BASIC 小技(2)

今回は結構実用的な技。

文字列を置き換えるSUBST$は、
SUBST$("文字列",開始位置,[文字数],"置換文字列")
として使う。

この時、置換文字列の長さ < 文字数 でも構わない。
これを使うと簡単に文字列の一部を削除できる。
具体的には、
SUBST$("文字列",削除開始位置,削除文字数,"")
とする。

例:

A$="ABCDEFG"
PRINT A$   'ABCDEFGと表示される
A$=SUBST$(A$,4,2,"")  '4の位置から2文字分を""で置き換える⇒削除
PRINT A$   'ABCDGと表示される

(追記)
OBONOさんのコメントを受けて試したところ、以下のようにもできることがわかりました。

A$="ABCDEFG"
PRINT A$   'ABCDEFGと表示される
A$=SUBST$(A$,4,0,"XYZ")  '4の位置から0文字分を"XYZ"で置き換える⇒挿入
PRINT A$   'ABCDXYZEFGと表示される

SMILE BASIC 小技(1)

覚え書きの文字列編でも書いた、文字変数に[]でアクセスすると任意の一文字を取り出せる技は、"でくくった文字列でも使える。

"文字列"[数字]

みたいに。
これを応用して、
"AB"[論理式]
のように書くと、
論理式が成立する時はBが、成立しない時はA
を取り出せる。

これを使ったカーソルの点滅の例:

VAR BLINK=0
WHILE 1
 LOCATE 0,CSRY
 PRINT "■_"[BLINK<30]  'BLINKが30未満の時は_を、30以上の時は■を表示
 BLINK=(BLINK+1) MOD 60
 VSYNC 1
WEND

漢字入力パネルEDKANJIPNL

漢字入力パネル。
(2016/10/29)変換結果をF1キーとクリップボードの両方に出力するようにした。また、LorR+Aキーで即終了かつクリップボード出力だけにした。
(2016/03/16)操作ガイドを付けました。辞書内に簡易ヘルプ(「へるぷ」を変換)を追加。他のプログラムに組み込みしやすい構造に修正。小さなバグを修正。
(2016/03/02)ローマ字の子音字にnpyとnbyを追加。モード毎にカーソルの色が変わるようにしました。
(2016/02/28)候補入力中にXボタンを押すとカタカナに変換するようにしました。また、ローマ字の子音字にVを追加しました(プチコン標準ではひらがなの「う゛」は表示されません。カタカナの「ヴ」はあります)。
(2016/02/24)ローマ字入力に対応しました!

ファイル名: EDKANJIPNL

公開キー: SE2452QV B25QV344
QR45S45D E283533E 73E3ED3Y

公開日: 2016/10/29 2016/03/16
2016/01/30 2016/02/24 2016/02/28 2016/03/02

バージョン: 0.10 0.09
0.01 0.04 0.05 0.06


すでに何人かの方が日本語入力環境を作られていますが、軽く使えることを主眼にして漢字入力プログラムを作りました。
元はSYS/KANJITBLの入力ヘルパーだったのが、結局、辞書型IMEに近いかたちになりました。
辞書は、りゅうまごさんの_JDATAをベースにさせていただきました。ここに感謝いたします。


【特徴】
・起動の速さを重視した作り
・1ファイル完結、外部ファイル読込なし
 (スマイルツールから起動すると、SLOT 0〜3を汚さない)
・タッチ操作とボタン入力を併用でき、タッチだけでもほぼ操作可能
・入力した結果はF1キーに登録される
・単語登録などのユーザーフレンドリーな機能はない
・変換時に常に最長一致する候補のみを表示するので、変換に融通がきかない

などなど。

欠点も数多いですが、起動の速さを生かして割り切って使うのが吉です。
長文の入力などには向かないので、他の日本語入力プログラムを使いましょう。
他の日本語入力プログラムの情報はここです。
http://d.hatena.ne.jp/eidaht/20150811/1439295090

【使い方】
大体は、普通の日本語IMEと同じです。
キーボードのかな、またはローマ字入力で、読み仮名を入力した後、変換(Aボタンorスペースキー)を実行すると、候補が表示されます。
候補を十字ボタンで選んで、Aボタンで確定です。
すべて確定済の状態でAボタンを押すと、テキスト確認ダイアログが出るので、さらにAボタンを押すと、F1キーに入力した文字列が登録されます。

ボタンの機能
X:モード切替
Y:一文字後退/候補入力中はカタカナに変換
A:変換/確定
B:無変換/戻る/テキスト確認

タッチ操作< > _ / = 左 右 下 上 に読み換え
SPACE = 右 に読み換え
? = Xボタンに読み換え
← = Yボタンに読み換え
ENTER = Aボタンに読み換え
UNDO = Bボタンに読み換え

候補選択中にXボタンを押すと、ダイアログモードに入ります。
ダイアログモードではキーリピートが効きませんが、下画面ダイアログの大きなフォントで文字を確認しながら候補を選択できます。

【その他のTIPS】
・「へるぷ」と入力して変換すると、簡易ヘルプが表示されます。
・「くれじっと」と入力して変換すると、クレジットが表示されます。
候補選択時に下画面の上部をタッチすると、およそのX座標が合う箇所の候補が選択できます。

EDSMILE補足

現状のEDSMILEは設定ファイルをエディタで書き換えないといけなくて、まだ使いやすいとは言えないけど、将来的にはGUI上で設定を変更できるようにする予定。
でもまだ、ファイル操作関連とか先にできてほしいことが多くあるので、GUIで設定できるようにするのはまだ先だと思います。

スマイルボタンに登録して使う便利ツールEDSMILE Ver1.50

■Ver1.50にアップデート!(2016/10/30)

スマイルボタンに登録して使う便利ツール。
るるるきゅーさんのツールに比べると画面がすごい地味(^^;)だけど一応公開。

f:id:eidaht:20161023013612j:plainスクショはVer1.40です。

ファイル名: EDSMILE

公開キー: 7S3EW3H4
ED3EN23E BE84VK4E 5K333KKE QRX3KX13 L2DV33K4

公開日: 2016/10/30
2014/12/06 2015/01/11 2015/01/12 2016/02/07 2016/10/22

バージョン: 1.50
1.00 1.10 1.11 1.30 1.40

【使い方】
■準備
自分の普段使うプロジェクトフォルダにこのファイルをコピーしておいてください。
スマイルボタンから呼ばれるプログラムに設定してください。

十字キーの右またはAボタンが「決定」、十字キーの左またはBボタンが「戻る」、になっています。

スロットを選んで「決定」するとSAVE、EXEC等のサブメニューが出るので機能を選んで「決定」で各種機能を実行できます。

最も使う操作は、編集中のプログラムの保存です。
スロットを選んで右→右とすると、SAVEできます。

プチコン3号のバージョン3.2からSAVE/LOADが簡単になったので、それ以外のことを便利にできるように方針が変わりました。(SAVE/LOADも相変わらずできます。)
それに伴い、メニューの先頭をSAVEでなく、EXECにしました。

すべての操作は、ボタンとタッチの両方に対応しています。

タッチ操作の場合、サブメニューはタッチを離した時のメニューが実行されます。
サブメニューより左にドラッグするか、サブメニューの外をタップで「戻る」となります。

画面左下のEXCMDは拡張メニューで、Yボタンかタッチで呼び出せます。
プログラムソースの@EXCMDの箇所にメニューと処理を追加すると、拡張メニューを簡単に追加できます。

■履歴
(Ver1.50での追加・変更点) 2016/10/30追記
・ボタンを離してから終了するようにした
・ツール起動時にACLSとBGMSTOPを実行できるようにした(EDSMILE.CFGファイルで設定)
・リストボックスでLorRを押しながら上下でページ送りするようにした

(Ver1.40での追加・変更点) 2016/10/22追記
・スロットのメニューにDEFJUMPを追加し、DEFおよび@ラベルへジャンプできるようにした

(Ver1.30での追加・変更点) 2016/02/07追記
・CONFIGファイルでスタートアップファイルを指定できるようにした
・CONFIGファイルでファンクションキー定義を5セットまで登録し、ツール中で呼び出してまとめて変更できるようした
・プロジェクト切り替えの入力補助を追加
・設定ファイル(EDSMILE.CFG)がない場合、起動時に作成を促されるようにした
・スロットメニューの順番を変更
・上下キーでスロットとお気に入りの間を移動できるようにした

(Ver1.10の追加機能) 2015/01/11追記
・SBSMILEへのリンクを追加
・タッチでEXITできるようにした
・お気に入り機能(簡易ランチャー)の追加

■プロジェクト切り替えの入力補助機能
デフォルトプロジェクトの切り替えを支援する機能です。以下の手順で操作してください。
(1)EXCMDのSETPROJECTを選びます。
(2)プロジェクト一覧からプロジェクト名を選んでください。
(3)ファンクションキー1に「PROJECT "プロジェクト名"」が登録されます。
(4)DIRECTモードにしてファンクションキー1をタッチすると、プロジェクトが切り替わります。

■スタートアップ機能の概要
設定ファイル(EDSMILE.CFG)に設定しておくことで、スロットが空の時に限り読み込むファイルを指定できます。
プチコン3号を起動した際にいつも使うファイルの読み込みに使うことができます。
また、EDSMILE起動の都度設定しなおすファンクションキー定義も決めておくことができます。
(EDSMILE起動毎に毎回設定されなおすので、以下のファンクションキー定義機能を使う場合は指定しない方がよいでしょう。)
設定ファイルの設定の仕方は、後述の「設定ファイルEDSMILE.CFGについて」をご覧ください。

■ファンクションキー定義機能の概要
スタートアップのファンクションキー定義とは別に、5セットまでのファンクションキー定義を登録しておき、EXCMDのFKEYから定義を呼び出すことができます。
この機能を使う場合は、スタートアップのファンクションキー定義は指定しないことをおすすめします。
設定ファイルの設定の仕方は、後述の「設定ファイルEDSMILE.CFGについて」をご覧ください。

■お気に入り機能(簡易ランチャー)の概要
EDSMILE.CFGという設定ファイルを置くと、そこから設定を読み込み、お気に入りを5つまで表示してくれます。
お気に入りは、タッチでそのファイルを即実行してくれます。
またはEXCMDのサブメニューからFAVORITEを選ぶと、カーソルがお気に入りに移動するので、選択して「決定」でも実行できます。
設定ファイルの設定の仕方は、後述の「設定ファイルEDSMILE.CFGについて」をご覧ください。

※注意:お気に入りの実行は、スマイルツールが実行されるスロット4で実行されますが、スロット4ではCOMMON DEFを含むプログラムは実行できないという制限があります。
お気に入り実行時にエラーになる場合は、実行先のプログラムにCOMMON DEFが含まれていないかを確認してください。


■設定ファイルEDSMILE.CFGについて

◆EDSMILE.CFGの作成
初回起動時にEDSMILE.CFGがない場合、作成するように促されますので、以下の手順に作成してください。

(1)EDSMILE.CFGがみつからない旨のダイアログが表示されますので「了解」をタッチします。
(2)EDSMILE.CFGのひな形をつくるか聞いてくるので「はい」をタッチします。
(3)するとファイル書き込みの確認が表示されるので「はい」をタッチします。
(4)書き込み完了の表示に対して「了解」をタッチします。
(5)EDSMILE.CFGをスロット3にロードするか尋ねてくるので「はい」をタッチします。
(6)スロット3を編集してお気に入りを追加してください。
(プロジェクト名を省略すると、EDSMILEの起動プロジェクト内を検索しますので、EDSMILEとは別のプロジェクトに置かれているファイルをお気に入りとして使いたい場合は、「プロジェクト名/ファイル名」のように指定してください。)
(7)スロット3をSAVEしてください。(スロット3の内容ではなく、EDSMILE.CFGファイルを読み込むため、SAVEしないと反映されません。)

◆EDSMILE.CFGの構成
EDSMILE.CFGの構成は以下のようになっています。
なお、#ではじまる行はコメント行です。コメント行は無視されます。

[STARTUP]
# スタートアップ
SLOT0=
SLOT1=
SLOT2=
SLOT3=
KEY1=
KEY2=
KEY3=
KEY4=
KEY5=
CLS=ACLS
BGMSTOP=ON

[FUNCKEY]
# ファンクションキー
FKEY11=FILES 
FKEY12=LOAD "
FKEY13=SAVE "
FKEY14=LIST ERR\n
FKEY15=RUN 

[FAVORITE]
# おきにいり
EDSMILE セーブ/ロードをかんたんにするツール

◆スタートアップの設定方法
[STARTUP] というセクション宣言を入れておいてください。
SLOT1=EDSMILE
のように記述するとそのスロットが空の時に限り、指定したファイルをスロットに読み込みます。
「SYS/SBSMILE」のように、「プロジェクト名/ファイル名」の形式でも指定できます。
また、
KEY1=ACLS
のように記述するとファンクションキーの割り当てを行います。(EDSMILEの起動の都度)
CLS=ACLS に設定しておくと、起動時にACLSを実行します。(GCLSにするとGCLSを実行します。)
BGMSTOP=ON に設定しておくと、起動時にBGMSTOPを実行します。

◆ファンクションキーの設定方法
[FUNCKEY] というセクション宣言を入れておいてください。
FKEY23=PROJECT "
のように記述しておくと、EXCMDのFKEYコマンドで、ファンクションキーの定義セットを呼び出すことができます。
ファンクションキーの定義セットは5セットまで登録可能です。
FKEYxxのxxの最初の数字はセット番号、2つめの数字はファンクションキーの番号を表します。
例えば、FKEY23は、セット番号2のファンクションキー3番を表します。

◆お気に入りの設定方法
[FAVORITE] というセクション宣言を入れておいてください。
「ファイル名 ファイルの説明」のように書いておくと、お気に入りには改行して説明も表示してくれます(ただし19文字まで)。

また、ファイル名にはプロジェクト名も含めることができ、その場合は「プロジェクト名/ファイル名」のように「/」で区切ってください。

[FAVORITE]
TOOLS/EDSMILE セーブ/ロードをかんたんにするツール

のように記述も有効です。