まずは、潜水夫を移動するために、ボタンの判定を作った。
オクトパスはボタンが2つなので、マンホールの半分の判定処理で済む。済むはずだった。
いざ、作ってみると、ちょっと右ボタンのところに触れただけで、潜水夫がワープしたかのように一番右端に移動した…
タッチパネルに触ったという判定が、触っている間、ずっと続いてしまい、超高速で連打したのと同じになっていた。
幸い、GR.TOUCH命令は、渡した変数にタッチしているかどうかの情報を返してくれるので、タッチしたままだと、移動しないように処理を加えた。
さらにまだアクションがある。
潜水夫が一番右端に居るときに、さらに右ボタンを押すと財宝をゲットするアクションが起きる。
このとき、アニメーションパターンを表示して、その間は移動も追加での財宝ゲットもできないように処理。
一度船から潜ると、潜水夫は財宝を1つでもゲットしないと、船には戻れない。これもフラグ処理を追加。
このフラグが立っていたら、財宝を入れる袋を潜水夫の横に表示させた。
完成版からのソースなので、すでにいろいろな処理が入っているが、だいたいこんな感じ。
単純に移動するだけじゃないので結構ごちゃごちゃしたソースになってしまった…
GR.TOUCH touched,x,y ! ボタンをタッチしたままでは反応しないようにフラグ処理 IF !touched & touch_f=1 THEN touch_f=0 % タッチパネルから一度手を離すとフラグリセット x=x/rate:y=y/rate IF touched & touch_f=0 & ptake_f=0 THEN % タッチフラグがオフで、金塊取り始めてなければ移動判定 IF y>=210 & y<=290 THEN IF x>=30 & x<=100 THEN touch_f=1 % タッチフラグをON IF pos>1 THEN pos-- IF pos=1 & pbag_f=0 THEN %金塊フラグがないと船に戻れない pos=2 ENDIF IF pos<=1 pos=1 IF pbag_f=1 THEN % 金塊を持ってたら bjump=1 GOSUB bag_score % 点数処理へ pbag_f=0 % 金塊フラグをオフ ENDIF ENDIF ENDIF ELSEIF x>=475 & x<=545 THEN touch_f=1 % タッチフラグをON IF pos<=5 THEN pos++ ELSEIF pos=6 THEN pbag_f=1 % 金塊袋フラグを立てる ptake_f=1 % 金塊取り始めたフラグを立てる bagpos=7 GR.SHOW p_obj[bagpos] ENDIF ENDIF ENDIF
趣味のプログラムでなければ、リファクタリングするところだが、処理速度にも問題もないので、このまま放置したw
思いつくままに付け足して、動かして、スパゲッティーなプログラムにしていく。でも動けばいい。
うん。これぞ小学生、中学生の時に体験したものだ。なんて楽しいんだろうw