Scratch2(スクラッチ2)で壁打ちゲームを作ろう(7回目)
myway@おじさんです。
今回は、障害物のオレンジを追加したいと思います。
動作環境について
OS:MAC OS X(Windowsでも操作はほとんど変わりません)
エディタ:Scratch offline editor(ver.456)
1.準備
前回保存したプロジェクトを開いて下さい。
画面右上の「ファイル」をクリックしてから、「ひらく」をクリックして、プロジェクトを開いて下さい。
2.オレンジの追加
「新しいスプライト」をクリックして「Orange」を追加します。
3.「Orange」のスクリプト
「Orange」のスクリプトです。
簡単に説明すると、「Orange」はサイズが小さいので、大きくしてから、らんすうをつかって表示する場所を変えています。「Apple」のスクリプトとほぼ同じです。
実は、このままだと問題があります。
「Apple」と「Orange」が、かぶって表示してしまう可能性があります。
では、どうすればよいかを書いていきます。
4.「Apple」と「Orange」のスクリプト
「緑のはたがクリックされたとき」ブロックの最後に、メッセージ「Appleをおいた」ブロックを追加しました。
(メッセージブロックはつくっています)
次に「Orange」のスクリプトです。
(1)「緑のはたがクリックされたとき」ブロックには、サイズの変更だけにし、「xざひょう...」ブロックは消しています。
(2)「リンゴをおいたをうけとったとき」ブロックを追加。
これで、「Apple」の場所が決まってから、「Orange」をおくようにしています。
(3)「Orange」をおく場所を決める。
(4)おいた場所が「Apple」にふれていれば、おきなおすよう、「Appleにふれたではないまでくりかえす」ブロックで、おきなおすようにしています。
(5)メッセージの「オレンジをおいた」ブロックを追加。
なぜ、メッセージを使っているかを説明します。
以前、「プログラムは順番にしかうごかない」と説明したと思います。
もう一つルールがあります。
「どのプログラムが先に動くかは、コンピュータ任せ」になっています。
「緑のはたがクリックされたとき」ブロックが、色々なスプライトにあります。
しかし、どのブロックが一番はじめに動くかは、コンピュータにしかわかりません。
よって、スクリプトで「やってほしい順番」を指示する必要があります。
今回は、「Apple」→「Orange」の順番でおいて欲しいので、「メッセージ」を使って順番を指定しています。
5.「Ball」と「Orange」の順番
「Ball」が動きだしたあとに「Orange」があらわれたらおかしいので、「Ball」と「Orange」の順番も指定したいと思います。
「Ball」のスクリプトです。
注)変更した部分のみ表示しています。見えない部分は変更していません。
(1)「緑のはたがクリックされたとき」ブロックに「ずっと」ブロックがありましたので、一旦はなします。
(2)はなした場所に「みため」の「まえにだす」ブロックをおきます。
これは、「Orange」スプライトを最後に追加したので、このままでは、「Ball」が「Orange」の後ろに表示されてしまいます。
ここで、「まえにだす」ブロックを入れる事で、「Orange」の前に「Ball」が表示されるようになります。
(3)「ずっと」ブロックの上に「オレンジをおいたをうけとったとき」ブロックをおきました。
では、「緑のはた」をクリックして、動かしてみましょう。
「Apple」と「Orange」は重ならないでしょうか?
また、「Ball」が「Orange」の後ろをとおらないでしょうか?
今回はここまでです。
作ったら、必ず、「ほぞん」をするように心がけて下さい。
それと、今回も動画がありますので、よければ、参考にしていただければと思います。
次回は、「Apple」と同じように、「Orange」も「はね返える」ようにしたいとおもいます。
最後まで読んで頂いてありがとうございます。
皆さんに少しでもお役に立てれば幸いです。
<<壁打ち(6回目) | 壁打ち(8回目)>> |
Scratch2(スクラッチ2)で壁打ちゲームを作ろう(6回目)
myway@おじさんです。
前回の続きで、ボールが当ったとき、はね返える向きを変える内容について説明したいと思います。
動作環境について
OS:MAC OS X(Windowsでも操作はほとんど変わりません)
エディタ:Scratch offline editor(ver.456)
1.準備
前回保存したプロジェクトを開いて下さい。
画面右上の「ファイル」をクリックしてから、「ひらく」をクリックして、プロジェクトを開いて下さい。
2.どこから当ったのか?
まずは、「Apple」に「Ball」が、どの方向から当ったのかを調べる必要があります。
では、どのようにして調べるのか?
それは、「Ball」が「Apple」に当った時、「Ball」から見て「Apple」がどの方向にあるかを調べることでわかります。
「もしAppleにふれたなら」ブロックと、「向き」ブロックを使えばできそうです。
下の図を見てください。
「Apple」は丸に近い形をしていますので、わかりやすくするために、緑の線で書いています。
この緑の四角の中に、「Ball」が入ってきたらはね返えるスクリプトを動かすとイメージしてください。
次に、青い線ですが、どの方向から当ったかを判断する線として見てください。
例えば、「Ball」が1の方向から当ったら、上にはね返り、2の方向から当ったら右へはね返ります。
ここで思い出して欲しいのですが、前回、前々回で書いた、「横のはね返り」と「縦のはね返り」です。
1または3の方向から当った場合は、「横のはね返り」
2または4の方向から当った場合は、「縦のはね返り」
をすれば良い、という事になります。
上の内容をふまえて、スクリプトを作ります。
3.「Ball」のスクリプト
「Ball」のスクリプトです。
変更したのは2点です。
(1)へんすう「Ballのむき」を追加
(2)「もしAppleにふれた=0」ブロックの中のスクリプトを変更
(1)に関しては、そのままですが、(2)に関して、もう少し説明します。
・「Ballのむきをむきにする」ブロック
このブロックは、はね返える前の「Ball」のむきをへんすうに保存しています。
・「Appleへむける」ブロック
このブロックは、「Apple」から見て「Ball」がどこに当ったかを判断するため、一時的に「Apple」に方向を向けています。
・「もしむき>45かつむき<136またはむき>-136かつむき<-45」ブロック
このブロックで、「Ball」がはね返える向きを判定しています。
ここで、再度、図を見てください。
「むき>45かつむき<136」が「図の4」の範囲、「むき>-136かつむき<-45」が「図の2」の範囲になるのがわかりますか?
4.計算してみる
下の図を見てください。
例えば、こういう動きだった場合を考えます。
図に角度を書いてみます。
1は、「45ど」で「Apple」に当たります。
2で、「Ball」を「Apple」へむかせます。真横に当ったので「90ど」となります。
「90ど」で当ったので、「360-むき」ブロックが動きます。
向きの計算は、「360-45=315」となります。
ちなみに「315ど」は「-45ど」と同じむきです。
(Scratchでは、むきの変換を自動で行ってくれるので、計算した値をそのまま使えます。)
3は、はね返った後です。
このように、スクリプトに実際の値を当てはめてみると、正しいか、まちがっているかがわかりやすくなります。
余談ですが、今回のスクリプトを使えば、モンスタースト○イクみたいなゲームが作れるかも知れません。
今回はここまでです。
作ったら、必ず、「ほぞん」をするように心がけて下さい。
それと、今回も動画がありますので、よければ、参考にしていただければと思います。
次回は、リンゴだけでなく、オレンジやバナナなど、他の障害物を置いてみたいとおもいます。
最後まで読んで頂いてありがとうございます。
皆さんに少しでもお役に立てれば幸いです。
<<壁打ち(5回目) | 壁打ち(7回目)>> |
Scratch2(スクラッチ2)で壁打ちゲームを作ろう(5回目)
myway@おじさんです。
前回の続きで、障害物にボールが当ったときの動きについて説明したいと思います。
動作環境について
OS:MAC OS X(Windowsでも操作はほとんど変わりません)
エディタ:Scratch offline editor(ver.456)
1.準備
前回保存したプロジェクトを開いて下さい。
画面右上の「ファイル」をクリックしてから、「ひらく」をクリックして、プロジェクトを開いて下さい。
2.なにがおかしかったのか?
答えとしては、「Ball」が「Apple」にあたった時、「Ball」がはね返える向きがおかしいのです。
下の図をみてください。
今のスクリプトでは、上の様な動きをします。
「Ball」が右上から当ったら、左上ににはね返ってしまいます。
では、正しい動きはとは?
右上から当ったら右下にはね返えるのが正しい動きと思います。
3.どうすればよいのか?
以前、「Paddle」のはね返えるスクリプトを考えた時のように、計算式で答えを出す事ができます。
「Paddle」の時のはね返りは「横へのはね返り」でした。
今回は、「縦へのはね返り」になります。
下の図で考えてみましょう。
1の「Ball」の向きが「225」だった場合、「Apple」に当って跳ね返った後の「Ball」の向きは「135」となります。
では、式にしてみます。
「225+135=360」
「縦のはね返り」の場合、はね返える前の向きとはね返った後の向きを足すと「360」になります。
この式をスクリプトで書ける形に変えると、
「225+135=360」
→「225+135-225=360-225」
→「135=360-225」
→「360-225=135」
となります。
4.「Ball」のスクリプト
「Apple」に「Ball」が当ったとき、縦にはね返えるように変更します。
変更したのは、「もしAppleにふれたなら」の中にある「180-むきどにむける」を「360-むきどにむける」に変更しました。
ここで、「緑のはた」をクリックして動かしてましょう。
「Apple」に「Ball」が当ったら、縦にはね返えると思います。
今回はここまでです。
作ったら、必ず、「ほぞん」をするように心がけて下さい。
それと、今回も動画がありますので、よければ、参考にしていただければと思います。
次回は、リンゴの上に当たれば上へ、右に当たれば右へ、はね返えるようにしたいと思います。
最後まで読んで頂いてありがとうございます。
皆さんに少しでもお役に立てれば幸いです。
<<壁打ち(4回目) | 壁打ち(6回目)>> |
Scratch2(スクラッチ2)で壁打ちゲームを作ろう(4回目)
myway@おじさんです。
前回の続きで、障害物を置いてみたいと思います。
動作環境について
OS:MAC OS X(Windowsでも操作はほとんど変わりません)
エディタ:Scratch offline editor(ver.456)
1.準備
前回保存したプロジェクトを開いて下さい。
画面右上の「ファイル」をクリックしてから、「ひらく」をクリックして、プロジェクトを開いて下さい。
2.障害物となるスプライトの追加
障害物として、「りんご」をおきます。
「あたらしいスプライト」の横にあるアイコンをクリックして、カテゴリー「もの」にある「Apple」を選択してから、画面右下の「OK」ボタンをクリックします。
3.「Apple」のスクリプト
大きさを「90%」にして、表示する場所を画面上の方にランダムで表示するようにしています。
4.「Ball」のスクリプト
「Apple」に「Ball」が当ったときにはね返えるよう、スクリプトを変えます。
変更したのは、へんすう「Appleにふれた」を追加。
「もしPaddleにふれたなら」ブロック一式をコピーして、「Paddle」を「Apple」に変えただけです。
ここで、「緑のはた」をクリックして動かしてましょう。
「Apple」に「Ball」が当ったらはね返えると思います。
今回はここまでです。
作ったら、必ず、「ほぞん」をするように心がけて下さい。
それと、今回も動画がありますので、よければ、参考にしていただければと思います。
実は、まだ完成ではありません。
気づいた人がいるかも知れませんが、「Ball」が「Apple」にあたった時に少しおかしい動きをしている事がわかりますか?
答えはここでは書きませんが、なにがおかしいのかを考えてみてください。
次回は、そのあたりを書きたいと思います。
最後まで読んで頂いてありがとうございます。
皆さんに少しでもお役に立てれば幸いです。
<<壁打ち(3回目) | 壁打ち(5回目)>> |
Scratch2(スクラッチ2)で壁打ちゲームを作ろう(3回目)
myway@おじさんです。
前回の続きで、「Paddle」の中に「Ball」が入ってしまうのを対応したいと思います。
ただし、今回の内容は、一つの方法として見て欲しいと思います。
動作環境について
OS:MAC OS X(Windowsでも操作はほとんど変わりません)
エディタ:Scratch offline editor(ver.456)
1.準備
前回保存したプロジェクトを開いて下さい。
画面右上の「ファイル」をクリックしてから、「ひらく」をクリックして、プロジェクトを開いて下さい。
それと、「Ball」のスクリプトを表示しておきます。
2.なぜ、「Paddle」の中に「Ball」が入るのか?
原因は、「Paddle」の大きさと、「Ball」の移動する長さが原因です。
とりあえず下の画像を見て下さい。
この画像は、「Ball」の動きを書いています。
1の「Ball」が開始、2の「Ball」は跳ね返ったあとになります。
順番に考えていきます。
(1)1の「Ball」は「Paddle」にふれていないので、「10ほうごかす」が動きます。
(2)「Ball」が「10ほ」うごいたあと「Paddle」にふれているので、「もしPaddleにふれたなら」スクリプトがうごいて「むき」が変わり、「10ほうごかす」がうごきます。ここで、2の「Ball」の場所に移動します。
(3)2の「Ball」の場所に動いたあと、まだ「Paddle」にふれています。
これが原因で、「もしPaddleにふれたなら」スクリプトが動いて、向きが左下になり、10ほうごきます。
(4)さらに、まだ「Ball」が「Paddle」にふれているので、また、上にはね返り、3の場所にうごきます。
この、(2)〜(4)のくりかえしで、「Ball」が「Paddle」の中をうごいてしまいます。
3.では、どうすればよいのか?
ここで、対応方法を考えてみます。
(例1)「Ball」の「10ほうごかす」を大きくする。
うごく長さを大きくする事で、はね返った後、「Paddle」にふれないようにする方法です。
この方法だと、「Ball」が早く動くので、ゲームとして、難しいものになってしまいます。
(例2)「Paddle」のサイズを小さくする。
上の(例1)の考え方の逆で、「Paddle」を小さくする事で、はね返った後に「Paddle」にふれないようにする方法です。
この方法だと、「Paddle」や「Ball」の大きさを決めるまで、時間がかかってしまいますし、同じ様な事を、他のプロジェクトでも行うとなると、とても面倒な事になってしまいます。
上の2例は、あまりよくない対応方法と思いますので、プログラミングで対応したいと思います。
4.スクリプトを書くまえに
どうやって対応するのかを考えてみたいと思います。
まず、原因として、
「1回はね返った後、Paddleにふれていて、もう1回はね返える」
となるとおもいます。
では、どうすれば良いかというと、原因の逆を考えれば良いのです。
「1回はね返った後、Paddleにふれていても、はね返らない」
となると思います。
これを覚えておいて、スクリプトを作ります。
5.スクリプトを書いてみる
スクリプトは下のようになります。
もとのスクリプトから、けっこう変わりました。
変更した部分を説明します。
(1)へんすう「Paddleにふれた」の追加
へんすう「Paddleにふれた」を追加しています。
このへんすうは、「0」であれば「はね返える前」、「1」であれば「はね返った後」という意味を持たせたへんすうとして作っています。
(2)「ずっと」ブロックの上に「Paddleにふれた」へんすうに「0」を入れる
これがないと、「Ball」が「Paddle」にあたっても、はね返らない可能性があります。
理由は、この「Paddleにふれた」へんすうには、なにが入っているかわかりません。
もしかしたら「1」が入っているかも知れません。
なので、最初に入っていて欲しい値を入れておきます。
少し専門的な話になるのですが、これは、「へんすうの初期化(しょきか)」と言って、プログラミングをする上で、必要な手順です。
へんすうを使う場合は、この初期化(しょきか)を行う様にしましょう。
(3)「もしPaddleにふれたなら」ブロックを変更
今までは「もし...」ブロックでしたが、「もし...でなければ」ブロックに変えています。
このブロックを使う事で、「Ball」が動いたあと「Paddleにふれた場合」と「Paddleにふれない場合」の2つの動きを書く事ができます。
今回の場合、「Paddle」から「Ball」がはなれた場合、へんすう「Paddleにふれた」に「0」を入れる必要があるので、このブロックを使っています。
(4)「もしPaddleにふれたなら」の中に「もしPaddleにふれた=0なら」ブロックを追加
このブロックは、1回はね返った後、連続ではね返らない様にしています。
へんすう「Paddleにふれた」が「0」の場合(Paddleにふれていない状態)、はね返えるよう、向きを変え、へんすう「Paddleにふれた」に「1」を入れます。
「Paddleにふれた」が「1」の場合(Paddleにふれた状態)、はね返らないよう、向きを変えるスクリプトを動かさないようにしています。
今回はここまでです。
作ったら、必ず、「ほぞん」をするように心がけて下さい。
それと、今回も動画がありますので、よければ、参考にしていただければと思います。
次回は、画面内に物をおいて、障害物を作りたいと思います。
最後まで読んで頂いてありがとうございます。
皆さんに少しでもお役に立てれば幸いです。
<<壁打ち(2回目) | 壁打ち(4回目)>> |
Scratch2(スクラッチ2)で壁打ちゲームを作ろう(2回目)
myway@おじさんです。
前回の続きで、「Paddle」で「Ball」をはね返すスクリプトを作ります。
注意点として、角度の計算をしますので、角度がわからない人は難しいと思いますが、勉強してみても良いかも知れません。
動作環境について
OS:MAC OS X(Windowsでも操作はほとんど変わりません)
エディタ:Scratch offline editor(ver.456)
1.準備
前回保存したプロジェクトを開いて下さい。
画面右上の「ファイル」をクリックしてから、「ひらく」をクリックして、プロジェクトを開いて下さい。
2.「はね返す」には?
Scratchには、「スプライトに当ったらはね返える」ブロックはありません。
(「はしにあたったらはねかえる」ブロックはありますが)
よって、その部分をスクリプトで作る必要があります。
いつも通り、そのままスクリプトを出してもいいのですが、少し、考えてみます。
まず、「Ball」が「Paddle」にあたったら、どのようなうごきをするのかを考えてみます。例えば、
や
といった動きになると思います。
ようは、「Paddle」にあたった時の角度によって、移動する向きが変わるという事です。
では、どうするのかというと、この角度は計算で出す事ができます。
では、下の画像で考えてみます。
左から右へ移動する場合です。
例えば、1の「Ball」の向きが「135」だった場合、「Paddle」に当って跳ね返った2の「Ball」の向きは「45」となります。
他の例として、1の「Ball」の向きが、「110」だった場合、「Paddle」に当って跳ね返った2の「Ball」の向きは「70」となります。
(なぜそうなるかは、とても難しくなるので、省略します。)
ここで、ある法則がある事に何か気づきますか?
1の「Ball」の角度と、「Paddle」に当ったあとの2の「Ball」の角度を足すと「180」になるという法則です。
式で表すと、
「135+45=180」
となります。
では、逆の右から左も考えてみましょう。
「Paddle」に当たる前の1の「Ball」向きが「225」だった場合、「Paddle」に当ったあとの2の「Ball」の向きは「315」になります。
この場合の式で表すと
「225+315=540」
ここから、この式を変換します。
角度は、「360ど」と「0ど」は同じ角度ですので、下の式のように変換できます。
「225+315=360+180」
これだと、わかりにくいので、「=」の右と左、それぞれ360を引いてみます。
「(225+315)-360=360+180-360」
→「(540)-360=180」
→「180=180」
→「135+45=180」
見覚えのある式になりました。
ただし、このままでは、プログラムとしてスクリプトには書けません。
3.スクリプトに書けるようにする
では、スクリプトに書けるようにするにはどうすれば良いか考えます。
プログラム全般に言える事ですが、「答え」が「=」の右にくるように式を考えないといけません。
上では、
「135+45=180」
という式を書きましたが、「=」の右は「180」となっています。
この「180」は「答え」でしょうか?
プログラムとしては「いいえ」となります。
今、知りたい答えは「45」が知りたい答えです。
なので、式を変換して、答えが「45」になる式を考えないといけません。
では、変換してみます。
「135+45=180」
から、「=」の右と左、それぞれ「135」を引きます。
「135+45-135=180-135」
→「45=180-135」
「=」の右と左の値を入れ替えます。
「180-135=45」
これで変換ができました。
ちなみに、変換方法は「一次方程式(いちじほうていしき)」をつかって変換しています。
知らない人は、一度調べてみてください。
4.スクリプトを書いてみる
では、スクリプトは下のようになります。
ずっとブロックの中に「もしPaddleにふれたなら」ブロックを追加しています。
それと、「もしPaddleにふれたなら」ブロックの中には、先ほど考えた式を入れて、向きを変えています。
では、緑のはたをクリックしてうごかしてみましょう。
「Ball」が「Paddle」に当ったらはね返えると思います。
今回はここまでです。
作ったら、必ず、「ほぞん」をするように心がけて下さい。
それと、今回も動画がありますので、よければ、参考にしていただければと思います。
実は、今回のスクリプトは完成ではありません。
動かしているうちにわかると思いますが、「Paddle」に当たる場所によって、「Ball」が「Paddle」の中を移動してしまいます。
次回は、その原因と対応方法について書きたいとおもいます。
最後まで読んで頂いてありがとうございます。
皆さんに少しでもお役に立てれば幸いです。
<<壁打ち(1回目) | 壁打ち(3回目)>> |
Scratch2(スクラッチ2)で壁打ちゲームを作ろう(1回目)
myway@おじさんです。
今回から壁打ちゲームを作成したいと思います。
動作環境について
OS:MAC OS X(Windowsでも操作はほとんど変わりません)
エディタ:Scratch offline editor(ver.456)
完成イメージ
今回作成するのは、以下のようなゲームにしたいと思います。
緑のバーを左右に動かして、弾を反射させて、フルーツに当てるゲームです。
プログラミングとして、色々勉強になると思いますので、今回は、このようなゲームにしました。
1.準備
プロジェクトをしんきで作成して下さい。
画面左上の「ファイル」をクリックしてから、「しんき」をクリックして、あたらしいプロジェクトを作って下さい。
次に、初めから表示しているネコは使いませんので、削除します。
画面左下のネコを「右クリック」し、表示されたウィンドウの「さくじょ」をクリックします。
2.「Paddle」を追加
弾を跳ね返すためのバー「Paddle」を追加します。
「あたらしいスプライト」の横にあるアイコンをクリックして、カテゴリー「もの」にある「Paddle」を選択してから、画面右下の「OK」ボタンをクリックします。
Paddleが追加されます。
今回は、この「Paddle」を利用しますが、他のスプライトでも構いません。
できるのであれば、自分でスプライトを自分で作っても構わないとおもいます。
3.Paddleを動かしてみる
では、Paddleを動かすスクリプトを作っていきます。
Paddleを動かすスクリプトはこちらです。
内容としては、
・最初に表示する場所を指定。
・回転方向を「回転しない」を指定。
・左矢印キーを押せば、左に移動
・右矢印キーを押せば、右に移動
となります。
4.ボールの追加
上のPaddleと同じように操作して、ボールを追加します。
追加した結果が下のようになります。
5.ボールを動かしてみる。
では、ボールを動かすスクリプトを作って行きます。
ボールを動かすプログラムはこちらです。
内容としては、
・ボールの大きさを小さくする。
・右斜め上へ向ける。
・回転方向を「回転しない」を指定。
・最初に表示する場所を指定。
・「ボールを動かして、はしにふれたら跳ね返る」を繰り返す。
となります。
今回はここまでです。
作ったら、必ず、「ほぞん」をするように心がけて下さい。
それと、今回も動画がありますので、よければ、参考にしていただければと思います。
次回は、「Paddle」にボールが当った時のスクリプトを作ります。
ただ、「角度(かくど)」の計算をしますので、まだ習っていない場合は、難しいかもしれません。
ただ、知っておいて損はないと思いますので、これを機に勉強してもいいのではないでしょうか?
最後まで読んで頂いてありがとうございます。
皆さんに少しでもお役に立てれば幸いです。
壁打ち(2回目)>> |