コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
おちゃめ ◆jH1opV6FnGyx
2018/9/23 23:42
新作QSP4本を公開します。
単体の公開キーは無いので今まで私が作ったQSPが入っている「おちゃめQSPコレクション」(2018年9月23日版)をダウンロードしてください。
公開キーは【 X33NQX86 】です。
フォルダ内の.MENUはQSPで作られたランチャーです。

コメント

アバター
おちゃめ 2018/9/23 23:44 ◆jH1opV6FnGyx
まずは、単体QSPの新作からです。

簡易水準器QSP type Bです。(ファイル名 1QQ_LVB)
以前作った簡易水準器QSPはプチコン3号のACCELの仕様上「表示が荒ぶる」という問題点がありました。
それを改善して水準器として使いやすくしたのがこの新バージョンです。
メーターが非常になめらかに動くので読み取りやすくなっているのが一目瞭然だと思います。
ただし、既存の標準バージョン(1GQ_LV)にあった角度計としても使える機能は削除されました。
標準バージョンとtype Bの自分に合った方を使ってみてください。

Bボタンで水平モードと垂直モードを切り替えることができます。
水平モードの時は白とピンクの横線が一致するように置けばより正確な傾きが分かります。
アバター
おちゃめ 2018/9/23 23:47 ◆jH1opV6FnGyx
続いてはOSもどき「簡易関数電卓QSP」のフルバージョン(1GQ_CALC)のアプリとして作ったQSPを3本紹介します。(※すでに簡易関数電卓QSPフルバージョンには組み込まれており、QSP単体では動作しません)
当然ながら簡易関数電卓QSPは(QSPにも関わらず)普通に関数電卓として使用ができます。(プチコン3号のすべての関数、演算子に対応しているため非常に高機能)

各アプリは基本的にYボタンを押すことで終了してシステムに戻ることができます。
今回の新作を含めてどのようなアプリが含まれているかを知りたい人は下記のページをご覧になってください。
http://ochameclub.web.fc2.com/petitcom3/soft/qsp.htm#calc
またプログラムリストに簡易説明書が含まれているのでそれをご覧になってください。

最初は、「方位磁針QSP」です。
単体動作する「簡易方位磁針QSP」(1QQ_HOUI)の移植版です。

これは簡易関数電卓QSP上でHOUI()と入力すれば起動できます。
本体を水平に持って太陽の方に向いてAボタンを押せばどちらが北かが分かります。
太陽の向きのみを利用しておよその方位を求めるため場所や時期によっては±10度くらいの誤差が出ますが8方位くらいならば全く問題ないし、16方位も概ね問題なく読み取ることが可能です。

簡易GPS QSP(1GQ_GSP)などを使って現在の緯度、経度を元に補正を行えばより正確な方位を割り出すことは可能です。
アバター
おちゃめ 2018/9/23 23:48 ◆jH1opV6FnGyx
次は、「連打ゲーム」と「歩数計」です。

単体動作する「簡易連射計測QSP」(1QQ_SWTC)と「簡易歩数計QSP」(1GQ_PEDO)の2つのQSPを大幅に簡略化することで2つで1つのQSPにしたものです。

連打ゲームは簡易関数電卓QSP上でRENDA()と入力すれば起動できます。
10秒間にAボタンが何回押せるかを計測します。
RENDA()+RENDA()+RENDA()のようにRENDA()を3つ足せば3回連続(30秒間)の計測が可能です。

歩数計は簡易関数電卓QSP上でHOSUU()と入力すれば起動できます。
スリープした状態では計測できないため本体を落とさないようにしっかり両手で持って普通に歩いてください。
独自のアルゴリズムによって本体はどの向きでもかなり正確に歩数を計測することができます。
アバター
おちゃめ 2018/9/23 23:48 ◆jH1opV6FnGyx
最後に2つの関数が入ったQSPです。

SOLVE()は一次方程式を解く関数です。
SOLVE("2*X-6=-4*X-2")のように式を""で囲って入力してください。
2Xのように乗算は省略できません。プチコン3号で普通に計算しているような書式で記述してください。
カッコが含まれても問題なく計算し、答えは「2/3」のように分数を使って表記します。(分母が100000を越える場合は小数表記)

PRIME()は指定した値以下の素数を表示する関数です。
例えばPRIME(20)とすれば2,3,5,7,11,13,17,19,と表示します。
Aボタンを押している間は表示が少しゆっくりになり、Bボタンを押している間はかなりゆっくりになります。
アバター
おちゃめ 2018/9/23 23:50 ◆jH1opV6FnGyx
一次方程式を解く仕組みを簡単に説明すると

f(x)=ax+bという一次式がある場合に
f(0)=b なのでbの値が求まり
f(1)=a+b なので、すでに分かっているbの値を代入することでaの値も求まります。
a、bの値が求まれば、x=-b/aとなります。

問題はf(0)、f(1)の値をどうやって求めるかということですが、それはこの簡易関数電卓には便利なEVAL関数があるので解決です。
これによって整理されてない括弧混じりの式であってもその式の値を求めることが可能です。
あとは、その答えをどうやって分数で表すかですが、これも便利なFRAC関数があるので解決です。
したがって、このプログラムのような極めて短いプログラムで答えを分数で表すことができる一次方程式を解くプログラムが作れます。

こんな感じで、簡易関数電卓QSP専用アプリを作ればあらかじめ用意されている関数(ライブラリ)を使うことで高度な計算や処理でも簡単に行うことが可能なのです。

アプリの作り方については「簡易関数電卓QSP単体バージョン」(1GQ_CALS)のプログラムに含まれている簡易説明書をご覧になってください。
フルバージョン(1GQ_CALC)に含まれる便利なAPI(自作命令、関数)を使えばより簡単に作ることができます。
アバター
しょうご 2018/9/24 0:01 ◆tpp2zBc4h8pI
OSPでここまでのツールを作れるのは凄いですね。
アバター
おちゃめ 2018/9/24 0:15 ◆jH1opV6FnGyx
しょうごさんへ

ありがとうございます。
おちゃめQSPコレクションに含まれるすべてのQSPの紹介は私のサイトの方で行っています。
興味があればご覧になってください。
http://ochameclub.web.fc2.com/petitcom3/soft/qsp.htm

簡易地球儀QSP(1GQ_GLB)とかPETIT PAINT 2 QSP(1GQ_PNT2)とかは私のお気に入り作品なのでぜひ見てください。
アバター
しょうご 2018/9/24 1:21 ◆tpp2zBc4h8pI
地球儀は大きさや絵を変えたりできるところが良いですね。QSPでここまでできるのは驚きました。サイトも見させていただきました。
アバター
おちゃめ 2018/9/24 13:16 ◆jH1opV6FnGyx
しょうごさんへ

簡易地球儀QSPも当初は地球儀の大きさを実行中に変えることはできませんでした。
それに現在よりも速度が4割くらい遅かったです。
改善に改善を重ねてようやく現在のものが完成しました。
QSPという限られた大きさのプログラムでも改善によって変えられるのは非常に楽しいです。

ちなみに簡易関数電卓QSPでアプリを作る方法をこちらのトピックスに書いたので興味があればご覧になってください。
http://petitverse.hosiken.jp/community/petitcom/topic/?read=703
アバター
しょうご 2018/9/24 14:33 ◆tpp2zBc4h8pI
QSPを使ってアプリを作れるのは良いですね。
今までQSPは簡易ツールやミニゲームのイメージがありましたが、これだけのプログラムでここまでできるとなると面白いですね。
アバター
こういち 2018/9/24 22:55 ◆ou0jbJnEJ0Kb
ボクの簡易関数電卓QSP対応QSP、そろそろ作り直さねば…。(実は簡易関数電卓QSP側のシステム変数とQSP側のローカル変数被ってたりする。)
アバター
おちゃめ 2018/9/24 23:09 ◆jH1opV6FnGyx
しょうごさんへ

QSPってかなり大きな制限だから「大した物は作れない」と考えがちなのですが、その制限の中でも限界まで作り込めばQSPとは思えないというものが作れてしまうから楽しいですよ。

こういちさんへ

簡易関数電卓QSP上で動作するアプリは、システム変数とダブる変数を使わないことを推奨していますが、ローカル変数であれば(システム変数を使ってやりとりするアプリでない限り)問題はないと思いますよ。
グローバル変数でダブっていたらアプリ終了時にシステムの方で誤動作の恐れがありますが。
アバター
30ドルのパン 2018/9/28 17:14 ◆JHCR47uH0NMR
ラーメンタイマーのボタン入力はどうすればできますか?
アバター
おちゃめ 2018/9/29 0:28 ◆jH1opV6FnGyx
30ドルのパンさんへ

プログラムリストの末尾にマニュアルがありますが、ABXYいずれかのボタンを押しながらL(もしくはR)ボタンを押せば時間設定ができます。

特殊なUIですが、十字ボタンで数値を大小させながら決定ボタンで時間を決めるという一般的なUIだと例えば「4分」を決めるのに最低4ステップの入力が必要となります。(起動時の数字が1だとすると2、3、4、決定の4ステップ)
しかし、私のUIだと慣れたら1ステップ(Xボタン+Lボタンの同時押し)で済むので瞬時に任意の時間設定ができるため一般的なUIのタイマーを使うのが馬鹿らしくなるくらいお手軽なのです。
操作に慣れない場合であってもXボタンを押しながらLボタンの2ステップでも一般的なUIよりも早く設定ができます。
2ステップの入力であればABXYボタンを離せばゼロに戻るため仮に「ボタンを押し間違えた」という場合であってももう1ステップ増えて合計3ステップになるだけなのでこれでも一般的なUIよりも早いです。
これが、ボタンを離してもゼロにならない仕様だったら押し間違いのペナルティが大きくなる(訂正ボタンが別途必要になる)ためこのUIのアドバンテージは大きいでしょう。
アバター
30ドルのパン 2018/9/29 1:38 ◆JHCR47uH0NMR
Aボタンで1、Bボタンで2、A+Bボタンで3。というプログラムを作るにはどうすればいいですか
アバター
おちゃめ 2018/9/29 7:38 ◆jH1opV6FnGyx
ラーメンタイマーQSPを見てのようにBUTTON()>>4でそのような動作が可能です。

WHILE 1
 PRINT BUTTON()>>4
 VSYNC
WEND

「>>4」とすることで4bit右シフト(R、L、Y、X、B、A、右、左、下、上というボタンにおいてAボタンの値を右に4つずらして上ボタンの値と同じ値にする)できるのです。
別の言い方で言えば、16で割って、整数化するという処理を行っています。
これだとXボタンは4、Yボタンは8、Lボタンは16、Rボタンは32になるので、「A、Bボタン以外は使えないようにしたい」というのであれば(BUTTON()AND 48)>>4でお望みの動作となります。

WHILE 1
 PRINT (BUTTON()AND 48)>>4
 VSYNC
WEND

48という値はAボタンとBボタンの値を足したもので、これをマスクすることでそれ以外のボタンを無効化できるのです。

コメントを書く

この投稿にはコメントできません。

- WEB PATIO -