本体を傾けることでボールを転がし、道から落ちないようにゴールまで運んでいくタイムを競うゲームです。
私の自己最高タイムは6.26秒です。
公開キー【 4X2KX22NE 】
1画面プログラムJH規格(MAX336文字)の範囲内でボールの動きに拘りました。
画面を傾けて操作する場合にはジャイロセンサーを使うのが一般的ですが、プチコン4の場合は蓄積誤差による精度面の問題があるためプレイ中にGYROSYNCが必要になってしまいます。
こういった微妙な操作を要求するゲームではジャイロセンサーだと思ったような動きにはならないのです。
したがって、モーションセンサーを使用した方が良いと私は思います。
ACCEL関数の戻り値を何倍かしてボールの速度にしてしまえばこの手のゲームは簡単に作れますが、それだとボールの動きに違和感が出てしまいます。
そもそもモーションセンサーの戻り値というのは何を示しているのかという所から考える必要があります。
これは本体にかかっている加速度をX(左右)、Y(前後)、Z(上下)方向にどれだけかかっているかを示しています。
本体が静止している場合は加速度が0ではなく重力加速度gが加わっているのですが、それをX、Y、Z方向に分解した値が本体静止時のACCEL関数の戻り値となっています。(そのため3つの戻り値を合成すればgとなる)
ボールを自由落下させる場合はボールにかかる加速度はg(重力加速度)となるわけですが、坂道をボールが転がる場合は抵抗を無視すれば坂道の角度をθとした場合は、g sin θとなります。
本体静止時のACCEL関数の戻り値が重力加速度を1とした場合のg sin θの値を示しています。
モーションセンサーというのは加速度センサーなのだから加速度を示しているのは当然なのですが、最初に書いたような「ACCEL関数の戻り値を何倍かしてボールの速度にする」というのは加速度を速度で表してしまうためボールの動きに違和感が出てしまうわけです。