プログラムの 中身 を 詳 しくみてみよう
右向き 矢印 ボタンを 押 して助走し、スペースボタンを 押 してボールを投げるゲームです。 それぞれのスプライトについて 解説 します。
概要
大まかな内容
を 押 して開始します。
- キーボードの左右の 矢印 キーでボールを持った 猫 を動かし助走します。
助走が長い 程 、投げた時のボールの速さを速くします。
助走をまったくしない場合の速さは秒速14m、助走をすると 増 えていき秒速28mを最大とします。
一度右向き 矢印 キーを 離 したり左向き 矢印 キーを 押 したりして止まったり、 左に進んだりしたら速さを秒速14mに 戻 します。
- スペースキーを 押 したらボールを投げます。
スペースキーを 押 したら助走をやめ、スペースキーを 離 したらボールを投げます。
スペースキーを 押 してから 離 すまでの時間で投げる方向(地面との角度)を決めます。
押 している時間が長いほど角度を大きくします。角度は9度から90度までとします。
- ボールを投げる 際 に 猫 が 踏切線 を 越 えていたらファールにします。
ボールが最初に地面に着いた場所と 踏切線 との 距離 を 記録 とします。
ボールが最初に地面に着いたら 判定員 がそこまで 移動 し、 記録 を言います。
ボールの動き方
- 投げたときのボールの速さを上方向の速さと右方向の速さにわけます。
例 えば投げた時のボールの速さが秒速28m、投げた角度が40度の場合は
上方向(y方向)の速さが28×sin(40度)=秒速18m
右方向(x方向)の速さが28×cos(40度)=秒速21.45mになります。
- ボールのx 座標 は右方向(x方向)の速さのぶんだけ 増 やし続けます (右方向には一定の速度で 移動 します)。
ボールのy 座標 はまず上方向(y方向)の速さのぶんだけ 増 やし続けますが、 重力 加速 度(9.806m/s²)のぶんだけ上方向(y方向)の速さを 減 らしていきます。
上方向(y方向)の速さは徐々に0になり、その後は下方向に速くなっていきます。
y 座標 は 減 り続け、地面に落ちて止まります。
実際 に地球上でボールを投げた場合には空気 抵抗 などの 影響 を受けますが、 本プログラムでは空気 抵抗 などの 影響 はないものとしています。
Startボタン
主な動き
がクリックされたらコスチュームをStartにする。
- クリックされたら各スプライトへStart を送り、 非 表示にする(各スプライト Startを受け取ってゲーム開始)。
- ボールから 完了 が送られてきたらコスチュームをRetryにして表示する。
がクリックされたとき
-
説明
- ゲームスタートの 準備 をする。
必要な 処理
- 座標 の 初期化
Startの 表示
マウスポインターが上に乗ったとき色を 変 える コードの 詳細
-
x 座標 (横の 表示 位置 )を0、 y 座標 ( 縦 の 表示 位置 )を40にします。
コスチュームをStartにして 表示 します。 (ゲーム終了時は 非表示 になっているため)
マウスポインターがこのスプライトに 触 れているときは色を 変 え、 離 れたら元の色に 戻 します。
このスプライトがクリックされたとき
-
説明
-
スタートボタンがクリックされたら各スプライトに Startを送りゲームを開始します。
コードの 詳細
-
Startを送ります。
ボタンを 隠 します。
完了 を受け取ったとき
-
説明
-
ボールが止まったらRetryボタンを表示します。
コードの 詳細
-
x 座標 を0、 y 座標 を40にします。
コスチュームをRetry にします。
ボール
主な動き
がクリックされたら 各変数 を 初期化 して助走を開始。
- 助走中は左向き 矢印 (←)キー、右向き 矢印 (→)キーが 押 されたらPlayerと同じように左右に 移動 する。
- 右向き 矢印 (→)キーが 押 されている間は初速を 増 やしていく。
右向き 矢印 (→)キーが 押 されていなかったり、左向き 矢印 (←)キーも 押 されていたりした場合は 初速を14(m/秒)に 戻 す。
右へ 移動 している間だけ初速を 増 やしていき、 止まったり左へ 移動 したりしたら初速を 初期値 へ 戻 す。 - スペースキーを 押 したらボールを投げる。
この時、スペースキーを 押 してから 離 すまでの時間によって投げる角度を決める(長いほど角度が大きくなる)。
踏切線 を 越 えてしまっていたら(x 座標 > 踏切線 のx 座標 だったら)ファールとする。 - スペースキーを 離 したら、投げた 位置 、投げた時のボールの速さ、投げた時の角度が決まる。
ボールの速さは 右方向の速さと 上方向の速さへ 分解 する。
右方向には右方向の速さで進み続ける。
上方向にはまず 上方向の速さで 移動 を開始し、 重力 加速 度の分だけ 遅 くなっていき、そのうち速さがマイナスとなり落ちていく。 - ボールの高さが0になったら 跳 ね返る。この時、上方向の速さを50%、 右方向の速さを40%に 減 らす( 跳 ね返る度に 遅 くなり最終的に止まる)。
最初に落ちた場所と 踏切線 との 距離 が 記録 となる。 - ファールでなかった場合のみ、最初に地面に落ちた時に 着地を 計測員 へ送る。
- 記録 、 飛 んだ 距離 、 投げた時の時速、 投げた角度を 履歴 リストへ 追加 する。
「Start」を受け取ったとき
-
説明
-
左右の 矢印 キーで助走し、スペースキーを 押 してボールを投げます。
必要 な 処理
- 1. 変数 の 初期化
- 2. ペンで書かれたボールの 軌跡 を 消 す
- 3. 助走
- 4. 投げる角度を決定
- 5. 投げた時の初速と投げる角度から右方向の速さと上方向の速さを計算
- 6. 投げた後のボールの動きの 処理
コードの 詳細
-
このスプライトの他のスクリプトを止めます。
x 座標 を-210、 y 座標 を-144(初期 位置 )にします。
ペンの色と太さを 設定 します。
ボールの 軌跡 を 消 します。(前回投げた 際 の 軌跡 を 消 します)
ボールを表示します。
猫 の上にボールが表示されるようにするために 最前面へ移動するを 置 きます。
各変数 を 初期化 します。
スペースキーが 押 されるまで助走します。
投げた時のボールのx 座標 を投げた場所として 記憶 しておきます。
スペースキーを 離 すまでの時間で投げる角度を決定します。
投げたボールの動きは水平方向(右方向)と 垂直 方向(上下方向)にわけて計算します。
ここでは投げた時のボールの速さと角度からボールの右方向の速さと上方向の速さを計算しています。
右方向の速さは「速さ×cos(地面との角度)」で求められます。
上方向の速さは「速さ×sin(地面との角度)」で求められます。
画面 の左 側 に表示する 値 を計算します。
投げたを送ります。
投げるを実行します。
初期化
-
説明
-
各変数 に 初期値 を 設定 します。
スペースキーが 押 されるまで助走
-
説明
-
スペースキーが 押 されるまで左向き 矢印 キー、右向き 矢印 キーで動かせるようにします。
Playerと同じように動きます。
必要 な 処理
- 1. 左右 矢印 キー(← / →)が 押 された時の左右への 移動
- 2. 初速を計算
- 3. ファールの 判定
コードの 詳細
-
スペースキーが 押 されるまで左向き 矢印 キー、 右向き 矢印 キーで動かせるようにします。
右向き 矢印 キーが 押 されている間、下記のAの 処理 をして右に動かします
- A :
x 座標 を2ずつ 変 えて右に動かします。
ただし 画面 の 右端 よりも右には進めなくするようにするために、 x 座標 が210よりも小さい場合のみ x 座標 を 変 えるようにします。
右に動いている間はボールの初速 を秒速0.7mずつ 増 やします。
もし 初速が28よりも 大きくなってしまったら28に 戻 します。
右向き 矢印 キーが 押 されていなかったら(右向き) 初速を秒速14mに 戻 します。 -
左向き 矢印 キーが 押 されている間、下記のBの 処理 をして左に動かします。
- B :
x 座標 を-2ずつ 変 えて左に動かします。
ただし 画面 の 左端 よりも左には進めなくするようにするために、 x 座標 が-210よりも大きい場合のみ x 座標 を 変 えるようにします。
ボールの初速を秒速14mに 戻 します。
ここで14に 戻 さないと右向き 矢印 キーと左向き 矢印 キーの両方が 押 されている間も初速が 増 えていってしまいます。 -
スペースキーが 押 された時にx 座標 が 踏切線 のX 座標 を 越 えていたら ファールを1にします。 ファールの 値 は他のスプライトからも 参照 されますので、すべてのスプライト用にしています。
スペースキーを 離 すまでの時間で投げる角度を決定
-
説明
-
スペースキーを 押 している間、ボールを投げる角度を 増 やしていきます (スペースキーを 押 している時間が長いほど上に向かって投げます)。
投げる角度は最大で90度(真上)とします。
コードの 詳細
-
スペースが 押 されている間、投げた角度 (ボールと地面との角度)を2度ずつ 増 やします。
角度が 増 えるスピードが速すぎるため、2度 増 やす度に0.01秒待つようにしています。
1回で 増 やす角度を小さくして待つ時間を短くしたほうが角度を細かく 変 えられるのでよいのですが、 待つ時間をこれ以上短くしても 実際 に動かしてみると指定した待ち時間よりも長くかかってしまい、 角度が 増 えるスピードが 遅 すぎてしまうため、0.01秒ごとに2度ずつ 増 やすようにしています。
角度が90度を 越 えてしまった場合は90度に 戻 します。
90度に 戻 す 処理 をはずし、90度より大きい角度で投げた場合に どのようにボールが 飛 ぶのかをためしてみましょう。
表示する 値 を計算
-
説明
-
投げた時のボールの速さ、右方向の速さ、上方向の速さを秒速?mから時速?kmに 変更 しています。
投げる
-
説明
-
投げた時には 垂直 方向では上に進み、 重力によって速さが9.807m/秒(地球の場合)ずつ 遅 くなっていきます。
速さがプラスの間は上に向かって進みますが、 マイナスになった後は下に落ちていき、高さが0mになったら地面で 跳 ね返ります。
水平方向は右に同じ速さで進みます。
ボールの高さが0mになるまでに右に進んだ 距離 が 飛距離 となります。
実際 に地球上でボールを投げた場合には空気 抵抗 などの 影響 を受けますが、 本プログラムでは空気 抵抗 などの 影響 はないものとしています。
コードの 詳細
-
ボールが止まったを0にします。
回転速度を20度にします。
ボールが止まったが 1になるまで下記のAの 処理 をくり返します。
- A :
ボールは 飛 んでいる間、右に回転するようにします。
1回のループで右に回転速度度回転させます。
最初に地面に着くまでは回転速度を20度とし、着地後は5度にしています。
飛距離 は 右方向の速さ(m/秒)の分だけ 増 やしていきます。
飛距離 を 増 やす量は計算上では 右方向の速さ(m/秒)×ループ1回分の時間(秒)にすべきですが、 画面上 で自然な速さに見えるようにするために 右方向の速さ(m/秒)× 速度調整 係数 (=0.1)(秒)としています。
ボールのx 座標 を 投げた場所(投げた場所のx 座標 )+ 飛距離 × 距離 と 座標 の 比 にします ( 飛距離 の単位はメートルなので 画面上 の 座標 に 変換 しています)。
現在のボールの高さから ループ1回分の高さの 変化量 を足しても0より大きい(地面につかない) 場合は空中での 処理 を実行します。
そうでない場合(高さが0になり地面に着く場合)は 空中での 処理 を実行します。
ボールが止まったが0のままであれば次のループを実行します。
そのままくり返すとボールの動きが速すぎてしまうため、 ループが1回実行されるたびに0.01秒待つようにして動きを見やすくしています。 -
ボールが止まったが 1になっていればくり返し 処理 を終了し、 完了 を送ります。
空中での 処理
-
説明
-
上方向の速さにしたがって ボールの高さを 変更 し、 ボールの高さをもとに 画面上 でのy 座標 を決定します。
上方向の速さは 重力 加速 度にしたがって 変 わっていきます。
投げてから最初に地面に着くまではボールの 軌跡 をペンで 描画 します。
コードの 詳細
-
上方向の速さにしたがって ボールの高さを 更新 します。 この時も 飛距離 を計算する 際 に使用した速度調整 係数 を使用します。
ボールの高さをもとにボールの y 座標 を 更新 します (ボールの高さ→Y 座標 を実行します)。
上方向の速さを重力 加速 度× 速度調整 係数 だけ 減 らしていきます (上に向かって進んでいる時は 遅 くなっていき、下に向かって進んでいる時 (落ちている時)は速くなっていきます)。
もしx 座標 > 234または y 座標 >174である場合は ボールの 座標 が 画面 の外になるため、ボールを 隠 します。
ボールの 座標 が 画面内 である場合は表示し、 投げてから最初に地面に着くまではボールの 軌跡 をペンで 描画 します。
一度着地した後は回転速度を5度になるため、 20度であれば一度も地面に着地していないと 判断 して 軌跡 を 描画 しています。
着地した時の 処理
-
説明
-
ボールの高さを0にし、 ボールのy 座標 を高さが0の時の 座標 にします。
着地するまでは上方向の速さはマイナスであり、 着地したらプラスにして 跳 ね返るような動きにします。
着地するたびに上方向の速さ、 右方向の速さの大きさを 減 らします。
初めて着地した 際 には他のスプライトへ着地を送り、 飛距離 や 記録 を計算して 履歴 に 追加 します。
コードの 詳細
-
ボールの高さを 上方向の速さ ×速度調整 係数 の分だけ 変 えてしまうと マイナスになってしまうので着地した時の 処理 では ボールの高さを0にします。
ボールの高さ→Y 座標 を 実行してボールのy 座標 を 変更 します。 この時は必ず高さが0の時のy 座標 になります。
ボールが地面に当たって 跳 ねる度に上方向の速さを50%、 右方向の速さを40%に 減 らします。 また上方向の速さをプラス(上に向かって進む)にします。
回転速度が20度だった場合は、 初めての着地なので下記のAの 処理 をします。
- A :
回転速度を5度に 減 らします。
ボールのx 座標 を「落ちた場所」として 記憶 しておきます。
もしファールでない場合(ファールが0の場合)、 ボールが 飛 んだ 距離 と 記録 を計算し、 他のスプライトに着地を送ります。
飛 んだ 距離 は 飛距離 を四捨五入して整数にした 値 です。
記録 は 踏切線 のX 座標 と 投げた場所との 距離 を 飛距離 から引いた 値 になります。 「 踏切線 のX 座標 と 投げた場所との 距離 」の単位は 座標 なので 距離 と 座標 の 比 (3.6)で 割 ってメートルに 変換 しています。
ファールの場合は 記録 の計算やメッセージの送信はしません。
履歴 作成を実行して、 今回の 記録 を 履歴 に 追加 します。 -
上方向の速さの 絶対値 と 右方向の速さがどちらも1より小さくなった、 もしくはx 座標 が234より大きくなった( 画面 の外で着地した)ら ボールが止まったを1にします。
「x 座標 が234より大きい場合」を入れないと、 ボールが 画面 の外にあって見えない場合でもバウンドが終わるまで待たなくてはなりません。
ボールの高さ → Y 座標
-
説明
-
ボールの高さ(m)をもとにボールの y 座標 を 変更 します。
履歴 作成
-
説明
-
記録 、 飛 んだ 距離 、投げた時の時速(km/h)と角度を 履歴 に 追加 します。
履歴 は最大5件まで 保存 され、5件を 超 えると古いものから 削除 します。
コードの 詳細
-
履歴 要素 に 1回の投球についてのそれぞれの情報を文字列として 追加 して、 1つの文字列をつくり、それを 履歴 のリストに 追加 していきます。
ファールが0なら(ファールでなければ) 履歴 要素 に 記録 を 追加 します。
ファールが0以外なら(ファールなら) 記録 ではなく 「ファール」を 追加 します。
飛 んだ 距離 (投げてから最初に地面に着くまでの 距離 )、 投げた時の時速、投げた角度を 履歴 要素 に 追加 します。
履歴 要素 を履歴に 追加 します。
履歴 の長さが5を 超 えてしまったら5になるまで先頭から 削除 していきます。
プレーヤー
主な動き
- 左(←)キー、右(→)キーが 押 されたら左右に 移動 する。
- 左右に 移動 している間、コスチュームをくり返し切り 替 えて歩いているようにみせる。
- スペースボタンが 押 されたら止まり、それ 以降 は左(←)キー、右(→)キーを 押 しても動かないようにする。
「Start」を受け取ったとき
2つの 処理 を並行でおこないます。
-
説明
-
プレーヤーを開始 位置 に 置 き、スペースキーが 押 される (ボールを投げる)まで左向き 矢印 キー、右向き 矢印 キーで動かせるようにします。
コードの 詳細
-
x 座標 を-220、y 座標 を-140(初期 位置 )にします。
スペースキーが 押 されるまで下記のAの 処理 をくり返します。
- A :
左向き 矢印 キーが 押 されている場合、下記のBの 処理 をします。
逆に右向き 矢印 キーが 押 されている場合、下記のCの 処理 をします。 - B :
向きを-90度(左)に向けます。
x 座標 を-2ずつ 変 えて左に動かします。
ただし 画面 の 左端 よりも左には進めなくするようにするために、x 座標 が-220よりも大きい場合のみx 座標 を 変 えるようにします。
Playerのx 座標 は常にボールのx 座標 -10としているため、 -220を 左端 としています。 - C :
向きを90度(右)に向けます。
x 座標 を2ずつ 変 えて右に動かします。
ただし 画面 の 右端 よりも右には進めなくするようにするために、 x 座標 が200よりも小さい場合のみ x 座標 を 変 えるようにします。
Playerのx 座標 は常にボールの x 座標 -10としているため、200を 右端 としています。 -
スペースキーが 押 されたら向きを90度(右)に向けます。
-
説明
-
左向き 矢印 キー、右向き 矢印 キーが 押 されたらcostume1と costume2をくり返し切り 替 え、歩いているように見せます。
コードの 詳細
-
コスチュームをcostume1にします。
スペースキーが 押 されるまで下記のAの 処理 をくり返します。
- A :
左向き 矢印 キーまたは右向き 矢印 キーが 押 されている場合、下記のBの 処理 をします。
左向き 矢印 キー、右向き 矢印 キーのどちらも 押 されていなかったらcostume1にします。 - B :
次のコスチュームにします。
切り 替 えが速くなりすぎないように、 コスチュームを切り 替 えたら0.1秒待ちます。 -
スペースキーが 押 されたら(ボールを投げたら) コスチュームをcostume1にします。
計測員
主な動き
から着地 が送られてきたら、ボールが落ちた地点へ1秒間で 移動 し、 記録 を言う。
移動 中はコスチュームを切り 替 え、歩いているようにみせる。から 投げたが送られてきた時に、 投げた時の時速と 投げた角度がよい場合はGood!と言う。
から投げた が送られてきた時に、 踏切線 を 越 えてしまっていたらファールと言う。
「Start」を受け取ったとき
-
説明
-
初期状態 にします。
コードの 詳細
-
このスプライトの他のスクリプトを止めます。
x 座標 を210、 y 座標 を-145にします。
コスチュームをgiga-aにします。
前回のセリフを 消 すためにセリフなしを0秒言わせています。
投げたを受け取ったとき
-
説明
-
投げた時に白線を 越 えていたら「ファール!」と言います。
投げた時の時速と投げた角度がよかったら (98km/hより速くて39度~49度なら)「Good!」と言います。
コードの 詳細
-
まず0.5秒待ちます。
ファールが1ならコスチュームを> giga-dにして「ファール!」と言います。
ファールではなく、投げた時の時速が98km/hより速く 且 つ 投げた角度が39度~49度だったら「Good!」と1秒言います。
着地を受け取ったとき
-
説明
-
ボールが落ちた場所に 移動 し、 記録 を言います。
コードの 詳細
-
1秒でx 座標 を 落ちた場所に、 y 座標 を-145にします。
このスプライトの他のスクリプトを止めます。
x 座標 を210、 y 座標 を-145にします。
移動 した後にコスチュームをgiga-bにします。
記録 mと言います。
-
説明
-
歩いているように見せるために4つのコスチュームを0.2秒ごとに 順番 に切り 替 えています。
地球ボタン
このボタンが 押 されたらステージを地球にします。
主な動き
- クリックされたらコスチュームを 選択 にして 背景 を地球にする。
重力 加速 度を9.807m/s²にする。月ボタンへ 地球を 選択 を送る。 - 月ボタンから地球を 選択 が送られてきたらコスチュームを 非選択 にする。
がクリックされたとき
-
説明
-
右上に表示されるように 座標 を 設定 します。
コスチュームを 選択 ( 選択 されていることを示す)にします。
重力 加速 度を地球の重力 加速 度(9.806m/s²)にします。
速度調整 係数 を0.1にします。
「Start」を受け取ったとき
-
説明
-
右上に表示されるように 座標 を 設定 します。
基本的 にはこの 処理 は 必要 ありませんが、 クリックした 際 に 誤 って 位置 をずらしてしまっても元の 位置 に 戻 るようにしています。
このスプライトがクリックされたとき
-
説明
-
コスチュームを 選択 ( 選択 されていることを示す)にします。
背景 を地球にします。
重力 加速 度を地球の重力 加速 度(9.806m/s²)にします。
速度調整 係数 を0.1にします。 地球と月でどちらも0.1にしているため、 設定 しなおす 必要 はないのですが、 違 う 値 にした場合に 備 えて 設定 するようにしています。
地球を 選択 を送ります。
月を 選択 を受け取ったとき
-
説明
-
コスチュームを 非選択 ( 選択 されていないことを示す)にします。
月ボタン
主な動き
- クリックされたらコスチュームを 選択 にして 背景 を月にする。
重力 加速 度を1.622m/s²にする。 地球ボタンへ月を 選択 を送る。 - 地球ボタンから月を 選択 が送られてきたらコスチュームを 非選択 にする。
がクリックされたとき
-
説明
-
右上に表示されるように 座標 を 設定 します。
コスチュームを 非選択 ( 選択 されていないことを示す)にします。
「Start」を受け取ったとき
-
説明
-
右上に表示されるように 座標 を 設定 します。
基本的 にはこの 処理 は 必要 ありませんが、 クリックした 際 に 誤 って 位置 をずらしてしまっても元の 位置 に 戻 るようにしています。
このスプライトがクリックされたとき
-
説明
-
コスチュームを 選択 ( 選択 されていることを示す)にします。
背景 を月にします。
重力 加速 度を月の重力 加速 度(1.622m/s²)にします。
速度調整 係数 を0.1にします(地球と月でどちらも0.1にしているため、
設定 しなおす 必要 はないのですが、 違 う 値 にした場合に 備 えて 設定 するようにしています)。
月を 選択 を送ります。
地球を 選択 を受け取ったとき
-
説明
-
コスチュームを 非選択 ( 選択 されていないことを示す)にします。
履歴 表示ボタン
主な動き
- クリックされたら 履歴 の表示/ 非 表示を切り 替 える。
がクリックされたとき
-
説明
-
右上に表示されるように 座標 を 設定 します。 履歴 のすべてを 削除 して 隠 します。
履歴 が表示されているを0にします。
「Start」を受け取ったとき
-
説明
-
右上に表示されるように 座標 を 設定 します。
履歴 を 隠 します( 削除 はしません)。
履歴 が表示されているを0にします。
このスプライトがクリックされたとき
-
説明
-
履歴 が表示されていない( 履歴 が表示されている=0)なら 履歴 を表示して 履歴 が表示されているを1にします。
そうでない場合は 履歴 を 隠 して 履歴 が表示されているを0にします。
踏切線
「Start」を受け取ったとき
-
説明
-
踏切線 の 座標 を 設定 し、x 座標 を 踏切線 のX 座標 に 保存 しておきます。
ステージ
がクリックされたとき
-
説明
-
背景 を地球にします。
「Start」を受け取ったとき
-
説明
-
すべてのスプライトで使う 変数 のいくつかを 初期化 します。
投げた角度は 初期値 を0度ではなく9度にしています。