“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。

63.ゲーム&ウォッチのオクトパスを作ろう その4

まずは、潜水夫を移動するために、ボタンの判定を作った。
オクトパスはボタンが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