welcome: please sign in
location: "クレーンゲーム"の差分
6と26のリビジョン間の差分 (その間の編集: 20回)
2011-05-31 12:21:53時点のリビジョン6
サイズ: 989
編集者: masahiko
コメント:
2011-06-02 05:37:35時点のリビジョン26
サイズ: 5071
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 3: 行 3:
ゲーム作りを通してプログラム作成の手順を学びます。 ゲーム作りを通してプログラム作成の考え方を学びます。(オブジェクト指向)
行 5: 行 5:
Aボタンを押すとクレーンが動き始め、
Bボタンを押すとクレーンが下がり、
うまくぬいぐるみをつかんだら運ぶことができます。
ゲーム内容
 {{{
Aボタンを押すとクレーンが動き始め、Bボタンを押すとクレーンが下がり、うまくぬいぐるみをつかんだら運ぶことができます。
 }}}
----
=== クレーンの動きを考える ===
うまく操作したときのクレーンの動きを考えます。
 . {{attachment:crane21.png}}
順に箇条書きにするとこのようになります。(シナリオ)
 1. Aボタンを押す
 1. クレーンが右に動く
 1. Bボタンを押す
 1. クレーンが下に動く
 1. 下端についた
 1. クレーンが上に動く
 1. 上端についた
 1. クレーンが左に動く
 1. 左端についた
 1. 停止

図に書くとこのようになります。(状態図)
 . {{attachment:crane01.png}}
個々の状態に対応するスクリプトに分け、
一度に1つのスクリプトがチクタクで動作するように考えると分かりやすい。

 . {{attachment:crane02.png}}
青の点線で囲んだ範囲を1つのスクリプトとして作成します。
 . スクリプト1~4はどれか1つが'''チクタク'''で動作すると考えます。
 . ボタンが押されたときは、対応するスクリプトを'''1回'''実行します。

スクリプト1はこのように書けます。
クレーンの絵の向きを変えずに動かす方法は2つあります。
 . 座標を設定する方法で書いた場合
 . {{attachment:crane07.png}}
 . 進行方向を設定する方法を用いる場合
 . {{attachment:crane08.png}}
スクリプト2は下方向の移動で、下端についたときの処理を
テストタイルを使って書きます。
 . {{attachment:crane09.png}}
スクリプト3、スクリプト4も同様に書けます。

Aボタンが押されたときは、スクリプト1をスタートすればよい。

Bボタンが押されたときは、スクリプト1を停止し、スクリプト2をスタートすればよい。
 . {{attachment:crane10.png}}
行 10: 行 52:
=== クレーンの動きを考える ===
 . {{attachment:catch.png}}
状態図で考えるとこのようになります。
 . {{attachment:crane01.png}}
個々の状態に対応するスクリプトを作り
順に1つのスクリプトがチクタクで動作するようにします。
青の点線。
 . {{attachment:crane02.png}}
----
=== 動作全体 ===
Aボタンが押されたときの処理を加えれば、とりあえず完成。
=== 全体の動作 ===
通常、Aボタンが押されるのは停止状態のときである。

クレーンが動き始める前に、
初期位置に移動するなどの処理が必要なら
スクリプト1をスタートするまえに行う。

したがって状態図はこのようになる。
行 24: 行 63:
上の状態図で考えられていないとき処理。 上の状態図で考えられていない場面を考える。(別シナリオ)
行 26: 行 65:
 . {{attachment:crane04.png}} 例えば、次の場合の処理が記述されていません。
 * スクリプト1が動作しているときにBボタンが押されなかった。
 * 停止状態でないときにAボタンが押された。

スクリプト1が動作しているときにBボタンが押されないままだと、
クレーンが右端を通り過ぎて画面から消えてしまいます。

 . 右端に着いたら左に進む、とすれば状態図はこのようになります。
 . {{attachment:crane22.png}}
 . スクリプト1に処理を追加することで修正できます。

停止状態でないときにAボタンが押された場合、
次の処理を行えば最初から行われるようにできる。
 . スクリプト1~4を停止する。
 . クレーンを初期位置に戻す。
 . スクリプト1をスタートする。

他にも動作がおかしな点があるかもしれません。
 . 発見するにはシナリオを
 . 動作を検討するには状態図を
使うとよい。
行 29: 行 88:
ぬいぐるみの状態は次の3つが考えられます。
 . 止まっている。
 . クレーンでつかまれている。
 . クレーンから開放されて落ちている。
状態図にするとこのようになります。
行 30: 行 94:
状態の数が少なく、状態の変わり方も単純なので、
1つのスクリプトで書けそうです。

クレーンでつかまれているときを考えます。
 . ぬいぐるみの座標をクレーンの座標と同じにすれば、クレーンの動きと一緒にぬいぐるみを動かすことができます。
 . {{attachment:crane15.png}}
 . クレーンでつかまれているかどうかの判定は'''タートルへの距離'''を用いて行えます。
 . '''タートルへの距離'''は2つのオブジェクトの中心位置の距離を求めるものです。
 . {{attachment:crane12.png}}
 . このように記述すると、距離が30より小さいときぬいぐるみがクレーンと一緒に動きます。
 . {{attachment:crane11.png}}
 . クレーンの中心位置と距離の数値をうまく調整して、赤丸の範囲にぬいぐるみの中心位置が入っているかどうか判定できるようにします。
 . {{attachment:crane14.png}}

クレーンゲーム

ゲーム作りを通してプログラム作成の考え方を学びます。(オブジェクト指向)

ゲーム内容

  • Aボタンを押すとクレーンが動き始め、Bボタンを押すとクレーンが下がり、うまくぬいぐるみをつかんだら運ぶことができます。


クレーンの動きを考える

うまく操作したときのクレーンの動きを考えます。

  • [添付]

順に箇条書きにするとこのようになります。(シナリオ)

  1. Aボタンを押す
  2. クレーンが右に動く
  3. Bボタンを押す
  4. クレーンが下に動く
  5. 下端についた
  6. クレーンが上に動く
  7. 上端についた
  8. クレーンが左に動く
  9. 左端についた
  10. 停止

図に書くとこのようになります。(状態図)

  • [添付]

個々の状態に対応するスクリプトに分け、 一度に1つのスクリプトがチクタクで動作するように考えると分かりやすい。

  • [添付]

青の点線で囲んだ範囲を1つのスクリプトとして作成します。

  • スクリプト1~4はどれか1つがチクタクで動作すると考えます。

  • ボタンが押されたときは、対応するスクリプトを1回実行します。

スクリプト1はこのように書けます。 クレーンの絵の向きを変えずに動かす方法は2つあります。

  • 座標を設定する方法で書いた場合
  • [添付]

  • 進行方向を設定する方法を用いる場合
  • [添付]

スクリプト2は下方向の移動で、下端についたときの処理を テストタイルを使って書きます。

  • [添付]

スクリプト3、スクリプト4も同様に書けます。

Aボタンが押されたときは、スクリプト1をスタートすればよい。

Bボタンが押されたときは、スクリプト1を停止し、スクリプト2をスタートすればよい。

  • [添付]


全体の動作

通常、Aボタンが押されるのは停止状態のときである。

クレーンが動き始める前に、 初期位置に移動するなどの処理が必要なら スクリプト1をスタートするまえに行う。

したがって状態図はこのようになる。

  • [添付]


動作詳細

上の状態図で考えられていない場面を考える。(別のシナリオ)

例えば、次の場合の処理が記述されていません。

  • スクリプト1が動作しているときにBボタンが押されなかった。
  • 停止状態でないときにAボタンが押された。

スクリプト1が動作しているときにBボタンが押されないままだと、 クレーンが右端を通り過ぎて画面から消えてしまいます。

  • 右端に着いたら左に進む、とすれば状態図はこのようになります。
  • [添付]

  • スクリプト1に処理を追加することで修正できます。

停止状態でないときにAボタンが押された場合、 次の処理を行えば最初から行われるようにできる。

  • スクリプト1~4を停止する。
  • クレーンを初期位置に戻す。
  • スクリプト1をスタートする。

他にも動作がおかしな点があるかもしれません。

  • 発見するにはシナリオを
  • 動作を検討するには状態図を

使うとよい。


ぬいぐるみの動作

ぬいぐるみの状態は次の3つが考えられます。

  • 止まっている。
  • クレーンでつかまれている。
  • クレーンから開放されて落ちている。

状態図にするとこのようになります。

  • [添付]

状態の数が少なく、状態の変わり方も単純なので、 1つのスクリプトで書けそうです。

クレーンでつかまれているときを考えます。

  • ぬいぐるみの座標をクレーンの座標と同じにすれば、クレーンの動きと一緒にぬいぐるみを動かすことができます。
  • crane15.png

  • クレーンでつかまれているかどうかの判定はタートルへの距離を用いて行えます。

  • タートルへの距離は2つのオブジェクトの中心位置の距離を求めるものです。

  • crane12.png

  • このように記述すると、距離が30より小さいときぬいぐるみがクレーンと一緒に動きます。
  • crane11.png

  • クレーンの中心位置と距離の数値をうまく調整して、赤丸の範囲にぬいぐるみの中心位置が入っているかどうか判定できるようにします。
  • crane14.png

クレーンゲーム (最終更新日時 2012-06-14 12:49:54 更新者 masahiko)