2018年3月17日土曜日

Scratchでプログラミング その25 うまく動かないときの対処方法(全角や空白に注意)

Scratchの使い方解説です。
せっかく作ったプログラムが、うまく動かないときの対処方法について


せっかく作ったプログラムを実行してみたとき、うまく動かないことってありますよね?
そんなときの確認事項について


これはネコがグルグル回転するプログラムです。
ネコをクリックすると回転方向が反対になります。

ですが、これはネコをクリックしても回転方向が変わりません。
なぜでしょう??


※このプログラムはバグを含めて、正しく動かないようにしています。
実際のソースはこちらから確認してください。
中を見るボタンをクリックすると、プログラムのコードが確認できます。


1.問題がありそうなのは左右のどちらのブロック?

旗をクリックした時点で、ネコは右方向に回っています。
ですので、左側のブロックは正しく動いています(と仮定します)


2.部分的に実行してみる。

スプライトをクリックしたときに変数が1になれば、回転方向は変わるはずです。


そのまま実行したまま、個別に実行したい場所のブロックを抜き出してみます。
今回は「変数1を1にする」を抜き出してみました。
抜き出したブロックをダブルクリックすると、ネコが反対方向に回りだしました。

ということは、このコマンドは正しそうです。

残る怪しい場所は、
「もし変数1=0なら」
の部分ですね。
どこがおかしいんでしょうか?


 3.制御式の値に注意!

実は、この「変数1=0」の0という数値が、半角の0ではなく全角の0となっています。
見比べてみると、

半角のゼロ → 「0」
全角のゼロ → 「0」

ぱっと見は同じですが、プログラムの世界では全くの別物です。

数値だけではなく文字も同じように全角と半角に区別があります。

アルファベットの場合
半角のA → 「A」
全角のA → 「A」

空はく(スペース)の場合
半角の空白 → 「 」
全角の空白 → 「 」

こういうのも気づきにくいですね
ただしい文字列 → 「あいうえお」
先頭や文末や空白を含んでいる → 「 あいうえお 」
なかに空白を含んでいる → 「あいう えお」 


2018年3月16日金曜日

Windows10に.Net Framework 3.5をインストールする方法

Windows10はデフォルトで.Net Framework 4.6がインストールされていますが、.Net Framework 4.6は.Net Framework 3.5との互換性がありません。

そのため.Net Framework 3.5が必要なアプリケーションを起動すると、
.Net Framework 3.5をインストールするように通知が表示されますが、エラーが発生しインストールされませんでした。。。

.Net Framework 3.5のインストールは、コントロールパネルのWindows機能の有効化または無効化から機能追加もできるのですが、こちらも同様のエラーとなります。

エラーとなるのは同じ状態でWindowsUpdateからのデータ取得時に0x800F081Fというエラーコードで失敗していました。

.Net Framework 3.5の再配布可能パッケージを直接ダウンロードしてインストールすることも考えたのですが、インストールしようとすると「インストールには.Net Framework 3.5が必要です」というトンチのようなメッセージが・・・orz


どうやらセキュリティパッチのKB2966828が悪さをするらしく、このパッチを適用すると.Net Framework 3.5のインストールができません。
残念なことに、私の使用していたWindows10では、このパッチを適用した形跡もなかったのでパッチのアンインストールも出来ません。。。


以下のサイトには、その他いろいろな対処方法が掲載されています。

私の場合、このサイトの方法では、不十分な部分があったので、覚書として掲載しておきます。


対処法

まずはMediaCreationToolをダウンロードします。
ここでISOイメージを作成するのですが、0x80072F76 - 0x20017 エラーとなりISOイメージが作成できませんでした。

このエラーの対処は以下のサイトを参考にしました。

MediaCreationToolを右クリックし、「互換性のトラブルシューティング」を選択して、推奨設定で実行(テスト)すると、エラーとならずISOイメージを作成できました。

作成したISOをVirtual CloneDrive でマウントしました。

管理者権限でWindowsPowerShellを起動して、以下のコマンドを実行します。

Enable-WindowsOptionalFeature -Online -FeatureName NetFx3 -All -Source "D:\x64\sources\sxs" -LimitAccess

ドライブ(D)は各自の設定に置き換えてください。
Sourceのパスはmicrosoft-windows-netfx3-ondemand-package.cabのあるフォルダを指定しました。

これで、無事インストールできました♪

2018年3月15日木曜日

プログラミングをするために必要な環境

プログラミングを今から始めたい方の、
「とりあえずパソコンを買いたいけど、どんなものを買えばいいの?」という疑問について私なりの考えをまとめています。

1.OSはWindows

基本的にはWindowsを選択するのがベストだと考えています。
なんだか世の中にはmacやLinuxを使うことをお勧めするような方も居るようですが、何故でしょう??
その方々の主張としては「Windowsで作ったものはmacやLinuxで動かない」とか「文字コードがナンチャラカンチャラ。。。」ということを言っているようです。

えぇと、、、そんなこと重要??

今からプログラムを勉強したい人にとって、自分で作るプログラムがLinuxやmacで動く必要はないと思います。
それよりも大切なのはストレスなくプログラム作りに専念できるか?
そして、どれだけ参考にできるサンプルコードやアプリが公開されているかではないでしょうか??


趣味でプログラムをするのであれば、WindowsならVisualStudioが無償で使えます。
VisualStudioはC♯など複数の言語に対応した開発ツールです。
(macにもVisualStudioはあるようです)

C言語の勉強などを独学でした方には、コンソール画面でソースをコンパイルするような作業をしている方もいると思います。これはかなり効率が悪いです。
ちゃんとした開発ツールを使えば、コンパイル時のエラーなども確認できます。せっかく便利なツールがあるのだから必ず使うべきです。
ちなみに、JAVAであればeclipceを使うことになると思います。

同様に、会社の業務の効率化のためにプログラムを勉強したいと考えている人も、Windowsを使うべきだと思います。皆さんの会社では通常業務でLinusやmacを使用されているでしょうか?
日本では基本的にWindowsを使用されていることが多いのではないかと思います。
通常業務の補佐的なプログラムを作るのであれば、日ごろ使っているWindowsでプログラムしたほうが良いですね。

会社のサーバがLinuxで、そこで使用するプログラムということなら話は変わってくるかもしれません。
ただし、プログラム初心者が会社のサーバで動くプログラムを組み込むというのは、私が上司なら絶対に許可しませんね(笑

Windowsであれば、窓の社Vectorなどのサイトには先人たちが作ってきた多くのアプリケーションが公開されています。
他の人が作ってきたアプリケーションを使って仕組みを考えることは、プログラミングの参考にもなります。

最近ではスマホでプログラミングを始めたいと言う方も居るようです。
実際にiphone用のScratch jrというのも存在します。

こちらも、個人的にはあまりお勧めできません。
プログラミングは複雑になるにつれて膨大なコードを書くことになります。
コードの全容を理解するには、ある程度以上の画面サイズは必要だと思います。
スマホやタブレットでは、自分でコードを見直すことも難しいと思います。


2.ノートパソコンではなくデスクトップ

もしかしたら、お洒落なカフェでプログラミング。。。のようなことを想像していませんか??

プログラミングは断然デスクトップパソコンが良いです。
第一にディスプレイのサイズは重要です。個人的にはCPUやメモリよりも重要です。

スマホでのプログラミングについてでも書きましたが、一度に目視できるコードが少ないと効率が悪くなります。
また、ネットでサンプルコードを見ながらプログラムすることもよくあります。
そんなときに小さな画面だとサンプルと自分のプログラムの比較も大変です。

プログラムはメソッドや関数と呼ばれる単位で処理を記述します。
このメソッド内の処理が1画面に表示されないものは読むのがとても大変です。
(「大きすぎるメソッドを作らないこと」を意識するのはプログラマの基本です。)

それに、ノートパソコンは使っていると、なんだかんだ重くなってくるのでお勧めしません。高い性能は不要ですので、是非、デスクトップパソコンを使用してください。

Google+とtwitterにブログの投稿を連動してみました

Google+とtwitterにブログの投稿を連動してみました。
うまくいくかな・・・?



うまく動いたので参考にしたサイトを紹介しておきます♪

ブログというより備忘録 
Bloggerのブログの更新に連携・連動してTwitterに自動投稿

2018年3月12日月曜日

Scratchでプログラミング その24 スクラッチアートツールを作る

Scratchの使い方解説です、今回の難易度は超Easy
前回のペイントツールの続きです。


前回作成したペイントツールは、機能しますが色の切り替えとかが含まれていないので、あまり使っても楽しくないですね・・・

正攻法でイイカンジのペイントツールを作っていくのもいいですが、スクラッチアートを作成するペインタを作ってみました。

スクラッチアートとは、黒い紙を削りながら絵を描いていくもので、黒い紙を削っていくと、カラフルな色が出てくるやつです。
scratchでスクラッチアートとか、完全オヤジギャグですみません・・・

本来の仕組みとは違いますが黒背景のパレットにカラフルペンで色をつけて表現してみます。

0.目次


  1. 変数の作成
  2. 色の設定


1.変数の作成

作り方は基本的にはペイントツールと同じです。
これは前回のペイントツールのプログラムです。

今回はペンの色をカラフルにするため変数とします。
データの「変数を作る」でペンの色という変数を用意しました。
そして、ペンが下りているときに色を指定するようにしています。

同様に、太さという変数も用意しています。

2.色の設定

ペンの色を指定します。
ペンの色をグラデーションのようにしたかったので、下のような式を用意しました。
マウスのx座標はscratchでは-240~240の範囲となっています。
ですので式の左半分がとりうる値は、-50~50の値となります。
Y座標も同様の式としています。
この式で画面の位置によって、-100~100までの数値を表現しています。

ペンの色の範囲は調べてないですが、きっとこのあたりでしょう(汗

この式をプログラムに追加して完成!
使ってみたら、簡単なわりに面白いものになってました☆

せっかくなら、元に戻すコマンドとかも実装できたらいいですね~



2018年3月11日日曜日

Scratchでプログラミング その23 ペイントツールを作る

Scratchの使い方解説です、今回の難易度は超Easy

記事をまとめたページはこちら。

Scratchはプログラム処理の中にペンという項目があったので使ってみました。

0.目次

  1. ペンの使い方を確認する。
  2. マウスの動きに合わせて線を引く
  3. マウスが押されているときに線を引く
  4. 改良するには?

1.ペンの使い方を確認する。


動きの確認のために、このような処理をネコに書いて見ます。


実行すると、ネコが移動したあとに線が引かれました。

どうやら「ペンを下ろすを」使うと、スプライトの後ろに線が引かれました。

これを利用してペイントツールを作ってみようと思います。
ペイントツールなので、マウスクリック時に線が引ければOKということにします。

2.マウスの動きに合わせて線を引く

ネコのスプライトが表示されていると邪魔なので見た目の「隠す」でスプライトを非表示にします。
また、ネコが表示されなくなるため、イベントのスタートを「旗がクリックされたとき」に変更しました。
最初のプログラムを改良して、スプライトをマウスポインタの位置へ移動させました。

これで、マウスに追従して、線が引かれるようになりました。

マウスの動きに合わせて線が引かれるようになりましたが、
いまの状態では、常に線が引かれっぱなしです。


3.マウスが押されているときに線を引く

次に、お絵かき用のペイントのイメージに近づけるためにマウスが押されている間だけ線を引くように変更します。

制御の「もし~なら○○、でなければ~」を使って、条件として調べるの「マウスが押された」を設定します。
そして、中にペンの「ペンを下ろす」「ペンを上げる」を追加しました。


これで動作しますが、旗をクリックしたときに書いた線が消えるように、処理の最初にペンの「消す」を追加します。



これでペインタの完成です。


4.改良するには?

解説はこれで終わりですがペイントツールとするなら、線を太くしたり、ペンの色を変更したりできたほうが良いですね。これらの機能はペンに含まれているので、簡単にプログラムを追加できるかと思います。

少し難しいのは、消しゴムを作ることかな?どうやったら良いでしょうか??
(背景があると大変かも!!)


今回のサンプルも公開しました。
色の変更なども追加してあります。

サンプル008 ペイント
https://scratch.mit.edu/projects/208860277/




2018年3月10日土曜日

プログラミングで何ができるのか?

今回はプログラミングの解説ではなく、プログラミングをこれから始めたい人向けの記事です。

プログラムを勉強したいという人の疑問で、勉強してみたいけどプログラミングを勉強したら何が作れるようになるのか?ということがわからないという人が多いようです。
今回は私なりの回答を考えてみました。

ここではプログラムを作ること=システムを作ることととして説明します。
厳密に言うと違うかと思いますが、プログラムの入門レベルやそれ以前の人向けですのでご容赦ください。

0.目次

  1. なんでも作れる
  2. ゲームは作れるのか?
  3. アプリ作成は作業の効率化!
  4. 現実世界のシミュレーション
  5. 言語よりアルゴリズムが大切

1.何が作れるようになるのか?

こちらの記事でも記載しましたが、極論を言えばプログラミングが出来れば、何でも作れます。

プログラムは何でも作れる

ただし、この記事を読んでいる人はプログラミングの入門レベルの方ではないかと思います。
ですので、もうちょっと具体的な作れるものについて解説します。

プログラムを始めたいという人は

  • ゲームを作ってみたい
  • 就職活動用にスキルを身につけたい
  • 学校や仕事で勉強することになった

という人が多いのではないでしょうか?
ここでは特に皆さんがイメージするゲームやアプリの作成について説明します。

2.ゲームは作れるのか?

ゲームを作りたいと言うのは若い人に多いんじゃないでしょうか?
私もこの動機でプログラムの道に入っていきました。
おそらく、ゲームを作りたい人は「こんなゲームを作りたい」というイメージがフンワリとあるのではないかと思います。

壮大なネットワークゲームだったり、格好良い3Dキャラが動きまわるアクションゲームだったり・・・

そんなゲームをすべて一人で作るとなると、相応の知識やスキルが必要です。
Webゲームを作るならJAVAやaspそしてサーバの構築
スマホで動くアプリならXaml(かな?)
それにイラストを書いたり。。。絵心がないと絶望的です orz

ですので狭義の意味でのプログラミングが出来ても、オシャレなゲームを作るのはとても難しいです。

個人的な観点では難易度別に以下のようになると思います。

【簡単なもの】
ジャンケンゲーム
マインスイーパー

難易度は低めです。
グラフィックまわりのプログラムさえ考えられれば、何とでもなると思います。

【頑張れば作れるもの】
シューティングゲーム
アクションゲーム
パズルゲーム

のような一人で遊べるゲームはプログラミングのなかで考える内容が少ないので、比較的初心者でも作成できるのではないかと思います。


【さらに知識が必要なもの】
五目並べ
マージャン
トランプなどのカードゲーム

先に紹介したゲームに比べると、対戦相手(CPU)が必要なゲームはCPUの思考を考えないといけないので難易度が高くなります。
じゃんけんゲームの難易度が低いのはCPUがバカでもOKだからです。

【一人で作ろうとするのは無謀なもの】
オシャレなグラフィックのもの
3Dゲーム
ネットワークゲーム

などなど、ユーザが増えれば何度があがるし、ネットワークを使うならサーバを作る必要が出てきたり・・・
格好良いイラストは絵心が必要だし、3DCGとなると、考えたくもないです。

ゲームのプログラムというのは複数の知識を集約したものです。
より広く、よりいろんなアルゴリズムを理解していて、必要に応じて正しく使い分けできなければ、いいものを作ることは難しいでしょう。

そんなわけで、難易度が高いゲームを作ろうとすれば一人で作るのは大変です。
もう、ほんと大変・・・

大掛かりなゲームを作りたい場合は、チームを作る必要があります。
ゲーム作成に興味あるひとは学生さんが多いのではないでしょうか?
大学であればサークルに入ればスキルアップにもなるし良いでしょう。
大学生でなくてもプログラムサークルはありますので、そういう場所を探せばいいでしょう。

ただし、チームに入っても足手まといにならないよう、最低限の知識は持ってからの方が良いでしょうね。
「今までどんなプログラム作ったことあるの?」と聞かれて「今から勉強します!」だと、チームによっては、、、

3.アプリ作成は作業の効率化!

ゲームよりも敷居が低いのがアプリケーションの作成です。

もちろんアプリケーションでも規模の大きなものや市販のものに並ぶものを作ろうとすると大変です。
ExcelやChrome、Photoshopの機能を完全に再現するとなると、非常に大変です。

でも、自分が使うためのアプリケーションなら、格好良いキャラクターもアニメーションも要りません。
つまり、必要な処理についての知識があれば作れます

ただ、初心者にとってはゲームよりも、どんなアプリが作れるのかはイメージがわかないと思います。

私のサイトでも
時速を分速度に変換するアプリ
ペイントツール
スクラッチアートツール
を作成しています。
でも、実際にはこのアプリに需要はないと思います。

例えばこんなものが作れます。
・たくさん撮った写真を、日付ごとのフォルダに分けたい
・ヤフオクでほしい商品を自動で探したい
・CDからデータをパソコンに取り込んで、曲名を自動でつける
・掲示板を巡回して、画像を収集する
・株の売り買い
・ゲームの経験値稼ぎ
・Lineで自動で返信するbot(ロボットプログラム)
などなど、、、

アプリケーションは、人間がしている単純作業を肩代わりしてくれます。
先にあげた例だけじゃなく、パソコンでする単純作業は、アプリケーションの得意分野です。

もっと本格的なアプリとなると、仕事で使用する専用のアプリケーションなどになるでしょうか。
データベースと連携して、商品一覧を作成したり、見積書を印刷する
などなど、、、
ただ、複雑なことをするのであれば、ゲームと同様に相応の知識が必要になりますね。

4.現実世界のシミュレーション

数学や物理はプログラムとの相性抜群です。
2匹のネコの速さの比較
リンゴの落下
のようなものは、このブログでも紹介しています。
面白みは全くありませんが・・・
大学の研究の分野などでは、この使い方が一番多いのでではないかと思います。

リンゴの落下は、物理の物体の自由落下についての公式を使っています。
学校の授業で習った公式の意味を理解するために、プログラムを利用すると理解が深まるのではないかと思います。

5.言語よりもアルゴリズムが大切

ここまでに作れるものについて説明してきましたが、前提条件があります。
大前提として「プログラムは貴方が理解できないものは作れません」
これは、アルゴリズムとかロジックとか言われているもののことです。

例えば、アクションゲームで

 敵に当たったときにライフを1減らす

という処理をプログラムで作る場合、
 「敵に当たる」とはどういうことか?
について説明できないといけません
(簡易的なものであればScratchでは省略できていますけど・・・)

市販されている参考書には、このような処理の書き方を書いてある本もあります。
もちろん、本を参考に作ってもいいのですが、まずは自分ならどう表現するかを考えてみてほしいです。

このようなロジックは正解は一つではありません
同じ結果になるにしても、効率が良いロジックや悪いロジックがあります。
効率の悪いロジックでも、一度プログラムを作ってから見直すと「こうすれば、もっと良くなるんじゃないか?」と気づけたりもします。
そうやって、日ごろからロジックを自力で考えることで、新しくやりたいことが出来たときに「こうすれば作れるんじゃないか?」を考えられるようになります。

よく「○○という言語を勉強したい」という人が居ますが、ここで学習すべきは言語の文法の書き方をマスターすることではなく、作りたいものをロジックで表現することです。

ですので「プログラムを勉強したいけど、どの言語を勉強すれば良い?」という方は言語は何でもいいからプログラムの数をこなすことを意識してもらいたいです。

ある程度、自分の作りたいものが明確になったら、作りたいものに向いている言語を選んでいけば良いのではないでしょうか。

2018年3月9日金曜日

Scratchでプログラミング その22 学校教材っぽいやつ リンゴが地面で跳ね返る

Scratchの使い方解説です、今回の難易度はEasy
前回のリンゴの落下シミュレーションの続きです。

記事をまとめたページはこちら。

前回は地面に落下するリンゴのシミュレーションをしました。
今回は地面で跳ねるようにします。

ものが地面に当たると跳ね返りますよね。
跳ね返るときは反発係数(だったかな?)によってどのくらい跳ねるかが変わります。


前回作成したプログラムです。
ここに今回は追記していきます。



0.目次


  1. 地面に当たる
  2. 跳ね返りを表現
  3. 当たり判定の計算方法


1.地面に当たる

地面に当たるとは、どういうことでしょうか?
リンゴの位置が、一定の高さになったとき地面に落ちたと考えることにします。

画面の下のあたりのY座標は-150くらいでした。
ですので、Y座標がー150より小さくなった場合に地面に当たったと判定します。

2.跳ね返りを表現

跳ね返ると、リンゴはどうなるでしょう?
地面にあたった瞬間に、いままで下方へ進んでいたリンゴは上方へ移動していきます。

これを公式で表現すると、上へものを投げたのと同じですね。
ここで先に用意していた変数の値を、条件に見合うように変更します。

まず、初期位置を変更します。
先ほどまでは天井が初期位置でしたが、跳ね返るので初期位置を地面に変更します。
地面はY座標なのでー150になります。

次に初速度を変更します。
最初は自由落下だったので初速度は0でしたが、跳ね返ったので最初から速さがあります。
今回は跳ね返った瞬間の速度をー0.6倍した値に変更しています。
マイナスがつくのは、反対方向(上方)へ向かう速度に変更するためです。
0.6は反発係数ですが、特に意味はありません。
リンゴの反発係数は知らないので、仮の値を設定しています。
実際のリンゴに近づけるなら、もうちょっと数値を変えてみたら良いと思います。

最後に条件を地面からスタートに変更したので、経過時間をリセットします。

プログラムにするとこんな感じです。


最初の判定式はy座標<-151としています。
これは俗に言うあたり判定をおこなっています。
プログラムを正しく動かすには重要なのですが、初心者には難しいと思うので、下に追記で書いておきます。


この追加したブロックを、シミュレーションの最後に追加しました。

これで完成!
リンゴが地面で跳ねるようになりました☆

実際のサンプルがこちらになります。
https://scratch.mit.edu/projects/207611887/


3.当たり判定の計算方法

ここからは興味がある人用です。
今回のプログラムでの地面に当たったかどうかの判定式はy座標<-151としています。


これは地味に重要です。
地面をー150と設定したのに、なぜy座標=-150じゃないのでしょうか?

まず演算が=(イコール)を使用しないのは、y座標が必ずー150ジャストになる保障がないからです。
位置の計算結果は整数になるわけではないので、計算のタイミングでy座標は-150.1などとなることもあります。ですので地面よりも低い位置として不等号での判定をしています。

また判定式にはー150ではなく-151を使用しています。
そして、条件にあった場合に、Y座標をー150に変更しています。
これは、連続で跳ね返り処理が行われないようにするための対策です。

シミュレーションでは少しずつ時間を進めながら、繰り返し位置を計算していきます。
今回は、地面に跳ね返った瞬間に速度にー0.6を掛けています。

条件によっては、跳ね返った計算のあと、次の計算までにリンゴの位置が-150まで達していない可能性があります。
その場合、連続でリンゴの跳ね返り処理が繰り返しされてしまいます。そうなると計算のたびに速度の符号が反転していきます。
これは意図した動きではないので、跳ね返り処理を行う際には、位置を判定式の範囲外であるー150に変更しています。
うーん、言葉ではわかりにくいですね。。。
詳しく考えたい人は、この条件を書き換えてプログラムを作ってみてください!

2018年3月8日木曜日

Scratchでプログラミング その21 学校教材っぽいやつ リンゴの落下シミュレーション

Scratchの使い方解説です、今回の難易度はEasy

記事をまとめたページはこちら。


今回も数式の再現してみます。
リンゴの落下シミュレーションをしてみます。



0.目次


  1. 公式の確認
  2. 初期値の設定
  3. 落下シミュレーション

1.公式の確認

高校で物理を習った人、重力の公式って覚えていますか?

速度=初速度+加速度×経過時間
位置=初期位置+初速度×経過時間+加速度×経過時間×経過時間÷2

という公式を習ったのではないかと思います。
これをそのままプログラムで再現してみます。

空中に浮いているリンゴをクリックすると、リンゴが重力に引かれて落下する様子をシミュレーションします。

2.初期値の設定

今回はネコではなくリンゴを使用します。
新しいスプライトからリンゴを選択します。



次に公式の再現に必要な変数を用意します。
データの「変数を作る」で変数を用意します。




速度
初速度
加速度
経過時間
位置
初期位置
公式で使ってるものをすべて変数で用意しました。


ここからプログラミングに本格的に入っていきます。
まずはイベントの「旗がクリックされたとき」で各変数の初期値を設定します。
「初期位置」の160は、画面上で上のほうの座標を適当に設定しました。



加速度は重力なので-9.8を設定しています。
これは公式のオキマリの値です。

3.落下シミュレーション

次に今回のメイン、落下するリンゴをプログラムで表現します。
イベントの「スプライトがクリックされたとき」を使用します。


今回は落下するアニメーションを作るので、
制御の「ずっと」で囲み変数の「経過時間」を0.2ずつ増やしています。
この0.2は特に意味はありません
シミュレーションの速さを早くしたければ、数値を大きくすればOKです。

次に、速度と位置を計算しています。
※今回のシミュレーションでは速度は実際には計算しなくても問題ありません。
次回の記事の布石です。

演算式はガリガリのゴッテゴテの式になっていますが、ただの物理の公式です。
演算のブロックを利用して式を表現しています。

最後にy座標をさきほど計算した「位置」に変更しています。

今回のプログラムはこうなります。



これまでに紹介したプログラムに比べると、比較的簡単なロジックですね。
これをそのまま実行すると、上にあったリンゴがクリックすることで下に落ちていきます。


最初はゆっくりと動き出し、時間の経過とともにスピードが速くなっていくことが視覚的に見てとれるのではないでしょうか。

大学などで延慶を行う場合、このようなシミュレーションをする場合があります。
実際には摩擦とか弾性とか、その他、もっとマニアックな条件を沢山登録することになりますが、やることはこのプログラムのように公式をシミュレーションすることが多いと思います。



2018年3月7日水曜日

プログラムは何でも作れる

プログラムをすることで、何が作れるようになるのか?

このような質問をされた場合、個人的な回答として
何でも作れる
と答えることにしています。

ボタンをポチっと押せば、お金が出てくる」プログラムだって、時間と知識とお金があれば作れると思います。

ただしそんなプログラムを作れる人は、そのプログラムの仕組みを理解している必要があります。
ボタンを押すことで、何が起きて、その結果お金が儲かるのか?
その仕組みさえ出来れば、そんな夢のようなアプリも作ることが出来るでしょう。

もちろん、そんなアプリ作れれば皆が作ってるだろうし、無理に決まってます。。。

と、言いたいところですが、実際に作った人が居たんですよ。


この記事に掲載されている男性は、市販の競馬の予想ソフトを改良して、競馬に負けないプログラムを作成したのです!!

ぃゃー、裁判になっていて大変そうですが、マジですごいと思います。

もちろん市販の競馬ソフトというのは、必ず的中するものではないと思います。
そのソフトを独自の理論で改良して必ず儲かるように修正していく・・・

これもプログラムと言って良いでしょう。

プログラムとはプログラマが理解できないものは作れません
この方は競馬というギャンブルと、競馬予測ソフトの仕組みについて精通していたのではないでしょうか。
プログラミングとは、単にプログラムをパソコンで書くことではなく、その仕組みを理解して、コンピュータ上で表現することだと思います。

皆さんも、プログラミングを極めていけば、こんな夢のようなアプリケーションも作れるようになるかもしれませんよ☆

2018年3月5日月曜日

Scratchでプログラミング その20 学校教材っぽいやつ どちらが早い?

Scratchの使い方解説です、今回は作成法を記載していません。
需要があるようなら公開しますが、特に新しいことはしていません。




前回、学習教材ぽいものを作ろうとして速度の時速と分速の変換プログラムを公開しました。
でも、実際の教材としてはこんな感じのもののほうが、利用しやすいんじゃないでしょうか?

https://scratch.mit.edu/projects/204816373/

小学校のころの速度の計算の問題イメージで作りました。
画面の矢印をクリックすると、ネコが動き出します。

【問い1】
速度3mで進むネコAと速度5で進むネコBが居ます。
ネコBはネコAよりも10の時間だけ待ってから動き出します。
距離100まで先に到着するのはどちらのネコですか?

のような問題を、むかーし勉強したような気がします。
どちらの電車が速いのか?みたいな問題だったような?

こういう問題は視覚化して確認できると良い様な気がしますね。

今回のプログラムではネコの速さと待ち時間、移動距離はユーザが変更できるようにしておきました。
本当の教材なら、ネコは動きっぱなしよりも1秒ごとに停まって、位置を確認できるほうが、ゆっくり確認できて良い様な気がします。



2018年3月4日日曜日

Scratchでプログラミング その19 学校教材っぽいやつ 時速を分速にする(公式を利用する・文字を結合する)

Scratchの使い方解説です、今回の難易度はEasy

記事をまとめたページはこちら。

将来的に学校でプログラミングを使った授業をしていくということで、
どんなことに使うのかなと。

今回は単純な速度の変換プログラムです。
時速を入力すると、分速や秒速に変換してみます。


決まった速度の計算をするだけではプログラムとしてイマイチなので、
ネコをクリックすると、ユーザが指定した時速を分速に変換するようにしようと思います。

0.目次

  1. ユーザから設定可能な変数の準備
  2. 計算結果の表示
  3. 答えっぽく言わせる

1.ユーザから設定可能な変数の準備

ユーザが入力する方法はいくつかあると思いますが、今回は変数をそのまま使えるようにします。
データの「変数を作るボタンから変数を作成します。
今回は変数名を「時速(km)」としました。

変数を作成すると、画面上に変数が表示されると思います。


この変数を何度かクリックすると、下にバーが表示されるようになります。
このバーを動かすと、変数の値が変更できます。
今回は、このバーを使って速度を決めてもらうことにします。

このサンプルでは時速36kmを指定しています。

2.計算結果の表示

時速と分速の変換は、時速÷60ですね。
今回はそれをネコに話させるだけです。

今回はイベントの「旗がクリックされたとき」ではなく「このスプライトがクリックされたとき」を使用しました。
これは、いちいち旗をクリックしなくても、ユーザが変数を何回も変更して再計算できるようにするためです。
結果の表示には見た目の「Hello!と言う」を使用しています。
で、Hello!の部分を計算結果に置き換えました。

計算結果は演算の「□/□」を使います。
「/」は「÷」の意味です。
これってプログラムでは常識ですが、一般的にどうなんだろう??

3.答えっぽく言わせる

ここまでで、計算結果をネコに話すようにできましたが無愛想です。
まずは、ユーザが指定した時速を話してもらいます。

単純につなげるとこんな感じ。

もちろん、こんな無愛想な感じになります。

無愛想な36じゃなくて「時速36kmは・・・」とかって表示したいですよね。
こんな風に文字を繋げて話させたいときは演算の「HelloとWorld」を使用します。

Helloの側に”時速”と文字を入れ、Worldの側に時速を入れます。

さらに組み合わせた文字の後ろ側に”kmは"をつなげます。

全部つなげると、こんな感じになりました。

これで、ネコの愛想がよくなりました。

答え側も同様に修正します。

 
 

今回作成したサンプルは以下で公開しています。
https://scratch.mit.edu/projects/207564242/
サンプルでは他にもkmをmに変換したり、秒速からの変換もできるようにしました。

4.勉強になるのかな?

今回作成したプログラムは動きも何もない簡単なものです。
学習教材ぽさをイメージして、一番簡単に作れそうなものということで公式を計算するプログラムを作りました。
やってることはExcelでも出来ることですね。

本当はもっと「視覚的に何かを検証できるもの」が面白いと思いますが、
作成難度が高いので、簡単なものとして作ってみました。

今回意識したのは、ただ単に公式を使うことでどんな数値を入れても答えが導き出せることを理解することができるかなって感じです。