楽屋裏 - fx-5800P のPCデータリンク

楽 屋 裏
e-Gadget


2016/12/18

以前の記事 fx-5800P プログラムのバックアップ のコメントで、通信フォーマットや中間コードの解析に話がふくらみました。

最後にコメントされた AkSd様が、ご自身で主催されている 関数電卓ファン掲示板 で、fx-5800P のデータ通信の解析の状況をアップされています。

腕に覚えのある方々が参加され、具体的に実施した実験的な取り組みの結果などの情報交換が進んでいます。

そして、データをPCに取り込む(まだ一方通行ですが)目処がたった模様...(゜Д゜)

fx-5800P 最大の欠点である、プログラムのバックアップの問題に光が見えたようで、凄いことになっています。

この分野がお得意な方は、是非ご覧になってはどうでしょうか?






応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 







keywords: プログラム関数電卓、fx-5800P、データリンク

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

楽屋裏 - 複利計算プログラム

楽 屋 裏
e-Gadget


2016/06/24


久しぶり(14ヶ月ぶり)に、fx-5800P でプログラムを作りました。
ここのところ、fx-9860GII の 純正Casio Basic や アドイン版 Casio Basic - C.Basic ばかり触っていました。

ところで、今は第24回参議院議員通常選挙のまっただ中です。どうも今の日本は大変革の時代に入っているような気がしています。世界が大変革を始めているからです。折しも、今日 Breixit 問題でイギリスの国民投票の結果がEU離脱となりました。

日本では、なんたって選挙権が18歳まで下げられたのは大きなことでしょうね。スマホ世代の投票行動は、新聞やテレビからしか情報を得ていない人たちとは、多分違うんじゃないでしょうか?

国の安全保障も、これまでの常識が通用しなくなって、これまでと一緒でいいのか?という雰囲気だし、20年以上低迷してきた経済がなんとか上向いてくれそうな感じもしています。

例えば、長期金利がどんどん下がってきて、ついに0.2%を下回っている状況です。おかげでローン金利も下がってきていますね。特に、長期プライムレート連動型の住宅ローンなどは、金利分の返済額が減ってくれるので、とても有り難いわけですね。

...ということで、ローンの借り換えのチャンスかも知れませんし、家を買うチャンスかも知れません。fx-5800P を持っている知り合いがローンを組むことになって、色々な銀行の検討をしているので、複利計算プログラムを作ってあげました。

単純な複利計算のみのプログラムですが、銀行が出してくる実質金利による計算結果とそれほど違わないので、喜んでくれています。こういうのって、うれしいですよね!

このプログラムをネタに Casio Basic入門51 をアップしました(^^;


fx-5800P は日常の文房具として使いやすいと、改めて感じています。プログラムを作れば自分で自由にカスタマイズできる文房具ですから、楽しいですよね!


ただ、作った複利計算プログラムで大きな金額、例えば7桁とか8桁の数字は3桁区切りが無いと、本当に分かりにくいものです。これをなんとかしたいと、今思っています。





応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: fx-9860GII、CasioBasicプログラム関数電卓コメントアウトバグ

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

楽屋裏 - プログラム電卓ユーザー の傾向 [2016/05/15]

楽屋裏 - プログラム電卓投票
e-Gadget


2016/05/15



本ブログに来られる方々のプログラム電卓の使い方などを投票して頂いています。

楽屋裏 - プログラム電卓投票

今日の段階での結果を見ると、有る傾向が見えてきます。

先ずは、それぞれの質問の結果を見てみましょう。
なお、投票結果は皆様もご覧頂けます。




投票01
プログラム電卓の中から、お気に入りの機種や欲しい機種を教えてください。

【投票状況】 2016/05/15
好き&欲しい電卓_0160515 
fx-5800P が圧倒的な人気で、次に fx-9860GII が他に大きな差を付けて2位になっています。
コメント欄を見ると、fx-5800P は小型、安い、使いやすいことがその理由。そして、fx-9860GII は fx-5800P との比較対象になっていることも分かります。


投票02
プログラム電卓でのプログラム作成と利用について教えてください。なお機種名をコメント欄に記入してください(必須)。

【投票状況】 2016/05/15
プログラム利用_20150515 
自作プログラムを使うために、プログラム電卓を使っていることがハッキリと現れています。


投票03
プログラミング経験について教えてください。なおその時に使用した言語名をコメント欄に記入してください (必須)。

【投票状況】 2016/05/15
プログラム経験_20160515 
新しい設問のため投票数がまだ少ないのですが、現状では、全員がPCでのプログラミング経験があることを示しています。




個別の結果を合わせて見ると、当ブログにお越しになって、さらに投票をしてくださった方の傾向は、かなり明確です。

”PCでのプログラミング経験がある人が、自身の目的のために、自作プログラムを使っていて、グラフィックスは重要視されていない”


ここまでハッキリとした傾向が出るとは思いませんでした。


さて、国内に限って言えば、FX-502P、FX-602P そして FX-603P の言語がほぼ互換であって、極めて長い期間市場の支持を得てきました。FX-502P が登場した時は、ポケコンが登場する前で、FX-603P の販売が終了した時には、ポケコンは市場からほぼ姿を消していました。これほど長い期間支持を得ていたのは、プログラミング言語の互換性が維持されていたことが最大の要因だと考えています。

FX-603P の後に登場したプログラム関数電卓が、新世代 Casio Basic を搭載した fx-5800P で、グラフ関数電卓にも互換性の高い新世代 Casio Basic が搭載されています。今後、新世代 Casio Basic 搭載機の高い互換性が維持されるなら、プラットフォームとしての地位が確立されてくると思います。





各機種の価格については、Casio プログラム電卓の価格動向 をご参考に...

投票の項目にあるカシオの機種について...
fx-5800P は、構造化プログラミング可能な新世代Casio Basic搭載機のなかでは、一番低コストで入手可能な機種。

但し、プロセッサは最も遅く、Casio Basicの機能も他の機種よりも制限されている。

高速動作や多くのメモリが必要な本格ゲームを作るのでなければ、構造化プログラミングができるだけの実力があり、実用プログラムやゲームも作れる(当ブログで紹介している)。

関数電卓としては、現行プログラム電卓では最も使いやすい(と思う)。小型軽量な点も良い。

PCリンク機能はない。



fx-9860GII には、マイナーバージョンが2つある;
・初期型が SH3プロセッサを搭載
・後期型が SH4Aプロセッサを搭載

投票項目は、これらを区別している;
・初期型: fx-9860GII
・後期型: fx-9860GII 2

これらの違いは、液晶画面下の表記でわかる;
・初期型 (fx-9860GII)  : USB GRAPHIC
・後期型 (fx-9860GII 2) : USB GRAPHIC 2

現行プログラム電卓の中では、Ftune2 でオーバークロックすると最も高速になる隠れた高性能機。

Casio Basic 以外にアドインプログラムを走らせることができる。アドインは自分で作ることも可能。

PCリンク機能を備える。

fx-CG20 / CG10 (北米専用)は、高精細カラー液晶を搭載しているので、表現力の高いプログラムを作れる。

但し、Ptune (Ptune についても簡単に触れている)によるオーバークロックをしても、fx-9860GII ほどに高速化できない。

Casio Basic以外にもアドインプログラムを走らせることができる。自分でアドインを作ることも可能。

PCリンク機能を備える。







fx-FD10 Pro のハードウェア内部は fx-9860GII に近い。但し Casio Basic専用機で、fx-5800P の高機能機種の位置づけと言える。

アドインプログラムを走らせることはできない。

関数電卓として使う場合は、関数キーが少ないので2ステップやメニューからの選択と手数が増える。

一方、プログラム電卓としては、fx-5800P に近い使いやすさが考慮されている。

PCリンク機能を備えるだけでなくSDカードも使える。










応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: プログラム関数電卓
リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

プログラミング経験者の Casio Basic

楽 屋 裏
e-Gadget


2016/05/07

メールやコメントでご質問やご意見を頂く読者の中には様々な方がいらっしゃいますが、殆どがプログラミング経験者で、小学生から80歳台の方までいらっしゃいます。

若い方では、色々な言語でのプログラミングをやっておられるケースが多く見受けられ、Casio Basic と他の言語間でのプログラムの移植、そしてCasioプログラム電卓間の移植にトライされるケースが多く見受けられます。

ある年齢以上の方は、N88 BASIC 経験をお持ちのケースが多いという傾向もあります。文面から推察するに、1980年代から1990年代に電卓やポケコンでのプログラミングも経験なさっているようです。

わざわざメールやコメントを頂くには、それ相応のお考えや勇気が必要だろうと思います。
こんな私に、ご連絡を下さった方には、深くお礼を申し上げます。

若い頃はある程度プログラミングをやったが、最近は全く遠ざかっていて、久しぶりにプログラムを電卓で作ってみるか...というのは、実は私も全く同じなのです。

=====

ごく最近のことですが、fx-5800P でのプログラミングに興味を持ったと同時にこのブログを始めました。そして2年半が経った現在、私の Casio Basic の知識と経験はかなり深くなったと僭越ながら思います。また、そのように応援してくださる読者の方もいらっしゃいます。

これまでは、自分自身が Casio Basic 初心者だったので、少し広く考えてプログラミング初心者を意識した記事を多く書いてきました。これからもプログラミング初心者を意識した記事は続けようとは思います。

一方で、プログラミング経験があるものの、中断時期を経て久しぶりに電卓でプログラムを書こうという方向け、つまり私が Casio Basic でプログラミングを始めた時に本当に欲しかったと思うレベルの情報が、当ブログにまとめられているかと言えば、必ずしもそうではないと思っています。

自分と同じような方が、読者の中で、そしてわざわざご連絡を下さる方の中にそれなりにいらっしゃるという事実も私を後押ししてくれ、Casio Basic の辞書のようなものを作ろうと思っています。

それが、最近始めた インサイド Casio Basic プロジェクト です。

これまでの Casio Basic 探索の結果は、意外にも海外のサイトにもまとめたものが無いようなので、海外発信用に英語版も作ってゆきます。但し、私の個人的な理由によりますが、英語版を先に作ってそれを和訳した方がうまくゆきます (私はバイリンガルではないので、頭を英語に切り換えて作文しないとうまく書けません。それをネイティブの日本語に翻訳するのは楽です)。

従って英語版が先行してしまうことは、どうかご容赦ください。



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 




keywords: fx-9860GII、CasioBasicプログラム関数電卓コメントアウトバグ

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

楽屋裏 - Casio Basic コメントアウト ' のバグ

楽 屋 裏
e-Gadget

追記 2015/07/15
追記 2016/04/09

Casio Basic のコメントアウト ' のバグ報告です。

※ [2016/04/09: カシオの対応を確認]

※ [2015/07/15: カシオに問い合わせた結果を追記]


バグが確認されているのは、以下の機種とOSバージョンです。
  • fx-9860G OS 1.04
  • fx-9860GII OS 2.04 
  • fx-CG20 / fx-CG10 OS2.00
fx-5800P には、コメントアウト機能が無いので、対象外です。


先ず最初に、以下をそれぞれ実行すると、問題ありません。

Locate 1,1,"Line:1"

Text 1,1,"Line:1"

"Line:1"



次に、それぞれをコメントアウトして実行すると、エラーになります。

'Locate 1,1,"Line:1"

'Text 1,1,"Line:1"

'"Line:1"


一方、以下のように区切りコード := に変えれば、コメントアウトしてもエラーになりません。

'Locate 1,1,"Line=1"

'Text 1,1,"Line=1"

"Line=1"


さて、コメントアウト '  について、fx-9860GII OS 2.04 の取扱説明書には、以下のように説明されています。

' (コメント文指定)
機能 : プログラム中にコメント文を挿入します。
解説 : 行の先頭に ' を入力した行はコメント文として扱われ、実行時には無視されます。

仕様通りの動作ではなさそうです。

==========


ここで、1つ前の OS 2.01 でのバグが思い出されます。

Casio Basic のバージョンとバグ

Locate 1,1,"Line:1"

で、エラーになったバグです。" " で囲まれる文字列の中に、区切りコード : が含まれることで、バグが発生しました。字句解析に失敗していたと考えられます。

なお、この OS バージョンでは、旧来の出力命令 " " では、バグが発生していません。例えば、

"Line:1"

はバグになりませんでした。

なお、このバグは、最新の OS バージョンでは解消されていることが分かっています。

==========


現状では、解消したかに見える区切りコード : の字句解析のバグが、コメントアウト ' が絡むと解消されていないようです。

区切りコード : は、fx-9860GII OS2.04 の取扱説明書では、以下のように説明されています。

: (区切りコード)
機能 : 2つの文を結合し、途中で停止せずに、連続して実行します。
解説 : 
・出力コマンド(◢) と異なり、区切りコードで結合した文は途中停止せずに実行されます。
・区切りコードは2つの計算式や2つのコマンドを結合するために使われます。
・区切りコードの代わりに、 (キャリッジリターン)を使うこともできます。


字句解析において、区切りコードが (キャリッジリターン)として認識されているとすると、ここで  記号を使って表現すると、

'Locate 1,1,"Line:1"↵

は、

'Locate 1,1,"Line↵
1"↵


と同じことになり、2行目でエラーになるのは当然です。

ならば、このエラーを解消するには、2行目の最初に ' を追加してコメント文にすれば良いはずです。

'Locate 1,1,"Line↵
'1"↵


これはエラーになりません。それなら、区切りコードを使って元の1行に戻して、

'Locate 1,1,"Line:'1"↵

とすると、エラーにならないことが確認できました。


これで、 ' でコメントアウトされた行の字句解析において、区切りコード : (キャリッジリターン)と解釈してしまっていることが分かります。

==========


結果として、Casio Basic で、 ' でコメントアウトする行に 区切りコード : が含まれると発生するエラーは、面倒でも区切りコードの直後にもう一つ ' を入れることで、対処できることが分かりました。


他のグラフ関数電卓での状況について、情報をお寄せ頂ければ幸いです。
[2015/07/07 追記]
sentaro様からコメント欄で情報をお寄せ頂きました。バグ発生が確認された機種とOSバージョンは記事冒頭に追記しました。


ところで、コメントアウトの入力ですが、[SHIFT] [4] (CATALOG) から、延々と探して入力しています。もっと楽に入力できる方法があれば、教えて頂けませんか?

 ⇒ sentaro様から情報を頂きました。コメント欄にも書いたように、これが使えないと私が思い込んでいましたが間違っていました。

[2015/07/07 追記]
プログラムの編集画面に入った時の状態で、
[F6] (CHAR) [F2] (SYBL) [▶] [▶] [▶] [▶] [▶] [▶] (右矢印6回) で ' を選び、[EXE]


[2015/07/15 追記]
本件、カシオに問い合わせをし、回答を頂きました。
これは、取扱説明書のバグとのことで、次回のバージョンアップで対処するとのことです。

「コメントアウト ' を行頭に付けると、行頭から 区切りコード : 、キャリッジリターン 、出力命令  までをコメント文として扱う」のが仕様であって、次回のバージョンアップ時に下記のように取扱説明書の記載を改訂するとのことです。

【現在の取扱説明書の記載】

 解説:行の先頭に ’ を入力した行はコメント文として扱われ、

 実行時には無視されます。

   ↓

【改訂後の取扱説明書の記載】

 解説:行の先頭に ’ を入力した行は

  :(区切りコード) (キャリッジリターン) ▲(出力コマンド)

 までをコメント文として扱われ、実行時には無視されます。


なお、コメントアウトする場合は、その行にある 区切りコード : 、キャリッジリターン 、出力命令  の直後に ' を入れるのは、正しい対策とのことです。

問い合わせをしてから比較的時間がかかりましたが、取扱説明書の記載の改訂という、結論に至るまでの時間と考えれば、納得です。いつもように真摯な対応でした。


[2016/0409 追記]
本件に関するカシオの見解は、コメントアウトの動作は仕様通りで、むしろ取扱説明書のバグ で、次の取扱説明書の改訂時に修正するとのことでした。

fx-9860GII (バージョン 2.09) ソフトウェア取扱説明書

カシオのサイトで、ソフトウェア取り扱説明書が改訂され バージョン 2.09 になっており、そこでコメントアウトの機能説明が修正されていることが確認されました。



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 




keywords: fx-9860GII、CasioBasicプログラム関数電卓コメントアウトバグ

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

楽屋裏 - Inseide Casio Basic Project

楽屋裏 - Inside Casio Basic
e-Gadget


2015/08/24


これまでに Casio Basic の探索を行ってその結果を幾つかの方法で公開してきていますが、分かる人には冗長に過ぎる感じがしていました。

カシオのプログラム電卓の取扱説明書は、プログラミングに関しては簡易過ぎる説明しかありませが、fx-5800P のテキストベースのコマンド類は一般のBasic に非常に近い仕様なので、プログラミング経験が理解の助けになります。

一方、fx-9860GII のグラフィックス関連のコマンドについては、多くの重要な仕様について説明が一切無く、プログラミングに慣れた人でも知らなければ仕様なのかバグなのか判別に苦しむような独特の仕様が多くあることが分かってきました。さらに、取扱説明書に記載されている内容も、恐らく古い機種のものを引きずっていて、改訂が必要と思われる内容があります。

そこで、fx-9860GII に fx-5800P を加えて、これらを対応機種として、Casio Basic の仕様を、簡潔かつ網羅的にまとめた辞書のようなものを作ろうと思いました。

もし既にあれば私が作る必要も無いのですが、私の知る範囲では国内はおろか、海外の英語コンテンツにも見当たりません。そこでどうせ作るのなら、世界に広く発信できるように英語で作成し、並行して日本語版も作る作戦にして、Inside Casio Basic Project と呼ぶことにしました。


先ずは、e-Gadget 内で少しづつ作り始めています;

⇒ English Edition: Inside Casio Basic

⇒ 日本語版: インサイドCasio Basic


内容の正確さや記述のわかりやすさなどを考えて、最初はコロコロと変更があると思います。英語版作成など無謀なのは承知の上での試みです。なので、じっくり、ゆっくりと進めることになると思います。


生暖かいご支援(笑)を御願いします。



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ





keywords: プログラム関数電卓、fx-5800P、fx-9860GII、Casio Basic

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

楽屋裏 - Casio Basicコマンド解説の修正履歴

楽屋裏 - 修正履歴
e-Gadget


2015/08/14

Casio Basic の探索を行ってきています。fx-58000P 搭載のコマンド類については、意外に苦労が少なかったのですが、fx-9860GII の、特にグラフィックス関係が結構手強いのです。まぁだから面白いのですが...

つい最近、fx-9860GII OS 2.04 Casio Basic のコマンドの理解に勘違いが見つかって、慌てて修正しています。全ての記事への修正に漏れがあってはいけませんが、気付かずに修正が遅れることもありそうです。(日本語の記述の問題は、また別の問題として...)

そこで、今後は Casio Basic に関して、何か勘違いしていたことに気づき、間違った記述内容を修正する時には、必ずこのエントリーにまとめておくことにします。



Cls
2015/07/29
: fx-9860GII では、グラフィックス画面の消去を行う。但しグラフィックス設定の変更を行わない点で、ClrGraphとは異なる。
: fx-9860GII で、グラフィックス画面とテキスト画面の両方の消去を行うとしていたが、テキスト画面の消去を行うとした点が誤り。

備考: fx-5800P Casio Basic については、誤りなく修正不要。

修正した記事:
- Casio Basic入門G02
- Casio Basic入門G03
 

ViewWindow 0,126,0,0,62,0
2015/08/15
: この設定にすると、ピクセル1個と座標値1が対応して、グラフィックス描画が分かりやすくなる
: ピクセル1個と座標値1が対応して、分かりやすくなる設定に ViewWindow 0,126,0,0,63,0 とした

修正した記事:
- Casio Basic入門G01





応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: プログラム関数電卓、fx-5800P、fx-9860GII、Casio Basic

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

楽屋裏 - 虫の軌跡 (Bug Trace)

楽 屋 裏 - Bug Trace
e-Gadget

更新 2015/08/14

虫の閉じ込め (Bug Trap) ゲーム - を作ったのですが、動く虫 (=点) を fx-9860GII の応答の遅いLCDではどうも視認性が悪く、もっと面白く遊べないかものかと、思いながらプログラムを色々と実行してみていました。⇒ 視認性向上したバージョンを追加しています。

虫を閉じ込めるには、たった3つのピクセルを以下のように並べるだけで良いこととも分かってきて、シンプルを追求する場合は、あまり発展性がない感じです。なお、視認性が向上したので、複雑で面白い形状を追求する楽しみが増えました。



BugTrap-Pict17 
⇒ ダウンロード: PICT17



一方で、以下のパターンで本当に繰り返しが無いのか、疑問に思えてきました。

BugTrap-Pict19 
⇒ ダウンロード: PICT19



そこで、プログラム BugTrap を改造して、虫の軌跡を残すように変更しました。軌跡を追跡するので プログラム名は Bug Trace です。

改造といっても、プログラム BUGTRAP の以下の赤文字で示した1行を消すだけです。あとはそのままなので、操作方法は全く同じです。捜査方法については 虫の閉じ込め (Bug Trap) を参照してください。

なお、BUGTRAP では外枠を F-Line で描いていたのを、HorizontalVertical に置き換えました。この方が初期描画が速くなります。
※ 実は、F-Line で描画していたのは、描画方向をコントロールしたくて、時計回りに外枠を描画していたのは、お気づきでしょうか?グラフィックスプログラムならではの小さなこだわりでした。


プログラム

ファイル名: BUGTRACE
'==Initialize==
ClrGraph
CoordOn
GridOff
AxesOff
LabelOff
ViewWindow 0,126,0,0,62,0

'==Draw frame==
S-L-Normal
Horizontal 0
Vertical 126
Horizontal 62
Vertical 0


'==Paint mode==
Text 7,3,"EXE/→/↑/←/↓: Draw Wall
Text 13,3,"DEL: Go!"
63→X:31→Y
While 1
While Getkey
WhileEnd
Do
Getkey→K
Text 13,3,"DEL: Go!"
LpWhile K=0 Or K=47
K=44⇒Break
If K=31 Or K=68
Then

Text 13,3,"    " '8 spaces
Plot X,Y◢
Line
IfEnd
WhileEnd
Text 7,3,"             " '25 spaces
Text 13,3,"    " '8 spaces
StoPict 15

'==Draw dot==
62→B:2→A:-1→D:1→C
PxlOn B,A

'==Move dot==
While 1

'✶Set direction
If B=1 Or B=63
Then (-1)D→D
Else If A=1 Or A=126
Then (-1)C→C
Else
PxlTest(B+D,A)⇒(-1)D→D
PxlTest(B,A+C)⇒(-1)D→C
IfEnd:IfEnd

'✶Plot dot
PxlOff B,A   ← 削 除
B+D→B:A+C→A
PxlOn B,A

Getkey=47⇒Break
WhileEnd

'==Normal end
StoPict 16
ClrText
Locate 9,5,"bye!"

⇒ ダウンロード:Casio Basic プログラム BugTrace  [最終 2015/08/14 12:00]

[2015/08/13 追記]
障害物を置いた時の画面コピーを PICT15 に、最終的な軌跡の画面コピーを PICT16 に自動的に保存するように修正しました。 そのために、プログラムコードで 茶色文字で示した2行を追加しています。

[2015/08/14 追記]
sentaro様が、同じ動作をするアドインプログラムを作ってくれました。これで、様々ななパターンの探索を高速に行えるようになるので、皆様も是非お使いください。このアドインプログラムでは、虫 (=点) の描画中に、[EXIT] [MENU] 以外の好きなキーを押せば大幅に描画を高速化します(ターボ機能)。
⇒ ダウンロード: Add-in プログラム Ver1.10 BugTrace.g1a
⇒ ダウンロード: Add-In プログラム Ver1.10 ソース付き BugTrace110.zip

さらに、このアドインプログラムには、これまで作った Drunk BugBug Trap、今回の Bug Trace の3つの Casio Basic プログラムと同等の機能が含まれていて、起動時のメニュー画面で選んで起動できます。それぞれの機能は [EXIT] で終了してメニュー画面に戻ります。

上の Casio Basic プログラムでは、[OPTN] キーで画面コピーの呼び出しや保存が出来ます。一方、アドインプログラムでは、保存していた障害物の画面コピーの呼び出し、軌跡の画面コピーの保存はできません。

なお、アドインでは、ペイントモードで、[EXE] を押した時のみ十字カーソルが表示されます。一方、Casio Basic プログラムでは [EXE] を押さずに矢印キーを押せば、十字カーソルが表示されました。今回、Casio Basic の仕様を変更して、アドインと同じになるように修正しました(この方が操作の統一性があるため)。この修正は、プログラムコードで 青文字で示した3行を追加しています。



さて、But Trap の時と同様に、以下のパターン (PICT19) を呼び出して、障害物パターンとします。

BugTrap-Pict19 
⇒ ダウンロード: PICT19

このパターンを呼び出して、Bug Trace による軌跡は、結局以下のようになって、あとは同じ軌跡を繰り返したどることが分かりました。これだけ動き回ったあげく元の軌跡に戻るので、閉じ込めに失敗しているのか失敗していないのか、判断に困るところです。ただ、思いの外広い範囲を通過していることが分かって、面白い結果です。

BugTrace_result1 

他にも、障害物パターンを色々と変えてみると、どれも一定の軌跡を繰り返すことが分かりました。

BugTrace_result2 

BugTrace_result3 

BugTrace_result4 

BugTrace_result5 

BugTrace_result6 

軌跡で画面全体を万遍なく塗りつぶすのは、意外に難しそうです。


障害物無しで、軌跡を調べて見ると、

BugTrace_result7 

結構、広く塗りつぶしていることが分かります。逆に言えば、まだ完全に塗りつぶせていません。



回答募集

そこで、Bug Trace プログラムを使って、軌跡で全て塗りつぶす条件を探してみることにしました。

虫の軌跡は、斜めの移動だけなので、理想的には以下のような千鳥格子になります。

BugTrace_result_Goal 
目 標

極端な話し、障害物を描画するとき、これだけで塗りつぶすこともできるので、障害物のピクセル数をどこまで少なくして、目標の軌跡が得られるでしょうか?

ちなみに、上の目標は プログラム Bug Trace で得たのではなく、以下のプログラムで描いています。

ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
ViewWindow 0,126,0,0,62,0

For 0→Y To 62
SketchDot F-Line 0,Y,126-MOD(Y,2),Y
Next

Horizontal 0
Vertical 126
Horizontal 62
Vertical 0




問題)
目標の千鳥格子の結果に少しでも近い軌跡を得るために、最も少ないピクセルの障害物をどこに配置すれば良いでしょうk?
障害物の形と配置、それと併せて軌跡の結果を教えて下さい。


皆様からの回答をお待ちしています。



[2015/08/13 追記]
<ヒント>
上の問題について、色々と調べてみていますが、1ピクセルの抜けも無い完全な千鳥格子が得られる障害物とその置き方は、4通り見つかっていて、いずれの障害物も2ピクセルです。但し、この4通りは、完全な千鳥格子に加えて、格子の間が ON になるピクセル(障害物の一部)が1つあります。

1ピクセルの障害物を試していますが、今のところ完全な千鳥格子に最も近いのは、1ピクセルだけ抜けがあり、さらに格子の間に障害物の一部の1ピクセルがある結果になります。これが4通り見つかっています。

sentaro様が、2ピクセルの障害物のパターンを見つけられたとのことです(コメント参照)。


[2015/08/14 追記]
<描画の高速化>
Casio Basic では描画が遅いので、色々なパターンを探索するには、2つの方法があります;
 ・ オーバークロックツール Ftune2 を使って、高速化する
 ・ 同等機能を高速なアドインプログラムで作る
私は、オーバークロックツールで、高速描画させて探索しています。

この度 sentaro様が、同じ動作を行うアドインプログラムを作ってくれたので、極めて高速に描画が可能になりました。
PCリンクソフト FA-124 を使って、fx-9860GII へ導入できます。
⇒ ダウンロード: Add-in プログラム Ver1.10 BugTracb.g1a

ダウンロードした Add-in プログラムを fx-9860GII へ転送する方法は、FA-124 を起動し、メニューの [HELP] - [Manual] を選び、表示される取扱説明書の 64ページ 「10. アドインのインストール」にあるので、記述に従えば簡単です。アドインのインストールが済めば、fx-9860GII で [MENU] を押して、以下のアイコン (bug と描かれているアイコン) が追加されていればインストール成功です。

BugTrace_Menu 
このアイコンを選んで [EXE]BugTrace アドインが起動します。


ところで Add-in は、SDKを使って C  言語で記述して作成します。ご興味のある方は、ソースファイル一式を触ってみてください。
 ⇒ ダウンロード: Add-in プログラム Ver1.10 ソース付き BugTrace110.zip

※ ご参考までに、SDK の入手方法は、こちら を参考にしてください。

ちなみに、sentaro様は、この自作のアドインで、高速探索するうち、1ピクセルの障害物を見つけたとのことです(コメント 参照)。



[2015/08/14 追記2]
sentaro様が 作成した Add-in は、グラフィックスプログラムは アドインで作ると高速描画が可能になる良い例です。
なお、描画中に [MENU][EXIT] 以外の好きなキーを押せば、描画が劇的に高速化します(ターボ効果)。
⇒ ダウンロード: BugTrace.g1a (Ver 1.10)



以下の一連の Casio Basic が アドインプログラムになっていて、その一部に Drunk Bug があります

楽屋裏 - 酔っ払いの虫 (Drunk Bug)
楽屋裏 - 虫の閉じ込め (Bug Trap)
楽屋裏 - 虫の軌跡 (Bug Trace)


このアドインを再コンパイルや改造できるソース付き全ファイルのダウンロードは以下;
⇒ ダウンロード: BugTrace110.zip (Ver 1.10)





応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: fx-9860GII、CasioBasicプログラム関数電卓コメントアウトバグ

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

楽屋裏 - 虫の閉じ込め (Bug Trap)

楽 屋 裏 - Bug Trap
e-Gadget

プログラム改善 2015/08/11
更新 2015/08/14

[2015/08/11 プログラム改善]
sentaro様のご提案で、虫 (=点) の描画を常に3個分残像(黒い三連星!) にすることで、視認性の向上が顕著です。そこで、この改善プログラムを BUGTRAP3 (3連星の '3' で、'2' は有りません(^^;) としてダウンロードできるようにしました。具体的な改造点については、上記のコメントをご覧ください。
⇒ ダウンロード: BUGTRAP3 (黒い三連星バージョン)


以前、酔っ払いの虫 (Drunk Bug) - シミュレーションゲーム - を作ってみました。

Casio Basic でのグラフィックスプログラミングで、どんなプログラムが作れるのか? その一例で、Drunk Bug は、虫がランダムに動く様子をグラフィックスで表現したもので、箱の壁で虫が進行方向を変えます。見ていて、そこそこ楽しめるプログラムになりました。


そこで、虫1匹=点1個 を画面内で直線的に移動させて、壁で反射させるプログラムを作るとどんな感じになるのか、ちょっと試してみたころ、
fx-986GII は、点描画の応答速度がかなり遅いので、点を動かすと、ピクセル表示の応答が、移動速度に追いつかなくて、動く点の視認が難しいことが分かりました。かなりウェイトをかけて、やっと視認できるようになります。

そこで、壁で反射するだけでなくて、適当に障害物を置いて、そこで反射させるような処理を追加して、処理の時間がウェイト代わりになれば、動きが複雑になって、ついでに点移動も視認できて、都合良くなるかも知れない...意外に形になるかも...と、思って作ったのが今回のプログラムです。

今回のプログラムでは、fx-9860GII の画面イメージを 保存/読出し する機能も併せて使ってみます。



Bug Trap の遊び方

⇒ ダウンロード: BugTrap [最終 2015/08/14]

先ずは、ダウンロードして遊んでみてください。

1. 障害物設置 (ペイントモード):
プログラムが起動すると、[EXE] でペイントモードに入ります。カーソルを自由に動かして、点と点を繋ぐ直線を折れ線を一筆書きで描いて、好きなように障害物を描きます。障害物無しにもできます。左下を原点 (0,0)  として、位置を考えながら障害物を自由に描きます。[DEL] でペイントモードを終了します。何も描かずに [DEL] を押してもペイントモードを終了します。
BugTrap-PaintMode 
[EXE] を押すと十字カーソルが現れます。カーソルを矢印キーで動かして [EXE] キーを押せば直線が描かれ、カーソルは消えます。再び [EXE] キーを押すと、前回カーソルが消えた位置にカーソルが現れ、次の点まで移動して [EXE] で確定すると、一筆書きで折れ線が描画できます。これを繰り返して障害物を設置します。カーソルが消えている時に [DEL] キーを押せばペイントモードを終了します。
[DEL] を押した時に、障害物のパターンを画面コピーして PICT15 として自動保存されます。

2. 虫の走行 (描画モード):
ペイントモードを終了すると、左下から虫(=点)が45度の角度で走り出します。壁(外枠)や障害物に当たると進行方向を90度変えます。斜め線などでピクセルが上下あるいは左右に隣接していない点 (孤立した点) は、虫が通り抜け、その点は消えます。

3. 終 了
[EXIT] で正常終了し、この時のグラフィックス画面をコピーして PICT16 として自動保存します。

点の動きは応答速度が遅いために、薄く視認性がよくありません。[SHIFT] [OPTN] (LIGHT) でバックライトを点灯すると少し見えやすくなります。

[2015/08/14 追記]
虫 (=点) 3個を残像のように表示させて、視認性を向上させた バージョンを使えば、虫の動きがかなり見やすくなります。
⇒ ダウンロード: BugTrap3 (黒い三連星バージョン) 


遊び方

さて虫の動きを見ていると、障害物の置き方によっては、最初から同じ経路を循環する場合や、始めは孤立した点を消去しながら進むが最終的に同じ経路を循環する場合もあります。数学的な規則性があるのでしょうが、難しいことを抜きにしても、面白いです。

このように 虫の動きを一定の範囲に閉じ込めるように障害物のパターンを探して遊びます。虫を閉じ込めるので、Bug Trap (虫の閉じ込め) という名前にしています。

せっかく見つけたパターンを保存したり、保存したパターンを呼び出して使えます。fx-9860GII には画面コピーを最大20枚保存する機能が備わっていて、これを利用します。正し、プログラム停止状態でないと画面コピーできない点に注意が必要です。


障害物パターンの取込

例えば、以下のパターンを fx-9860GII に取り込んでみましょう。

BugTrap-Pict20 
⇒ パターンのダウンロード: PICT20.G1M 


点が2つありますが、虫はこれらの点を通り抜け、その際この点は消えるので、気にする必要はありません。

ダウンロードした PICT20.G1M ファイル を、PCリンクソフト FA-124 を使って fx-9860GII に取り込みます。 FA-124 を起動して、メニューの [HELP] - [Manual] を選んで、表示される取扱説明書を読めば、全ての操作方法が分かります。今回の手順は以下参照;
  1. PICT20.G1M ファイルを上からダウンロードし、分かるフォルダに保存します。
  2. FA-124 Ver 2.04 を起動。
  3. 右ペイン (FA-124) で アイコンメニューの Main アイコン (電卓の恰好したアイコン) をクリック。
  4. ツリービューの Default フォルダの上でマウスの右クリック。
  5. メニューから Import をクリックして、保存したPICT20G1M を選んで、[開く] ボタンをクリック。
  6.  すると、右ペインのツリービューにある `Picture フォルダ下に PICT20 が取り込まれる。 
次に、fx-9860GII と PC を接続して、PICT20 をfx-9860GII へ取り込みます。詳細手順は以下参照;
  1. PCリンクソフト FA-124 Ver 2.04 を起動した状態で、fx-9860GII と PC をUSBリンクケーブルで接続。
  2. fx-9860GII に Select ポップアップメニューが現れ、そこで [F1] (DataTrans:[F1]) を押す。
  3. FA-124 画面の左ペイン (Calculator) のアイコンメニューで、Connect アイコンをクリック。
  4. 接続動作の後、接続できたらツリービューが現れる。
  5. 右ペインの Picture フォルダを右ペインの User1 フォルダまで ドラッグ&ドロップする。或いは、右ペイン (FA-124) の Picture フォルダで右クリック→メニューで Copy をクリックし、左ペイン (Calculator) の User1 フォルダの上を右クリック→メニューで Paste をクリックします。
  6. これで、fx-9860GII に PICT20 が転送される。
  7. fx-9860GII で [AC] を押すか、FA-124 の左ペイン (Calculator) のアイコンメニューの Disconnect アイコンをクリックすれば、接続が解除される。
続いて、BugTrap プログラムで PICT20 を呼び出します。

BUGTRAP を起動します。

BugTrap-PaintMode 

ペイントモードになっています。
ここで、[OPTN] キーを2回押すと、画面左下に PICT アイコンが現れ、[F1] (PICT) [F2] (RCL) で Recall From Picture Memory ポップアップが現れます。ここで、Pict 番号である 20 を入力すると画面に Pict20 の画像が取り込まれます。十字カーソルも表示されているので、[EXE] キーでカーソルを消します。カーソル位置に点が描画されますが、気にする必要はありません。孤立した点を虫が通ると、方向転換せずに、その点が消されます。もしどうしても気になるなら、カーソルを既に ON になっているピクセル上へ移動してから [EXE] キーを押してください。

BugTrap-SetPict20 

カーソルが消えると、画面左上に DEL: Go! 表示が現れます。[DEL] キーを押せば、虫の移動が始まります。24回反射して、同じ経路を巡回し続けますね。見ているとちょっと面白いです。

==========

他にも、以下の障害物パターンをダウンロードして試してみてください。

 似たようなパターンですが、ちょとした違いでかなり違います。

BugTrap_Pict16 
⇒ ダウンロード: PICT16

52回反射する軌跡が繰り返されます。


BugTrap-Pict19 
⇒ ダウンロード: PICT19

これは、虫を閉じ込められないように見えます(?)


BugTrap-Picct18 
⇒ ダウンロード: PICT18

これは、閉じ込めに成功します。


BugTrap-Pict17 
⇒ ダウンロード: PICT17


このパターンは、ピクセル3個です (左下の点は無視してください、実際に動作させると虫が通過して消えます)。おそらく閉じ込めに成功する最小ピクセルパターンではないかと思います。


障害物パターンの保存

[2015/08/14 追記]
障害物パターンを PICT15 に自動保存するように変更しました。しかし、PICT15 に決めて保存するのが不都合の場合は、以下のプログラムソースにある StoPict 15 を削除するか、行頭に ' 記号を追加してコメント行にすることで、自動保存をさせないようにできます。この場合は、以下の方法で、好きな Pict # (1 ~ 20) に画面コピーができます。

コメントアウト記号 ' の入力方法 : プログラム入力画面で、BUGTRAP あるいは  BUGTRAP3 のプログラムを表示させたばかりの状態にします。画面下の右端に CHAR  が表示されていればOKです。これが表示されていない場合は [EXIT] を1回あるいは複数回押せば、そこかで CHAR が表示されます。プログラムコードで StoPict 15 の行頭にカーソルを移動させ、
 [F6] (CHAR) [F2] (SYBL) [▶] [▶] [▶] [▶] [▶] [▶] (右を6回) [EXE] 
で、コメントアウト記号 ' が入力できます。


例えは、以下のような障害物パターンを作るとします。

BugTrap2 

十字カーソルが表示されていて、この位置まで一筆書きするために、[EXE] を押すと、

BugTrap3 

線が秒がされてカーソルが消えます。カーソルが消えると DEL: Go! が表示され、描画モードへ移行できます。

右上に マークが表示されていて、プログラムがループを回っていて実行中であることが分かります。この時は fx-9860GII 内蔵の画面コピー機能は使えません。

この画面をコピーしたいのですが、先ず [DEL] キーを押して描画モードへ以降させてから、素早く [EXIT] を押します。すると、

TC10-Quit_Bye_2 

となり、ここで [EXE], [AC], [EXIT] のいずれかを押せばプログラムは正常終了しますが、この時点ではプログラムはまだ終了していません。

ここで、[SHIFT] (F6] (G↔T) を押すと、グラフィックス画面に切り替わります。

BugTrap4 

この画面の右上には、 マークが有りませんね。従ってこの状態では 画面コピーができます。
一旦描画モードに移行しているので、左下に移動中の虫(点)が見えています。

ここで、[OPTN] [F1] (PICT) [F1] (STO) を押すと、Store In Picture Memory ポップアップが現れるので、ここで Pict番号を 1~20 のいずれかを入力します。これで、画面コピーが完了しました。

PCリンクソフト FA-124 を使って、fx-9860GII から PC へこの画像データを転送することもできます。


面白いパターンが見つかったら、ぜひ教えて下さい。



プログラム

[2015/08/14 更新]
ペイントモードの操作の統一性が出すための修正(赤文字部の追加)を行いました。

ファイル名: BUGTRAP
'==Initialize==
ClrGraph
CoordOn
GridOff
AxesOff
LabelOff
ViewWindow 0,126,0,0,62,0

'==Draw frame==
S-L-Normal
F-Line 0,62,0,0
F-Line 126,62,0,62
F-Line 126,0,126,62
F-Line 126,0,0,0

'==Paint mode==
Text 7,3,"EXE/→/↑/←/↓: Draw Wall
Text 13,3,"DEL: Go!"
63→X:31→Y
While 1
While Getkey
WhileEnd
Do
Getkey→K
Text 13,3,"DEL: Go!"
LpWhile K=0 Or K=47
K=44⇒Break
If K=31 Or K=68
Then
Text 13,3,"    " '8 spaces
Plot X,Y◢
Line
IfEnd
WhileEnd
Text 7,3,"             " '25 spaces
Text 13,3,"    " '8 spaces
StoPict 15

'==Draw dot==
62→B:2→A:-1→D:1→C
PxlOn B,A

'==Move dot==
While 1

'✶Set direction
If B=1 Or B=63
Then (-1)D→D
Else If A=1 Or A=126
Then (-1)C→C
Else
PxlTest(B+D,A)⇒(-1)D→D
PxlTest(B,A+C)⇒(-1)D→C
IfEnd:IfEnd

'✶Clear & Plot dot
PxlOff B,A
B+D→B:A+C→A
PxlOn B,A

Getkey=47⇒Break
WhileEnd

'==Normal end
StoPict 16
ClrText
Locate 9,5,"bye!"

⇒ ダウンロード: BugTrap

⇒ ダウンロードBugTrap3 (視認性向上した黒い三連星バージョン) [2015/08/11 追加]



Casio Basic グラフィックスのポイント

プログラム全体は、構造化プログラムになっていて、

初期化 (Initialize)
 ↓
ペイントモード (Paint mode)
 ↓
最初の点の描画 (Draw dot)
 ↓
点の移動 (Move dot)
While 1
  進行方向設定 (Set direction)
  点の削除と描画 (Clear & Plot dot)
WhileEnd
 ↓
正常終了処理 (Normal end)


と、ペイントモードの中身以外は、非常にスッキリしていると思います。

ペイントモード
ペイントモードでは、Plot コマンドと CoordOn を組み合わせて、左下を原点 (0,0)  として、位置を考えながら障害物を自由に描きます。Plot コマンドや Plot と組み合わせて使える Line コマンドは、十字カーソルを使った簡単なお絵かきツールを作るのには便利なので、これを使ってみました。Casio Basic ならではの機能です。Plot コマンドや Line コマンドについては、Casio Basic入門G04 を参照してください。

描 画
左下から虫(=点)が45度の角度で走り出します。PxlOff で点を消してから次の位置に PxlOn で点を描画します。これらのコマンドは物理座標系 (詳細は Casio Basic入門G07 参照) で動作し、座標指定に X と Y を使えません(仕様)。物理座標は縦方向を先に、横方向を後に指定するので、普通の (X, Y) 座標の感覚に合わせるため、座標値を (B, A) としています。そこで、PxlOn B,APxlOff B,A といった記述にしています。

虫が1歩進むとき、座標 (B, A) から (B+D, A+C) へ進むようにします。D や C は、-11 のどちらかにします。要するに虫の進みは DC の値で制御します。これらのプラスマイナスの符号が逆転すれば進行方向が90度変わります (反射します)。

ピクセルが2個以上、縦か横に繋がっているところに当たると90度方向転換します (実際は当たっていません、当たる直前に方向転換しています)。障害物が斜め線になっていて、当たるピクセルの上下左右の隣にピクセルが無い時は、反射せず突き破ります(そのピクセルを消去し、虫は直進し続けます)。

指定したピクセルが ON か OFF かを判定するコマンドは PxlTest( ) しか無く、このコマンドは物理座標で動作するので、点の消去と描画にも物理座標で動作する PxlOffPxlOn を使いました。

次に描画する点が ON か OFF かを PxlTest( ) コマンドで調べて、ON なら方向転換します。

障害物での方向転換は意外に簡単に記述できます。PxlTest(B+D,A)⇒(-1)D→DPxlTest(B,A+C)⇒(-1)C→C と、たったこれだけです。こうやって DC の値を更新してから、B+D→BA+C→A によって座標 BA を更新し、最後に PxlOn B,A を実行するだけで、方向転換した虫(=点) が描画できます。

PxlOn, PxlOff, PxlTest( ) については、Casio Basic入門 で取り上げる予定です。

正常終了処理
[EXIT] で正常終了します。fx-9860GII では、[AC] で強制終了するとプログラム編修画面になって、思わぬプログラムの変更をしていまう可能性があるので、そのリスクを減らすために正常終了させることにこだわってみました。実用プログラム作成へのこだわりです。正常終了すると、bye! と表示します (実験プログラムは別として、私が作成するプログラムはこれに統一しています)。



[2015/08/14 追記]
sentaro様が 同等機能の Add-in を作ってくれました。グラフィックスプログラムは アドインで作ると高速描画が可能になる良い例です。
なお、描画中に [MENU][EXIT] 以外の好きなキーを押せば、描画が劇的に高速化します(ターボ効果)。
⇒ ダウンロード: BugTrace.g1a (Ver 1.10)



以下の一連の Casio Basic が アドインプログラムになっていて、その一部に Drunk Bug があります

楽屋裏 - 酔っ払いの虫 (Drunk Bug)
楽屋裏 - 虫の閉じ込め (Bug Trap)
楽屋裏 - 虫の軌跡 (Bug Trace)


このアドインを再コンパイルや改造できるソース付き全ファイルのダウンロードは以下;
⇒ ダウンロード: BugTrace110.zip (Ver 1.10)





応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: fx-9860GII、CasioBasicプログラム関数電卓コメントアウトバグ

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

楽屋裏 - 酔っ払いの虫 (Drunk Bug)

楽 屋 裏 - Drunk Bug
e-Gadget

修正 2015/07/20
追記 2015/07/21
追記 2015/08/04
追記 2015/08/14

Casio Basic入門で、fx-9860GII でのグラフィックスプログラミングを取り上げています。
取扱説明書には殆ど情報が無いので、各コマンドの仕様を細かく調べ、実際に動作させて確認しています。そこで、グラフィックスのちょっとしたプログラムを紹介しようと思います。

今回は、シミュレーションゲーム Drunk Bug です。グラフィックス描画が遅くても、十分楽しめるプログラム例だと思います。



Drunk Bug の説明

箱の中に、酔っ払った虫を一匹放り込みます。コイツは千鳥足で歩き回ります。次の瞬間どちらへ進むか全く予想がつかず、ランダムな歩みです(ランダムウォーク理論や酔歩理論の前提となる動作です)。

この虫は、歩くと糞を落とします。自分の糞があれば食べてきれいに掃除してくれます。箱の端に来ると、クルッと方向転換します。

そんな 酔っ払い虫 を箱に放り込んだ時の様子をグラフィックスで表現してみました。



プログラムの説明

虫を PlotChg コマンドで描画しています。描画位置に点が無い場合は点を表示し(=糞を落とす)、描画位置に点が有る場合は消去し(糞を食べ)ます。

虫が1歩進む時の座標は、(x, y) から (x±1, y±1) へ変化しますが、± かをランダムに決めます。1から10のランダム整数を発生させ、それを2で割った余り (Mod 関数使用) を求めると 01 になります。余りが 1 の時 で、0 の時 としています。

虫が箱の端に居る時だけ、座標値を先に 2 と反転の準備をしておいてから、±1 すれば、無駄な追加処理なしで進む方向が反転します。

[2015/07/21 追加] プログラム実行中に [EXIT] キーで一旦停止、[EXE] キーで実行継続の機能を追加(1行追加)。これで、一旦停止中に [SHIFT] [F6] (G↔T) でグラフィックス画面に切り替えて画面コピーができるようにしました。fx-9860GII には画面保存の機能が有り、保存した画像をPCに転送して、下にある実行画面の画像を得ました。
[2015/08/04 追記]
[EXIT] で一旦停止し [SHIFT] [F6] でグラフィックス画面を表示させた時の画像保存は、キー操作 [OPTN] [F1] (PICT) [F1] (STO)を行い、Pict# の番号を入力して最大20枚の画像まで保存できます(Pict# を手元に控えておきます)。その後 PCリンクソフト FA-124 で fx-9860GII と PC を接続して保存した画像をファイル変換して取得します。具体的な操作方法は、FA-124 Ver 2.04 のマニュアル 58ページに従って、控えておいたPict# を使って画像を一旦表示させ、それをPCに画像ファイルとして保存します。

ファイル名: DRUNKBUG
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff

ViewWindow 0,126,0,0,62,0  (座標系の設定)
PlotOn 63,31               (初期位置に虫を描画)
Text 1,1,"EXE: Start"◢       (一旦停止)

Text 1,1,"AC: Quit "
 (スペース2個)

While 1
RanInt#(1,10)→P      (1から10のランダム整数を得る)
RanInt#(1,10)→Q      (1から10のランダム整数を得る)

If MOD(P,2)           (ランダム整数を2で割った余り→ 0 か 1 を得る)
Then X≥126⇒X-2→X    (右端で反転の準備)
X+1→X               (一歩進む時の X座標値)
Else X≤0⇒X+2→X       (左端で反転の準備)
X-1→X                (一歩進む時の X座標値)
IfEnd

If MOD(Q,2)           (ランダム整数を2で割った余り→ 0 か 1 を得る)
Then Y≥62⇒Y-2→Y      (上端で反転の準備)
Y+1→Y                (一歩進む時の Y座標値)
Else Y≤0⇒Y+2→Y       (下端で反転の準備)
Y-1→Y                 (一歩進む時の Y座標値)
IfEnd

PlotChg X,Y            (1歩進んだ虫を描画)
Getkey=47⇒"[EXE] to Resume"◢
WhileEnd

fx-9860GII 用 プログラムファイルのダウンロードDrungBug.g1m

(改訂・修正部分は赤文字で示した。ダウンロードファイルも改訂・修正している。)


虫の様子を見ていると、左上の AC: Quit まで糞と間違えてガツガツ食べることもあります。プログラムを再起動すると、虫の動きが全く異なることもあって、ランダムの世界は、なんだか不思議な感じですね。




DrunkBug_Pict20 

DrunkBug_Pict19 

DrunkBug_Pict18 

DrunkBug_Pict17 



Casio Basic グラフィックスのポイント

プログラミングに慣れた方なら、オヤッと思う点が1つあると思います。

ViewWindow のすぐ下で、PlotOn 63,31 で虫の初期位置を描画しています。

本来ならば、
63→X:31→Y
PlotOn X,Y


で、変数 X, Y の初期化とそれを使った初期描画をすべきですが、XY の初期化をせずに PlotOn 63,31 を実行し、その後の処理で初期化していない XY を使って、いきなり PlotChg X,Y を実行しています。

これで良いのか?

通常のプログラミング言語では、必ず初期化してください。

ところが、この Casio Basic プログラムを実際に動作させると、確実に初期位置から虫が歩きます。偶然ではありません。

Casio Basic の PlotOn コマンドは、描画をすると、その位置の X座標値を変数 X に、Y座標値を変数 Y に自動的に代入する仕様なのです。だから、PlotOn 63,31 を実行するだけで、変数 X, Y の初期化が行われます。この仕様は便利な反面、知らないと 意図しないところで XY の値が変更されるバグで悩まされるでしょう。


[2015/08/14 追記]
sentaro様が 同等機能の Add-in を作ってくれました。グラフィックスプログラムは アドインで作ると高速描画が可能になる良い例です。
なお、描画中に [MENU][EXIT] 以外の好きなキーを押せば、描画が劇的に高速化します(ターボ効果)。
⇒ ダウンロード: BugTrace.g1a (Ver 1.10)

以下の一連の Casio Basic が アドインプログラムになっていて、その一部に Drunk Bug があります

楽屋裏 - 酔っ払いの虫 (Drunk Bug)
楽屋裏 - 虫の閉じ込め (Bug Trap)
楽屋裏 - 虫の軌跡 (Bug Trace)


このアドインを再コンパイルや改造できるソース付き全ファイルのダウンロードは以下;
⇒ ダウンロード: BugTrace110.zip (Ver 1.10)






応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: fx-9860GII、CasioBasicプログラム関数電卓コメントアウトバグ

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを作って、使ってナンボ!

実際に触って気づいたこと、自作プログラム、電卓プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではなく、Casio Basicが面白いと感じる1ユーザーです。


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR