Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2009-03-21

ゴトとゴスブだよ?!

| 19:57

 マウスの位置を取得できたら、後の話は意外と簡単。

 クリックした駒の上下左右にきがあるかどうかを調べて、あればこと入れ替えるだけです。

#-----マウス判定--------------------------------------------------------

母艦のマウス押した時は

  もし、(新規ゲーム待ち=「オフ」)かつ

  (母艦のマウスX>左マージン)かつ      #マウスが盤の中で

  (母艦のマウスY>上マージン)かつ      #押されたか確認

  (母艦のマウスX<左マージン+盤サイズ)かつ

  (母艦のマウスY<上マージン+盤サイズ)ならば

    mx=(母艦のマウスX-左マージン)/駒サイズ。my=(母艦のマウスY-上マージン)/駒サイズ。

    mx=mxを切り下げ。my=myを切り下げ

    m=mx+my*4。               #どの駒を押したか?

    x=駒¥m%4。y=駒¥m/4。y=yを切り下げ

    x=x*駒サイズ。y=y*駒サイズ。       #のときのきの座標

    x2=き%4。y2=き/4。y2=y2を切り下げ

    x2=左マージン+x2*駒サイズ。y2=上マージン+y2*駒サイズ  #マウスで押した駒の座標

    mx=左マージン+mx*駒サイズ。my=上マージン+my*駒サイズ。 #マウスで押した駒の座標→きに入れ替わる。

    もし、駒¥m<15ならば

      もし、m+4=ならば

        駒のきと(き-4)を配列入れ替え。

        き=き-4。

      もし、m-4=ならば

        駒のきと(き+4)を配列入れ替え。

        き=き+4。

      もし、m+1=ならば

        駒のきと(き-1)を配列入れ替え。

        き=き-1。

      もし、m-1=ならば

        駒のきと(き+1)を配列入れ替え。

        き=き+1。

      #---画面描画------

      裏画面のx,y,駒サイズ,駒サイズを母艦のx2,y2へ画像部分コピー

      線色は$DDDDDD。線太さは0。塗り色は$DDDDDD。

      母艦のmx,myから(mx)+駒サイズ,(my)+駒サイズへ四角

#-----------------------------------------------------------------------

 これでいけるかと思ったら、いかなかった。

 やっぱり、画面描画のコードは、もしもしの下に、それぞれ入らないとダメっぽい。

 同じコードを4つ貼るのはあれなんで、この部分をサブルーチン化したいですね。

 っていうか、までもよく分からないからスルーしていただけで、問題作成のところもそうないと、メニューから呼び出せないんじゃ? みたいな。

 発見したのは「飛ぶ」という命令と、「ユーザー定義関数」っていうのがあるいうこと。

 「飛ぶ」は「ジャンプポイントへ処理を移す」という説明を見ると、たぶん「goto」と同じで、飛んだらそれっきり戻ってこないと思われ。

 ユーザー定義関数は、調べ方も足りてませんけど、あんまりよく分かる解説が無い。っていうか、関数のものが理解できてないのが問題?

 別に、関数じゃなくっていいんだよね~。「gosub」みたいに、行って処理して、帰ってきてくれさえすれば!

 とりあえず、行頭に「●」か「*」付けるらしいのは分かったので、以下のようにしたら動きました。

#-----------------------------------------------------------------------

   :

   :

      もし、m-1=ならば

        駒のきと(き+1)を配列入れ替え。

        き=き+1。

        駒入れ替え。

*駒入れ替え

  #---画面描画------

  裏画面のx,y,駒サイズ,駒サイズを母艦のx2,y2へ画像部分コピー

  線色は$DDDDDD。線太さは0。塗り色は$DDDDDD。

  母艦のmx,myから(mx)+駒サイズ,(my)+駒サイズへ四角

#-----------------------------------------------------------------------

 とりあえず、「*」のほうが打ちやすいのでこっち使いましたが、マニュアルのユーザー定義命令のとこには「●」で説明されていて「*」についての言及が見られないけど、「●」がほんとなのかな?

 それとも、VBのプロシージャの「Sub」と「Function」みたいな使い分けが?

 でも、とりあえず動いたからOK!

 これで、いちおう完成~☆

 ……と思ったら、はみ出しのチェックをしていなかったため、バグっていることが判明。

 右端から左端(の逆も)へ、駒が飛んでしまうのでした(汗)

 U D 4 U D 4 2009/03/21 22:35 むしろ後で追加された「飛ぶ」命令の方がリファレンスが少ない気がしますが…f(^^; なでしこではプロシージャという概念がありません。ユーザ定義命令でプロシージャも関数も表現します。

●と*と*は同じ意味で、どれもユーザ定義命令を定義するのに使います。なので、●を使うか*を使うかは好みですね。ひまわりから移ってきた人は見慣れている*を使う傾向にあるみたいですし、半角文字の方がよくて*を使う人もいます。そういえば不思議なことに、掲示板やマニュアル、サンプルでは割と●に統一されているようです。

あと、「空き」「空」は別の変数のように見えますが、実は全く同じ変数です。

空きは3
空を言う

なでしこは平仮名を無視するという名前規則が存在するため、これらは同じものとして扱われます。まぁ、粗茶さんが仰ったように、「空」を空文字列として利用しないなら、問題は起きませんがね。

着々と進んでいるようなので、頑張って完成させてください!ではでは

 U D U D 2009/03/21 22:36 どうでもいいけどなぜ名前に4がついたしorz

雪乃☆雫雪乃☆雫 2009/03/21 23:14 UDさま、ありがとうございます♪
「飛ぶ」のほうも、命令検索で出る「ジャンプポイントへ処理を移す。ジャンプポイントは文字列で指定する」ってことしか分かってないです;
そもそも、関数とかプロシージャとか手続きとか、よく分かってないダメダメっぷりなので、ユーザ定義命令の理解できる道のりは遠そうですが、いくつか記載されてるところは見つけているので、ゆっくり学んでみますです。

●と*と*は同じ意味なんですね。
「●」は「まる」って打って変換しないとならないので、「*」のほうが楽なのでこっちをつかいましたが、掛けるの「*」とかぶるのでちょっと心配でした。
疑問がひとつ氷解です。ありがとうございました☆

っていうか、「空」と「空き」は同じなんですか?!
じゃじゃじゃあ、何にしよー(汗)

ゲスト



トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20090321