SmallBasic プログラム集


 ゲーム風にしてないし、ドリル風にもしていないのでプログラミングは簡単だ。比較的にね..... 様々な場合の判定をプログラミングしなくてすむから。従って完成度は低いのだけれど、生徒にパソコン与えて「自分でやってごらん」ではなく、授業の中での導入や説明の補助としてのアイテムになることを目指して作っている。
 なお、表題に続く番号はSmallBasicサイトの検索番号になっているので、アクセスしていただくと、ソースをゲットすることができる。修正して使いやすいようにしてください。

 動作環境として、windows8以上ならばそのまま動くでしょう。それより低いウィンドウズのバージョンの場合はMicrosoft .NET framework 3.5が必要になってくるようです。XPから可能でしょう。
 フリーのウィルスセキュリティソフトを使っていますが、SmallBasicの数学関数を使うと、誤動作を起こしてプログラムを停めてしまうことがあります。面倒です。

 なお、http://blogs.yahoo.co.jp/yamame22jp(現在休止中)でブログを開きました。そちらの方には、これらのソフトの中から使えるようなものを圧縮ファイルにして置くように計画中です。使用については自己責任でお願いします。要望や改善、についてはブログの方で受け付けるようにしようと思います。


JavaScript版 極軸合わせ

 北天の星々を自作してみた。ヒッパルコス星表をダウンロードして(12万レコードほどある)+86度以上の星130個ほどをCVSデータとする。11等級ほどまである。
 SmallBasicを使って、これらを読み込み赤経・赤緯の極座標からXY座標に変換したものを画面表示させ、画面コピーしてペイントソフトで加工した。
 SmallBasic上での計算が面倒だったので、座標変換はExcelで行った。その方が簡単だったからね。詳細は、このページで。

 ただ問題が発生した。JellyProというスマホで見たら、9時間ずれる。他のスマホでどう見えるか調査中。自分では持っていないので時間がかかる。


 星座早見盤を実現できたので、折角だから赤道儀の極軸合わせのためのツールを作ることにした。これは、実際にはiPodTouchを使う。InternetExplorer8とFireFox、iOSとで、微妙にjavascriptが動作しなかったりレイアウトが違ったりするので、いろいろ悩むのだけれど、少々の変更で使えることは素晴らしい。


JavaScript版 星座早見盤

 これも恒星時を計算できているので、必要部分をコピペして組み合わせて作ってみた。今のところ、シミュレーションは不要で、今どんな星座が見えるのか知りたいだけなので、難しいことはなかった。図がいい加減なので、結果もアバウトだ。そのくらいで十分。詳細は、このページで。


JavaScript版 半円レンズ

 SmallBasicで既に屈折の計算式を作っていたので、必要なところをコピペして簡易的に作ってみた。空気からガラス、ガラスから空気への光の屈折と全反射の様子を再現している。光の向きを矢印の先で表現するのは面倒なのでやっていない。

 面倒なことはしないようにすると、作るのも楽なんだ。如何に短い時間で作るか、完成度を低くして授業に使うことが大事かなと思っている。


JavaScript版 低気圧の移動

 上から見た図と、横から見た図。どちらも単純に左から右へ移動していく。右に行き過ぎたら左に戻って繰り返す。余計な説明はしていない。

 生徒がこれを見てどんなことに気づいてくれるか、班で話し合わせてみたい。また、指導者が再生画面で気づかせてもいいかな。気温変化や風向き変化などたくさんのことが分かると思う。

 自分としては、半透明やレイヤーの勉強としてみた。


(付録)JavaScript版 恒星時

 スモールベーシックではなく、JavaScriptで恒星時表示を実現してみた。今、勉強中。60歳を過ぎ、日々勉強だね。



 XP上では、リアルタイムで時刻を読みに行って計算表示することもできたのだけれど、windows10やiPodTouch では表示できなかった。まだまだですね。

 こうやってHTML言語とJavaScriptを組み合わせてブラウザで読めるようにすると、そのファイルをGoodReaderUSBを使ってiPodTouch に転送し、GoodReaderで表示することができる、もちろんローカルファイルだけど。これ便利です。
 勉強して、他のスモールベーシックのプログラムも移植したいです。


(17)神経衰弱

 人権啓発の一環として、人権擁護に関わる6種類のマークを使った神経衰弱ゲームを作成してみました。

◆ねらい
  1.  人権擁護のマークを知り、日常の生活で意識してもらうこと。そのことを契機にして人権意識を高めることにつなぎたいと思いました。
  2.  タイムを競うゲーム仕立てにすることで、興味関心を引き付けたいと思いました。
◆使い方
  1.  プログラムを起動すると、暫定の記録とマウス左ボタンのクリックで開始することが表示されます。
  2.  プログラムを開始したら、あとは左ボタンで任意のカードをクリックしていきます。ルールは通常の神経衰弱と同じです。
  3.  6種類すべてのカードセットを開くことができればゲーム終了。0.1秒刻みの所要時間が記録され、新記録であれば更新されます。
  4.  説明カードを提示して、マークカードからそれに該当するものを選ぶものもあります。
◆改善について
  1.  ねらいを達成するには、カードのマークとそれがどのようなことを意味するかを理解してもらう必要がある。効果的な、提示の仕方を考えたいです。
  2.  他のテーマで、提示&説明用のプログラムに変更できます。
◆その他
  1.  現在は6種類12枚のカードだが、種類や枚数を拡張することができるようにしています。
  2.  プログラム言語の仕様上、windows7以降のOSに限定されるようです。それはまた逆に、スクリーンタッチで実行することができることも意味します。
  3.  プロジェクターに出力し、みんなで楽しく実行することができるはずです。スマートボードを使うと、大画面にタッチしながら実行できるでしょう。


(16)地球の自転&公転

(7)地球の自転 では、〔上段〕北極点を中心として回転する、北極から見た地球〔下段〕赤道方向から見た23.4度傾いた地球の自転、をシミュレーションしたものを作りました。

 本来は、下段の地球の自転を北極側から見た地球、北極点が地球円の中央からずれた様子をシミュレーションしたかったのですが、それを実現するには1枚画像をSmallBasicのshapes.rotate関数では再現できません。回転する複数枚の地球を準備して書き換えていく、アニメーションするしかないのでした。

 マウスによって任意に地球を回転させるソフトは、GoogleEarthを始めとして色々あるのですが、自転軸を任意に傾けて固定し、そこから1時間毎に自転させるソフトは簡単には見つからないのでした。

 仕方なく、自由に動きすぎるシミュレーションソフトを使って、手作業でなるべく正確な位置に動かしたものを切り取って、不要な部分を消しながら、18枚の画像を作り出しました。20度ずつの動きなので滑らかさがないですが、何か良い方法が見つかった時には改善することにして、完了としました。

 使い方としては、

(1)自転している地球を見て、気がつくことを生徒たちに話し合わせます。
 ◎円の中心を中心として自転していない
   地軸は23.4度傾いて自転&公転していること
 ◎左右で日本の昼夜の時間が同じでない(これに気づいたらすごいですね)
  ※普通は補助発問が必要です
  ※左が冬、右が夏の位置  日本の昼夜の長さをカウントしよう(24枚用意すれば1時間毎の動きになったのですが...)
(2)一日中昼、あるいは夜になっているところがある(気づくかな?)

今後

@そんなヒントを画面に提示しようかと思います。
Aこの地球を自転させながら、公転させてみようと思います
 極座標と三角関数を使って計算しなければなりませんね


(15)地震シミュレーション

 とあるサイトで、地震のシミュレーションを提案していました。感動して真似てみました。ちょっと違うスタイルだけど。

 中央のボタンを押すと地震波が同心円状に広がり、到達した順に家が建っている地域が震動していく。その波形も表示するという計画です。P波とS波の様子や震源からの距離で伝わる様子が変わることに気づいて欲しいかなというものです。
 中央ボタンをマウスで位置変更できるようにして、震源距離を変える予定です。

 ただ、3地点がそれぞれ別々に震動し減衰していく様子を再現できていない。当分かかりそうです。


(14)星座早見盤(QWH918)

 ふと思いついて取り掛かった星座早見盤。ところがインフルエンザにやられてしまい、停滞してしまった! なんとか完成しました。

 2枚の画像を重ねて、裏側の画像を計算によって重ね合わせるだけ。原理は簡単。計算も厳密にやったら面倒だけど、インフルエンザ上がりにはつらいので実用範囲で。
 一番面倒だったのが、星座の描写。大まかなものは夏に別件で作っていたので助かったが、文字記入はそれぞれの位置に合わせて回転させねばならないので、星や星座の名前は記入しなかった。


(13)凸レンズによる光の屈折作図(FPK511)

 ということで、完成! 虚像の位置を決めるのが難しかったけれど、ちょこっと閃いてぴったりと適正な位置に現れることになった。この作業中、ロウソクをマウスで移動している最中にも実像や虚像もリアルタイムに動きながら表示することができるようにした。スプライト機能というのかな。慣れないから、未だに数日触らないと忘れてしまう。

 完成したので、サイトに登録した。FPK511だ。

 地層が面倒なことになってきたので、気晴らしにこれも途中だった凸レンズによるシミュレーションに取り組んだ。思いの外簡単に左側のロウソクをコントロールできたが、右側の倒立像の位置や大きさをコントロールできていない。微妙にずれるのだ。計算が面倒で、正月休みの頭では無理のようだ。それでも、無理矢理に一応はシミュレートできている。あとは、虚像を再現できればOKだ。

 計算がピタリと整った。スムーズに位置と拡縮とが合致している。あとは、虚像だけだ。難しいことはないが、また計算が面倒だ。


(12)地層のできかた

 昔、DOS上のベーシックで地層シミュレーションが教育センターで出されていたので、その画面を見ながら独自にプログラムを組んだことがあった。実際に授業で使うことができて便利だった。

 このSmallBasicでもできるのかなと組み始めている。数種類堆積岩の堆積と花崗岩の貫入、火山噴火を再現できた。もっとも、火山噴火は、火山ができてから岩脈が上昇していくのでリアルさに乏しい (^^;)
 それに対して、貫入の方は画像の透明さをコントロールできるので、接触変成を再現できる。

 あとは、メニューにある「断層」、それから褶曲と不整合だ。DOS BASICでは、GET@ PUT@ という命令語があって、確か、一括りで画面上の画像が移動できたので楽だったが、SmallBasicではそれがないので、少々考えなくてはならない。1ドットずつで移動か? 恐ろしい?!


 結局、1ドット移動では遅くて話にならないので、堆積方法を根本的に変更して(スプライト方式を断念して)断層を実現した。しかし、火山噴火の岩脈部分はスプライトで実現しているので、岩脈を断ち切ることができない。従ってこれもアニメーションを諦めて、画像を貼り付ける方式に変えようと思う。

 ただ、これから「褶曲」に取り組もうと思うのだが、褶曲だけならばそんなに難しくはないけれども、褶曲した地層が断層したり、断層した地層が褶曲するのは甚だ面倒だ。その辺で挫折かもしれない。

 不整合はできそうなので、それをやっておくか?!


 一応褶曲はできたが、これを元に断層させることはまた思案が必要だ。


(11)キャラクタエディタ

 地層の変化のプログラムを作ろうとしている。そこで、地層の駒を作るプログラムを作ろうとした。iPodのBasic上で作成したものがあったので見たところ、なんと、消えていた (^^;)

 仕方がないので、一から作り出した。それがこれ。まだ未完成で、画像を保存するところを考えているけれど、ペイントソフトで直接駒を作ったほうが良かっし、早かったかも。


(10)台風の進路

 下の説明にあったように、地図上に任意の緯度経度がはっきりした点を表示できる方法を使って平成26年の19号台風の進路を描いてみました。

 これも、過去の大きな台風や季節ごとの台風の進路など、選択的に表示ができるようになるのではないかと思います。

 一番大変なのは、気象庁のデータをプログラムで使えるようにする作業です。なかなか根気のいる作業ですが、いったんデータ化してしまうと、とても扱いやすいのがデジタルの強みですね。

 いずれも地図は、フリーで提供してくれるサイトCraftMAPさんからのものです。


(9)新潟中越地震(震度分布)

 (4)の地震に続いて、新潟中越地震の震度分布を描かせてみました。本当は、全国規模でやりたかったのですが、データ量がかなりあったので、最初は新潟県だけ。次に欲が出て、近県のデータも投入しました。これをみると、高崎から利根川沿いに震源から遠いのにもかかわらず、震度が大きめになっているように思えますね。

 気象庁の地震データベースから、全国の観測地点データをゲットします。これには観測点の緯度経度と地名が記載されています。
 過去の大きな地震データも保存されています。これには、震度階級ごとの地名が記載されています。しかし、緯度経度が記載されていないので、両方のデータをエクセル上で比較して、使える観測点を拾っていくことになります。それらのデータを読み込んで、地図上にプロットしていくわけです。手間ではないでしょうから、気象庁さんには、観測点番号も付けてデータを出して欲しいですね。

 汎用性を高めるために、地図には必ず左上隅の地点の緯度経度を求め、地図の縮尺に合わせた緯度経度1度あたりのドット数を記入しておきます。
 それを見ながら、プログラムの係数を変更していくわけです。あとは、観測地点の緯度経度を入力すれば、PCの地図上に位置を記してくれます。

 いずれ、全国地図上で、様々な大きな地震のデータを選択的に表示することができるようになると思います。

 ちょっとでも間が空くとすぐに忘れてしまうようになったので、地図とデータ、プログラムの扱いを忘れないように他の大きな地震についても震度分布を作成してみました。東北の地震の時は6を越える地点が縦に分布していますね。震源が点ではなかったのでしょう。確か、ニュースでは南北にできた長い断層が原因ということではなかったでしょうか?

 阪神淡路の地震については、地震動が最初に伝わった時間の分布を出しましたので、震度分布も出してみました。何か気が付くことがあるでしょうか?


(8)二次関数のグラフ(RVS940)

 座標軸上の任意の3点を選択すると、二次関数のグラフを描いてくれます。一次関数の場合はそう難しくはなかったものの、二次関数の場合、大分てこずりました。

 プログラミングする関係上、一般化して3種の係数を求める式を立てなければなりません。単純な機械的作業ですが、最近は老人力が発揮されて集中力が持続しない。途中でミスをする。basic上で実行するとでたらめな結果となってしまいました。
 仕方ないので、手作業(手書き)でなくワープロ上でコピペをしながらミスのないようにしてみました。結果は良かったけれど、求めた式からスクリーン上に描画するプログラムにミスって、y軸に線対称で出力していました。
 スクリーンのドット数とドットの位置を座標軸上の位置に変換してやらねばならないことも分かり難さですね。詰めとなるところまで集中力が持続しないので、試行錯誤でつめていきました。

 3つの係数が整数の場合には式を表示します。ようやく満足できる範囲で可能になりました。CenturyOldstyleのフォントを使っています。それがインストールされていない場合は美しくなくなってしまいます。筆記体風の綺麗な式が、どこだったかネットのとあるサイトを経由して表示できるところがありましたな。分数になってしまう場合には、その表示がややこしくなるので表示しないことにしました(^^;) 計算では少数で出てくる係数をどのように分数に表示するか、考え出したらきりがないのでやめました。
 さて、使いみちですが、特には考えていません。まあ、頭の練習にはなったかもしれません。

 なお、一次関数のグラフについては先んじて作っていますが、二次関数のこのシミュレーションプログラム上でも、3点を一直線上にとれば、一次関数のグラフも表示しますので、掲載を止めています。


(7)地球の自転

 天文が専攻なので、地球の自転や公転はプログラミングしてみたいものの一つです。フリーで地球儀を表示してくれるサイトCraftMAPさんがあったので、そこで経度15度ずつの地球を作成してもらったもの(HPで可能)を使わせていただいています。この24枚の画像を配列に入れて表示しているだけです。これが下の部分。

 SmallBasicには画像を回転させる命令があるので、それを使えば、1枚の画像で24時間の変化を表示させることもできるので、それを使ったのが上の画像。簡単でいいのですが、できれば地軸の傾きも表示に入れたい。となると、その方向から見た地球の24枚を準備しないといけない。これは難しい。

 地球の陰の部分は半透明になっています。これもSmallBasicでやってくれる便利な機能。

 このシミュレーションを使って、地球の自転や公転に関係して変化する太陽高度とか昼夜の長さとかについて、グループ討議させたいものです。


(6)色見本(MBD614)

 4096色のカラーコードが得られる。本来はもっと多いのだが、グラデーションが必要なわけでなく、プログラミングも面倒になるので、この辺で妥協。プログラミングするときに使う色を決定する実用品だ。


(5)単語入れ替え英作文

 語順入れ替えの英作文だ。マウス操作のプログラミング練習で作ってみた。SmallBasic最初の作品だ。行き当たりばったりで組んでみたのでスマートではない。
 表示したい英文を別のファイルで作れることが売りなのだが、画面幅の関係で語数が限られているので、アップするほどではないと思っている。低学年では使えるかもしれない。配列に語を入れているので、正誤が判定できることから、ドリル風に自分で勉強するのには向いているかもしれないし改変も楽だろう。


(4)地震の揺れの伝わり方

 啓林館の1年生理科P.67の実習を説明し、シミュレーションするのに作ってみた。「こうやるんだよ.....」と最初の数地点を色塗りしたり、色塗り後の線引き(直線で引くようにした)、中心を見極めての円引きができるようにしてみた。
 円引きは、同じ時間の3地点からの円を描いて交点を求めて震央を決定するのにも使えるのではないかと思う。
 このプログラムは、啓林館の著作権もあるだろうから、アップはしていない。


(3)乾湿計(GPJ668)

 現役の頃は、100均で大きな温度計を買って、教室の後ろからでも見えるようにしてやってみたが、実際は見にくかった。そこで、シミュレートできるように組んでみた。生徒にもやらせておきたい。
 湿度を大きく表示させるのに時間がかかっていましたが、プログラムの中にdata文で湿度表を入れるようにしたので、改善されました。


(2)半球レンズ(TBS172)

 光の屈折を教える際に使われる半球レンズ。これを説明するときの道具として作ってみた。手動モードでは、入射光をマウスボタン押し下げで表示し、屈折光もマウス操作。教師による説明や、生徒を黒板に呼んで練習させるときに使えるかと思う。自動モードは光を入射させたら、即屈折光を表示する。シミュレーションに使えるかと思う。屈折率は1.5にしていると思う。全反射も表示するようにしているので、生徒に考えさせるのにどうでしょう?


(1)恒星時(BKC668)

 星を撮影しているので、今どんな星座が見えているのかを知ることが必要だ。季節や時刻でどんどん変わる。毎日見ていればだいたいのことは分かるが、時々にしか見られない。冬になれば尚更だ。そこで作ってみた。パソコン上の星座早見版でもいいのだが、赤経をあわせる必要があるので、恒星時を知っておくと便利なのだ。

 しかし、計算が面倒だった。恐らく表示している恒星時もアバウトだろう。

ホーム