Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2009/04/01 (水)

『15パズル』 Ver.2 完成だよ!!

| 21:10 | 『15パズル』 Ver.2 完成だよ!! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 『15パズル』 Ver.2 完成だよ!! - 雪乃☆雫のなでしこ日和 『15パズル』 Ver.2 完成だよ!! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 15パズルでやりたいこと、出来ることといったら、このくらいかなあ?

 あと思いつくのは、駒の数を増やしてみるくらいですけど、大体のやり方が見えているので、学習としては効果が薄そうなのに加えて、それを解きたい気持ちが湧き上がってこない(汗)しかも、当初は全然んなつもりじゃなかったから、の辺りの数値は全部数字で決め打ちしてるから、直すのがえらくめんどー(--; などの問題により、パス!(だから何でも変数にしておいたほうがいいよ、っていう好例?;)


 ・・・ってわけで、バージョン2の完成! としました☆

 に合いそうだったので、うれしがってコンテストにも応募してみました! 参加賞って何かな? かな?(それがめあてか;)

 NAKOちゃんストラップとか?(笑)

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

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

#--メニュー設定----
『#親部品名,部品名,テキスト,ショートカット,オプション,イベント
なし,ファイルメニュー,ファイル(&F),,,
 -,新規メニュー,新しいゲーム(&N),Ctrl+N,,新規ゲーム
 -,やり直しメニュー,このゲームをやり直す(&R),Ctrl+R,,やり直し
 -,-,,,,
 -,画像変更メニュー,画像変更(&C),Ctrl+C,,画像変更
 -,-,,,,
 -,成績表メニュー,成績表(&S),Ctrl+S,,成績表表示
 -,成績リセットメニュー,成績リセット(&D),Ctrl+D,,成績リセット
 -,-,,,,
 -,閉じるメニュー,閉じる(&X),Ctrl+X,,終わる

なし,ヘルプメニュー,ヘルプ(&H),,,
 -,リードミーメニュー,よんでね(&R),Ctrl+R,,りーどみー
 -,-,,,,
 -,ヒントメニュー,ヒントを見る(&H),F1,,ヒント表示
 -,ギブアップメニュー,ギブアップする(&G),F5,,ギブアップ
 -,-,,,,
 -,バージョンメニュー,バージョン情報(&A),Ctrl+A,,バージョン
』をメニュー一括作成。

#手数カウント機能用
文字書体は「MSPゴシック」。文字サイズは18。文字色は$AA0000。
母艦の440,33へ「手数」を文字描画。

手数ラベルとはラベルのテキストは「0」
のXは500。のYは30。のWは100。のHは35。
文字書体は「MSPゴシック」。文字サイズは24。の文字位置は右。文字色は$550000。
の背景色は$FFDDDD。の透明はオフ。

#タイムトライアル用
トライアルタイマーとはタイマー隔は1。

母艦の440,110へ「タイムトライアル!」を文字描画。

タイムラベルとはラベルのテキストは「00:00」
のXは440。のYは140。のWは180。のHは50。の文字位置は中央。
文字書体は「MSPゴシック」。文字サイズは36。文字色は$550000。
の背景色は$FFDDDD。の透明はオフ。

#ヒント表示用
ヒントメニューチェックオフ母艦の可視はオン。
#-------------------------------------------------------------

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

記憶とは配列。
アキ記憶とは整数。

成績とは配列。
作業用とはイメージの可視はオフ。

#--定数----
盤サイズとは整数。盤サイズは400。
駒サイズとは整数。駒サイズは100。
左マージンとは整数。左マージンは15。
上マージンとは整数。上マージンは15。
裏画面のWは盤サイズ。裏画面のHは盤サイズ。
#-------------------------------------------------------------

#-----データ読み込み------------------------------------------
もし、「成績表.txt」が存在するならば
  「成績表.txt」を毎行読んで反復
    成績¥回数対象違えば
  「成績表.txt」に保存。												#成績表が無かったら作成する

もし、パズル画像の存在が1ならば
  作業用の画像はパズル画像。
  もし、作業用のW=盤サイズ かつ 作業用のH=盤サイズでなければ     #画像ファイルがデフォルトの物と違う場合
    リサイズし変更
  違えば
    作業用を裏画面の0,0へ画像コピー違えば
  十五																	#画像ファイルが無かった場合	
#-------------------------------------------------------------

#-----メインルーチン------------------------------------------
新規ゲーム。
マウス判定。
#-------------------------------------------------------------


#-----初期化処理----------------------------------------------
*初期化
  トライアルタイマー停止。
  手数は0。手数ラベルのテキストは「0」。のXは500。のYは30。のWは100。のHは35。		#手数も0に初期化。
  経過は0。タイムラベルのテキストは「00:00」。のXは440。のYは140。のWは180。のHは50。	#タイムも初期化。
#-------------------------------------------------------------

#-----新規ゲーム----------------------------------------------
*新規ゲーム
  #---初期化------
  アキは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<上マージン+盤サイズ)ならば
    
      もし、手数=0ならば											#はじめに盤をクリックした時から
        トライアルタイマーを開始。									#タイマーを動かす
        タイムトライアル。
        
      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)+駒サイズへ四角。
    完成判定。
#-------------------------------------------------------------

#-----完成判定------------------------------------------------
*完成判定
  #---手数表示------
  手数=手数+1。手数ラベルのテキストは手数。のXは500。のYは30。のWは100。のHは35。

  完成は整数。完成は0。
  数を0から15まで繰り返す。
    もし、駒¥数が数ならば
      完成は完成+1
  もし、完成=16ならば
    トライアルタイマー停止。												#タイマー停止

    成績表記録。
    
    #表示させる文字の設定
    もし、手数順位=0ならば
      手数成績=「{改行} 手数{手数}手です」
    違えば
      手数成績=「{改行} 手数{手数}手は{改行}   歴代{手数順位}位の成績です」
    
    もし、タイム順位=0ならば
      タイム成績=「{改行} タイム{分}分{秒}秒です」
    違えば
      タイム順位=タイム順位-表示順位数
      タイム成績=「{改行} タイム{分}分{秒}秒は{改行}   歴代{タイム順位}位の成績です」    

    #表示させる
    もし、(手数順位=0 かつ タイム順位=0)ならば
      ダイアログタイトルは「完成!」
      「おめでとう。完成です!{改行}{手数成績}{タイム成績}」と言う。
    違えば
      ダイアログタイトルは「ハイスコアが出ました!」
      「おめでとう。新記録です!!{改行}{手数成績}{タイム成績}」と言う。
      成績表表示。

    裏画面を母艦の左マージン,上マージンへ画像コピー。						#16コマ目表示

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

#-----バージョン表示------------------------------------------
*バージョン
  ダイアログタイトルは「バージョン情報」
  「{二重カッコ}15パズル{二重カッコ閉じ}{改行} Version 2.00{改行}{改行} by 雪乃☆雫」と言う。

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

#-----このゲームをやりなおす----------------------------------
*やり直し
  初期化。
  数を0から15まで繰り返す。
    駒¥数=記憶¥数。
  アキはアキ記憶。															#アキ位置を初期化。
  ゲーム画面描画。
  マウス判定。
#-------------------------------------------------------------

#-----タイムトライアル----------------------------------------
*タイムトライアル
  トライアルタイマーの時満ちた時は~
    経過=経過+1。
    分=経過/60を切り下げ。
    秒=経過%60。
    分=分を2でゼロ埋め。秒=秒を2でゼロ埋め。							#時を00:00で表示させる。
    タイムラベルのテキストは「{分}:{秒}」。のXは440。のYは140。のWは180。のHは50。
#-------------------------------------------------------------

#-----成績表表示----------------------------------------------
*成績表表示
  s=「★☆★成績表★☆★{改行}{改行}◎手数のハイスコア{改行}」
  数を1から表示順位数まで繰り返す
    もし、成績¥数がならば
      s=「{s} {数}位  ---手{改行}」
    違えば
      s=「{s} {数}位  {成績¥数}手{改行}」
  s=「{s}{改行}◎タイムのハイスコア{改行}」
  数を(表示順位数+1)から(表示順位数*2)まで繰り返す
    分=成績¥数/60を切り下げ。
    秒=成績¥数%60。
    分=分を2でゼロ埋め。秒=秒を2でゼロ埋め
    もし、成績¥数がならば
      s=「{s} {数-表示順位数}位  --分--秒{改行}」
    違えば
      s=「{s} {数-表示順位数}位  {分}分{秒}秒{改行}」
  ダイアログタイトルは「成績表」
  sを言う。

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

#-----成績表記録----------------------------------------------
*成績表記録
  #手数のハイスコア
  手数順位=0
  数を表示順位数から1まで繰り返す。
    もし、(成績¥数>手数 または 成績¥数=ならば
      手数順位=数
  数を表示順位数から1まで繰り返す。
    もし、手数順位=0でなければ
      もし、手数順位=数ならば
        成績¥数=手数
      もし、手数順位<数ならば
        成績¥数=成績¥(数-1)

      
  #タイムのハイスコア
  タイム順位=0
  数を(表示順位数*2)から(表示順位数+1)まで繰り返す。
    もし、(成績¥数>経過 または 成績¥数=ならば
      タイム順位=数
  数を(表示順位数*2)から(表示順位数+1)まで繰り返す。
    もし、タイム順位=0でなければ
      もし、タイム順位=数ならば
        成績¥数=経過
      もし、タイム順位<数ならば
        成績¥数=成績¥(数-1)

  s=「」
  数を1から表示順位数まで繰り返す
    s=「{s}{成績¥数}{改行}」
  数を(表示順位数+1)から(表示順位数*2)まで繰り返す
    s=「{s}{成績¥数}{改行}」

  sを「{母艦パス}成績表.txt」へ保存。
#-------------------------------------------------------------

#-----画像変更------------------------------------------------
*画像変更
  マイピクチャー作業フォルダ変更。
  「*.jpg;*.jpeg;*.png;*.bmp」のファイル選択。
  もしそれでなければ												#キャンセルした時は処理しない
    作業用の画像はそれ。
    リサイズし変更

*リサイズし変更
  もし、作業用のW>作業用のHならば									#横長の画像
    x=(作業用のW-作業用のH)/2。y=0。
    x2=作業用のH+x。y2=作業用のH。
    裏画面をy2,y2で画像リサイズ。								#短いほうの辺に長さあわせて正方形
  違えば
    x=0。y=(作業用のH-作業用のW)/2。
    x2=作業用のW。y2=作業用のW+y
    裏画面をx2,x2で画像リサイズ。

  作業用のx,y,x2,y2を裏画面の0,0へ画像部分コピー。
  裏画面を盤サイズ,盤サイズで画像リサイズ。
  裏画面を母艦の左マージン,上マージンへ画像コピー。
  ヒントメニューチェックオン。ヒント表示。            #画像を変更したら、ヒントはいったん消す
  新規ゲーム
#-------------------------------------------------------------

#-----ヒント表示----------------------------------------------
*ヒント表示
  もし、(ヒントメニューチェックオフ)ならば
    ヒントメニューチェックオン。
    作業用を盤サイズ,盤サイズで画像リサイズ。
    裏画面を作業用の0,0へ画像コピー。
    作業用を150,150で画像リサイズ。
    作業用を母艦の455,260へ画像コピー。
    文字サイズは18。文字色は$AA0000。
    母艦の478,230へ「☆ヒント☆」を文字描画。
    描画処理反映。
  違えば
    ヒントメニューチェックオフ。
    線色は$FFBBBB。塗り色は$FFBBBB。
    母艦の455,230から610,410へ四角。
    ラベル3の可視はオフ。
    描画処理反映。
#-------------------------------------------------------------

#-----ぎぶあっぷ----------------------------------------------
*ギブアップ
  ダイアログタイトルは「ギブアップする?」
  「本当に?」と二択。
    もしそれはいならば
      裏画面を母艦の左マージン,上マージンへ画像コピー。
      描画処理反映。
      新規ゲーム待ちは「オン」
      初期化。
#-------------------------------------------------------------

#-----しょぼい15パズル画面作成------------------------------
*十五
  裏画面のWは盤サイズ。裏画面のHは盤サイズ。
  裏画面を$FFFFAAで画面クリア
  線色は$AAAAAA。線太さは0。
  数を0から15まで繰り返す
    x=数%4。
    y=数/4を切り下げ。
    yで条件分岐
      0ならば
        塗り色は$AAAAFF
      1ならば
        塗り色は$FFAAAA
      2ならば
        塗り色は$FFDDAA
      3ならば
        塗り色は$AAFFAA

    裏画面のx*駒サイズ,y*駒サイズからx*駒サイズ+駒サイズ,y*駒サイズ+駒サイズへ四角。
    文字サイズは42。文字色は$006600
    もし、(数>8)ならば
      x=20+(数%4)*駒サイズ。
    違えば
      x=35+(数%4)*駒サイズ。
    y=数/4を切り下げ。y=20+y*駒サイズ。
    もし、数=15ならば
      裏画面のx,yへ「★」を文字描画
    違えば
      裏画面のx,yへ(数+1)を文字描画
  
  裏画面を母艦の左マージン,上マージンへ画像コピー。
#-------------------------------------------------------------

#-----成績リセット--------------------------------------------
*成績リセット
  ダイアログタイトルは「成績表リセット」
  「リセットしてもいい?」と二択。
    もしそれはいならば
      (表示順位数*2)
      成績¥回数
      を「{母艦パス}成績表.txt」へ保存。
#-------------------------------------------------------------

#-----よんでね------------------------------------------------
*りーどみー
  もし、「よんでね.txt」が存在するならば
    「よんでね.txt」を起動。
  違えば
    ダイアログタイトルは「よんでね」
    「【15パズルのルール】
  知らない人はあまりいないと思いますが…
  16枚ある駒の16番目の駒を抜いてばらばらにしたものを動かしていって、
 1から15まで数字を連続させて並べたらクリアです(画像の場合はもちろん
 右下の一マスを除いて、の画像を完成させればクリアです)
  いているマス目の上下左右の駒ををクリックすると、の駒を動かす
 ことができます。
  当然のことながら、きマスに隣接していない駒は(斜めも不可)動か
 すことが出来ません」を言う。
#-------------------------------------------------------------

 違う画像を選択で別のフォルダの画像を選んだとき、のフォルダに成績表が記録されてしまうことがわかったので、成績表.txtの保存先を母艦パスにするように変更しました。

mr-80bmr-80b2009/04/01 23:08プレイしてみました。
楽しいです!

雪乃☆雫雪乃☆雫2009/04/02 19:44mr-80bさま
ありがとうございます!!
遊んでいただけたんですね!うれしー♪
おかげさまでここまでこぎつけました。
これからも、頑張ります☆

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