Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2009-03-23

『15パズル』 Ver.1 だよ!

| 20:40

 一応、課題? を解決して、バージョン1になったよ!

 DLしてから2週経たないのに、これだけ出来たよ!

 なでしこ、すごい!!

 というわけで、ここまでのソースの全文を公開。

 ついでに、この画像も拾っていってくれたら、15パズルで暇つぶしが出来ます(笑)

 それはさておき、何か突っ込みどころがあったら、教えてくれたらうれしいかな? かな?

 あと、あんまりいい内容でもないけど、いつか誰かの役にちょっとでも立ったらうれしいかな・・・なんて。


f:id:snowdrops89:20090323203902j:image

#-------------------------------------------------------------
#  15パズル   ver.1.00
#-------------------------------------------------------------

#-----母艦設計------------------------------------------------
!母艦設計=「母艦の可視はオフ母艦のタイトルは「15パズル」
母艦のWは440。母艦のHは480。
母艦を$FFBBBBで画面クリア母艦のスタイルは「枠固定」
母艦オフに最大化ボタン有効変更。

#--メニュー設定----
『#親部品名,部品名,テキスト,ショートカット,オプション,イベント
なし,ファイルメニュー,ファイル(&F),,,
 -,新規メニュー,新しいゲーム(&N),Ctrl+N,,新規ゲーム
 -,-,,,,
 -,閉じるメニュー,閉じる(&X),Ctrl+X,,終わる
なし,ヘルプメニュー,バージョン(&A),,,
 -,バージョンメニュー,バージョン情報(&A),Ctrl+A,,「{二重カッコ}15パズル{二重カッコ閉じ}{改行} Version 1.00{改行}{改行} by 雪乃☆雫」と言う。
』をメニュー一括作成母艦の可視はオン。
#-------------------------------------------------------------

#-----宣言----------------------------------------------------
パズル画像は「15パズル.jpg」。
裏画面とはイメージの可視はオフ。
アキとは整数。
駒とは配列。
新規ゲーム待ちとは文字列。
問題作成中とは文字列。

#--定数----
盤サイズとは整数。盤サイズは400。
駒サイズとは整数。駒サイズは100。
左マージンとは整数。左マージンは15。
上マージンとは整数。上マージンは15。
#-------------------------------------------------------------

#-----メインルーチン------------------------------------------
裏画面の画像はパズル画像。
新規ゲーム。
マウス判定。
#-------------------------------------------------------------

#-----新規ゲーム----------------------------------------------
*新規ゲーム
  #---初期化------
  アキは15。            #アキ位置を初期化。
  数を0から15まで繰り返す。                      #駒位置を初期化
    駒¥数は数。

  #---問題作成------
  問題作成中は「オン」
  乱数初期化。
  1000
    rは4の乱数
    もし、rが0ならば
      駒入れ替え_上。

    もし、rが1ならば
      駒入れ替え_下。

    もし、rが2ならば
      駒入れ替え_左。

    もし、rが3ならば
      駒入れ替え_右。

  #---画面描画------
  線色は$AAAAAA。線太さは5。塗り色は$DDDDDD。  #画面のクリア
  母艦の10,10から420,420へ四角。

  数を0から15まで繰り返す。         #ゲーム画面描画
    x=駒¥数%4。y=駒¥数/4。y=yを切り下げ。
    x=x*駒サイズ。y=y*駒サイズ。

    x2=数%4。y2=数/4。y2=y2を切り下げ。
    x2=左マージン+x2*駒サイズ。y2=上マージン+y2*駒サイズ

    もし、駒¥数<15ならば
      裏画面のx,y,駒サイズ,駒サイズを母艦のx2,y2へ画像部分コピー。

  新規ゲーム待ちは「オフ」
  問題作成中は「オフ」
#-------------------------------------------------------------

#-----マウス判定----------------------------------------------
*マウス判定
  母艦のマウス押した時は
    もし、(新規ゲーム待ち=「オフ」)かつ
    (母艦のマウス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=アキならば
          駒入れ替え_上。

        もし、m-4=アキならば
          駒入れ替え_下。

        もし、m+1=アキならば
          駒入れ替え_左。

        もし、m-1=アキならば
          駒入れ替え_右。
#-------------------------------------------------------------

#-----駒入れ替え----------------------------------------------
*駒入れ替え_上
  もし、(アキ/4≧1)ならば      #アキが一番上でなければ
    駒のアキと(アキ-4)を配列入れ替え。#上の駒と入れ替え
    アキ=アキ-4。駒入れ替え_描画。

*駒入れ替え_下
  もし、(アキ/4<3)ならば      #アキが一番下でなければ
    駒のアキと(アキ+4)を配列入れ替え。#下の駒と入れ替え
    アキ=アキ+4。駒入れ替え_描画。

*駒入れ替え_左
  もし、(アキ%4>0)ならば     #アキが左端でなければ
    駒のアキと(アキ-1)を配列入れ替え。#左の駒と入れ替え
    アキ=アキ-1。駒入れ替え_描画。

*駒入れ替え_右
  もし、(アキ%4<3)ならば     #アキが右端でなければ
    駒のアキと(アキ+1)を配列入れ替え。#右の駒と入れ替え
    アキ=アキ+1。駒入れ替え_描画。

*駒入れ替え_描画
  もし、問題作成中が「オフならば   #問題作成はいちいち描画しない
    裏画面のx,y,駒サイズ,駒サイズを母艦のx2,y2へ画像部分コピー。
    線色は$DDDDDD。線太さは0。塗り色は$DDDDDD。
    母艦のmx,myから(mx)+駒サイズ,(my)+駒サイズへ四角。
    完成判定。
#-------------------------------------------------------------

#-----完成判定------------------------------------------------
*完成判定
  完成は整数。完成は0。
  数を0から15まで繰り返す。
    もし、駒¥数が数ならば
      完成は完成+1
  もし、完成=16ならば
    「おめでとう!」と言う。
    裏画面を母艦の15,15へ画像コピー。 #16コマ目表示

    新規ゲーム待ちは「オン」      #完成したら新規ゲーム開始までマウスで駒を動かさない。
#-------------------------------------------------------------

上下左右の駒配列入れ替え部分が、問題作成時と、ゲーム中のマウスクリック時と、処理がかぶっていたのを、別ルーチンにしただけです。

 もっとスマートに書けるのかも知れないけど・・・


 あと、母艦設計の頭に、「!母艦設計=「母艦の可視はオフ」」てのを追加

 起動時に、母艦がチラッとちらつくのを防ぐまじないのようです。

 単に、「母艦の可視はオフ」にしても、の前に一瞬ちらっと母艦表示されちゃうんですけど、こうするとOK。

 意味はわかんないけど、後も役に立ちそうなおまじないです。

ゲスト



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