パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

プチコン3号講座 上下画面のスクロールとジャンプの実装

2015-08-16 | プチコン3、4、BIG
第11回 ジャンプを実装してみます。
ドット単位で壁との衝突判断をしています。

<プログラムの目標>
 左右の移動、ジャンプの実装、BGに書かれた壁を認識してジャンプ、移動を行う。
 XSCREEN 4を使用。

<塔の構造>
 30x100 移動可能な場所はBGの番号は0を使用
 
<ゲームの内容>
 スティック 左右移動
 Bボタン  ジャンプ
 一番上部に移動で、ステージクリア
 
<グローバル変数>
 RS 擬似関数利用
 CX,CY キャラの位置、ドット単位 0,0は塔の左上隅
 CN キャラのスプライト番号
 AX,AY 空中での速度
 GT 重力
 TX 移動速度、空中で減少
 BC キャラクタの基本番号
 TM 擬似的な経過時間

<関数>
 CK(X,Y)
  キャラの4隅にあるBGの番号を加えて返す。何もなければ0

 MOVE X1,Y1 OUT X0,Y0
  X1,Y1まで移動時、壁にぶつかる直前の移動を位置をX0,Y0で返す
  ぶつからなければ元と同じ値が返す
  線を引くアルゴリズムをそのまま使っていて、そこはブラックボックスです。
  
 PRND(N)
  擬似乱数を返す
  RSを予めグローバル変数で定義要

 ENDING
  終了時の演出

<メインループ>
 ステッィク(左右)とボタンの検知
 現在地が地面と接地、Bボタンが押してあれば、上向きの速度設定、左右の速度保持
 地面がなければ、重力に相当する速度を下に加え、左右の値を左右の速度に加算
 地面に接地していれば、移動値を設定
 移動範囲を計算する関数を呼出
 キャラクターの移動
 移動方向のキャラクターに変更
 背景をスクロール
 最上部に到達していればエンディング処理呼出
 時間の同期処理、擬似時間の表示

 ソース見てわからなかった場所があれば参考までに



<アルゴリズムに関して>
 ちょっとした事で簡単なることがあります。
 最初、壁の判定を個別に上下左右に作っていたのですが
 逆にキャラクタの4隅が壁以外の時は当たっていないと判断して
 移動予定座標が当たっていなければ移動に変更させるとかなりシンプルになりました。

<余談>
 晩に悩んで、翌日の朝に解決することもよくあります。
 あと、作り直し覚悟で手を動かしてみることが大切です。
 手が止まりがちな時は、ボーッとしている時間に進めてみてはどうでしょう。
 (実はこのプログラムもボーッとした時に取りかかっています。)


 最初はおっとりした感じのゲームだったのですが
 ちょっとメトロイドっぽいSF設定の演出を
 加えてみたら案外これが楽しくて膨れてしまい
 2画面に収めるためにプログラムを詰め込んでしまいました。








最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。