できるがな(3)-3
もどる すすむもどる                  メニューにもどる

「できるな」

神経衰弱を作りたいっ!(3)

さて、ではバグをとるためにお勉強していきましょう

ちくしょう、そういう手で来るのか...新しいパターンだ。

これから解説をしていくことにしましょう。

--グローバル宣言を行います。これは後に続くハンドラにも有効です。
--このようにハンドラの外に書く方法も便利ですよ。
--cardListとはカードの番号を格納しているリストです。
--myListとは自分がめくったカードの番号を入れます。これを用いて当たり判定を行います
--uraCardCastとは裏向けのカードのキャストです。別にグローバルにする必要はないのですが
--もしもキャストの増減によって番号が変化したときに備えて、ここで宣言しています。
--waitTimeとはひっくり返すまでの待ち時間を制限しています。
global cardList,myList,uraCardCast,waitTime
--
on startMovie
 --1から20までのカードをパペットにして、さらに裏向けのキャストにしておきます
 repeat with m=1 to 20
  puppetSprite m,TRUE
  set the castNum of sprite m to uraCardCast
  updatestage
 end repeat
 --それぞれの値を設定しておきます
 set cardList=[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10]
 set myList=[0,0]
 set uraCardCast=11
 set waitTime=3

 --ここで後に述べるハンドラshaffleを呼び出し、カードを混ぜます
 shaffle
end
緑色の部分を変更すれば、色々設定が変わるのですね。

そうです!さて、次はshaffleハンドラですが、これは説明は済んでいますね。じゃ、次はスコアスクリプト……あの裏向けカードに書いたスクリプトを検証してみましょう。

on mouseUp
 --先ほどのスクリプトとは違う場所に書いているので、グローバル宣言が必要です
 global CardList,MyList
 --the clickOnとはクリックしたキャストのスプライト番号を返します
 --それをmySpNumという変数にぶち込みます

 put the clickon into mySpNum
 --ここからが難しいですよ!
 --myList……つまりめくったカードのスプライト番号を格納しているリストですが
 --それの1項目が0ならば……つまり何もめくっていないときですね。

 if getat(Mylist ,1) = 0 then
  --myListの1番目に、変数mySpNum(さっき作ったばかりですよ)を入れます。
  setAt mylist, 1, mySpNum
  --スプライト番号myspNumの画像をカードリストに入っているキャストと交換します
  --これでめくれているように見えるのです
  --カードリストの番号がキャストの番号にそのまま使えるところがポイントです

  set the castNum of sprite mySpNum to getAt (CardList,mySpNum )

 else
 --そうでない場合……つまり2枚目をめくっているときは
   --myListの2項目にそのスプライト番号を入れます。
  setAt Mylist , 2,mySpNum
  --同様に表を向けます
  set the castNum of sprite mySpNum to getAt (CardList,mySpNum )
  updatestage
  --判定のルーチンにとばします。
  hantei
 
 end if
end
確かに言われてみれば「ふ〜ん」って感じのスクリプトですね。でもわかるだけマシなのかしら(笑)

そうですよ。おぽろげながら理解する程度でも十分大丈夫ですよ。まずは理解して、それをまねていくことから考えましょうね。さて、次の課題ですが、2枚ひっくり返ったカードが合っているかどうかの判断ですね。さぁ、じっくりと理解していきましょう!太字のif文斜体字のrepeat文がポイントですよ!

on hantei
 --myListの中身が互いに違っている時は……
 if getAt(cardList,getAt(myList,1))<>getAt(cardList,getAt(myList,2)) then
  startTimer
  repeat while the mouseUp
   if the timer < waitTime*60 then
    nothing
   else
    set the castNum of sprite getAt(myList,1) to uraCardCast
    set the castNum of sprite getAt(myList,2) to uraCardCast
    updatestage
   end if
  end repeat
  set the castNum of sprite getAt(myList,1) to uraCardCast
  set the castNum of sprite getAt(myList,2) to uraCardCast
  updatestage
 else
  beep 2
 end if
 set myList=[0,0]
end
ううむ、難しいけど、がんばって理解してみるわ!
できるがなメニューに戻る
© Akira SAno 1997
All rights reserved.
homeできるなメニューにもどる