Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2017/09/22 (金)

違うブラウザでやってみた

| 22:00 | 違うブラウザでやってみた - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 違うブラウザでやってみた - 雪乃☆雫のなでしこ日和 違うブラウザでやってみた - 雪乃☆雫のなでしこ日和 のブックマークコメント

 ウチのブラウザは、長年Firefoxでした。

 違うのだと、果たしてどうなんですかね? ・・・っと試してみたら、なななんとIE11では、まったく動きませんでしたΣ(゜д゜;

 まいくろふと様だけにセキュリティ的な何かのブロックなんでしょうか。いちおうJavascriptは有効になってるハズなんだけど・・・(?_?)

 簡易エディタで「こんにちは」と言わせることさえ出来ません。

 なんか、「'Symbol' は定義されていません。」なるエラーメッセージがっ。

 何をどうしたらよいのか、まったく分かりませぬ~。しくしくしく。

  ↑0.1.6でIE11に対応されました! ・・・が、やっぱり動かないモノが多数~。なでしこなのか、IE11の設定なのか、CSSなのか要研究。(10/7追記)


 ・・・さて、気を取り直してGoogleChrome

 こちらは無事に表示されまして、動きました。

 がっ、ラーメンタイマーが鳴りません。

 ファイル自体は、再生できるようなんですが。

 15パズルは・・・クリック音やビープは鳴るのに、完成した時の音が鳴りません。

 どうやら、どちらもの後で音を消してるのが良くないっぽい。

 Firefoxでは、プログラムに書いた順番どうりに、まずは音が再生されてから「言う」のポップアップが開き、プログラムは停止状態で、ダイアログを閉じるのを待って次の音を消す部分が実行される・・・的な流れなんですが、Chromeでは、まずポップアップが開いてしまうみたい。して、ダイアログを閉じると、音声が再生されるんだけど、の後すぐに音を消しているので、結果音が鳴らないとゆうことになってるようです。

 なので、音を消す(audioタグを消す)部分を無くすれば、音は鳴ります。

 でも、ラーメンタイマーなんてポップアップを消した後に音が鳴ったって、まったく意味無いですよね;

 オーディオの再生だけじゃなく、15パズルの手数の書き換えや、駒入替の描画や、最後の駒の描画などが、「言う」の後に行われているようです。

 オーディオの再生言うの直前ですけど、完成判定の一番最初の手数表示や、むしろ完成判定より前に行われてるはずの駒入替の描画も、後しになってるんですね。

 まあ、待つような命令は一個も入ってないんで、書いた順番どうりに実行される保証はないってことですか。

 言うで、表示されるべき成績の作成はちゃんと言うの前に行われているようで表示に問題は無く、たぶんだけどDOM要素へ何かしている部分が後しになってるっぽいです。

 コレはどうやら、なでしこがってことでは無く、phpで作られたらしいタイマーが、Chromeではやっぱり同様の挙動をしているようなので(ポップアップを閉じた後でアラームが鳴り出すw)Chromeの仕様みたいな(?)

 うーん、どうしたらいいんですかね。

 Chromeでの避法がわかったとしても、じゃじゃじゃあまた別のブラウザは?って話になるワケだ。

 いい加減、「言う」頼みはやめて、別の方法で成績表を表示させるべき時なのかもwww

 ・・・昨日書いたCSSの設定がうまくいってますかねー?的なつもりで、ちょこっとお試ししてみただけだったのに、こんなことが発覚するとは・・・(´д`;;;

2017/09/21 (木)

15パズル完成☆ (なでしこ3 ver.0.1.5)

| 10:04 | 15パズル完成☆ (なでしこ3 ver.0.1.5) - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 15パズル完成☆ (なでしこ3 ver.0.1.5) - 雪乃☆雫のなでしこ日和 15パズル完成☆ (なでしこ3 ver.0.1.5) - 雪乃☆雫のなでしこ日和 のブックマークコメント

 さて、んなわけでタイマーが使えるようになったので、タイムトライアル機能をつけまして、ローカルストレージに成績表の記録をして、表示できるようにした♪


 ・・・と、あっさり書きましたが、逆順での繰り返しが出来ないと知るまで、だいぶはまりました(ToT)

 なんで、できないんだろう・・・

 反復より繰り返すが圧倒的に便利な場面って、逆にカウントしたい時だとおもってたんだけど・・・

#-------------------------------------
Nを5から1まで繰り返す
  Nを表示ここまで。
#-------------------------------------

 エラーも出ませんが、何も表示されません~。

 1から5ならもちろん問題は無く・・・ってか、公式ページのサンプルのとうりなので;

https://nadesi.com/doc3/index.php?%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

 まあ、出来ないと分かれば、最大値から回数を引いていけばOKなんですが~;

 ↑0.1.6で対応され、問題なくできるようになりました!(10/7追記)



 それから、ついでに調子に乗って、効果音を鳴らす機能をつけましたw

 効果音を作るのに無駄に時を使ったケド、やっぱしょぼいな~;;;

 とゆうわけで、チェックボックスでオフオンできるようにwww

 ・・・など、これまで学んだことを色々盛り込んで、取りあえずこんな感じ。

<script type="なでしこ">
#---宣言------
駒=配列。
駒サイズ=100。
駒色=["#AAAAFF","#FFAAAA","#FFDDAA","#AAFFAA","#DDDDDD"]
アキ=15。
新規ゲーム待ち=オン。
手数=0。経過=0。分=0。秒=0。
手数順位=0。タイム順位=0。
成績=配列表示順位数=3。
効果音フラグ=オン。
クリック音=「http://www.geocities.jp/snowdrops890/audio/click_116_6G.mp3」
エラー音=「http://www.geocities.jp/snowdrops890/audio/Bu_71_3C.mp3」
完成音=「http://www.geocities.jp/snowdrops890/audio/Fanfare_53.mp3」
ハイスコア音=「http://www.geocities.jp/snowdrops890/audio/Congratulation_53.mp3」

#---canvasとマウス押下関数の設置------
マウス押下関数。
キャンバスHTML。
数を0から15まで繰り返す。
  マウス押下関数=マウス押下関数に「●マウス押下時{数}{改行}  {数}のマウス押下時。{改行}ここまで。{改行}{改行}」を一行追加。
  もし回数%4=0ならば、
      キャンバスHTML=キャンバスHTMLに「<canvas id="cv{数}" width="100" height="100"></canvas>{改行}<BR>」を一行追加。
  違えば、
      キャンバスHTML=キャンバスHTMLに「<canvas id="cv{数}" width="100" height="100"></canvas>」を一行追加。
  ここまで。
ここまで。
マウス押下関数ナデシコする。
「#game」にキャンバスHTMLをDOM_HTML設定

#---イベント設定------
数を0から15まで繰り返す。
  「#cv{数}」の「onmousedown」に「マウス押下時{数}」をDOMイベント設定。
ここまで。
「#newgame」の「onclick」に「新規ゲーム」をDOMイベント設定。
「#seiseki」の「onclick」に「成績表表示」をDOMイベント設定。
「#reset」の「onclick」に「成績リセット」をDOMイベント設定。
「#se」の「onchange」に「効果音オフオン」をDOMイベント設定。

#---データ読み込み------
成績=「15パズル成績表」をローカルストレージ読むもし、(成績=undefined)または(成績=ならば、成績初期化。

#---メイン------
「タイムトライアル」を1秒毎。
新規ゲーム。

#-----新規ゲーム--------------------------------------------------------
●新規ゲーム
  #---初期化------
  手数=0。「#tekazu」に手数をDOMテキスト設定。
  経過=0。「#time」に「00:00」をDOMテキスト設定。
  アキ=15。            #アキ位置を初期化。
  数を0から15まで繰り返す。    #駒位置を初期化
    駒[数]=数。
  ここまで。

  #---問題作成------
  効果音フラグは効果音フラグ*-1。
  1000
    rは4の乱数。rで駒入替。
  ここまで。

  駒描画。
  効果音フラグは効果音フラグ*-1。
ここまで。

●駒描画
  #---画面描画------
  数を0から15まで繰り返す。
    「canvas#cv{数}」のDOM要素取得。それへ描画開始。
    もし、駒[数]<15ならば、色=駒色[駒[数]/4を切捨]
    違えば、色=駒色[4]
    色へ塗り色設定。[0,0,駒サイズ,駒サイズ]に四角描画。
    「bold 48px MS ゴシック」に描画フォント設定。
    もし、駒[数]<9ならば、x=37。
    違えば、x=22。
    y=70。            #文字描画のyは、文字の下部なのか?
    もし、駒[数]<15ならば、
      黒色塗り色設定。[x,y]へ駒[数]+1の文字描画。
    ここまで。
  ここまで。
ここまで。
#-----------------------------------------------------------------------

#-----駒入れ替え--------------------------------------------------------
●駒入替(方向で)
  もし、(方向=0)かつ(アキ/4≧1)ならば、
    駒のアキとアキ-4を配列入替。
    アキ=アキ-4。
  違えばもし、(方向=1)かつ(アキ/4<3)ならば、
    駒のアキとアキ+4を配列入替。
    アキ=アキ+4。
  違えばもし、(方向=2)かつ(アキ%4>0)ならば、
    駒のアキとアキ-1を配列入替。
    アキ=アキ-1。
  違えばもし、(方向が=3)かつ(アキ%4<3)ならば、
    駒のアキとアキ+1を配列入替。    #右の駒と入れ替え
    アキ=アキ+1。
  違えば、
    もし、効果音フラグ=オンならば、「#se」に「<audio src="{エラー音}" autoplay></audio>」をDOM_HTML設定。
  ここまで。
ここまで。

#なでしこ3に「配列入れ替え」はない。
●配列入替(AのIとJを)
  もし、効果音フラグ=オンならば、「#se」に「<audio src="{クリック音}" autoplay></audio>」をDOM_HTML設定。
  II=A[I]。JJ=A[J]。
  A[I]=JJ。A[J]=II。
ここまで。
#-----------------------------------------------------------------------

#-----マウス判定--------------------------------------------------------
●マウス押下時(Noの)
  もし、手数=0ならば、
    新規ゲーム待ち=オフ。
  ここまで。
  もし、(新規ゲーム待ち=オフ)かつ(駒[No]<15)ならば、
    もし、No+4=アキならば、
      0で駒入替。駒描画。完成判定。
    違えばもし、No-4=アキならば、
      1で駒入替。駒描画。完成判定。
    違えばもし、No+1=アキならば、
      2で駒入替。駒描画。完成判定。
    違えばもし、No-1=アキならば、
      3で駒入替。駒描画。完成判定。
    違えば、
      もし、効果音フラグ=オンならば、「#se」に「<audio src="{エラー音}" autoplay></audio>」をDOM_HTML設定。
    ここまで。
  ここまで。
ここまで。
#-----------------------------------------------------------------------

#-----完成判定----------------------------------------------------------
●完成判定
  手数=手数+1。「#tekazu」に手数をDOMテキスト設定。

  完成=0。
  数を0から15まで繰り返す。
    もし、駒[数]が数ならば、完成は完成+1。
  ここまで。
  もし、完成=16ならば、
    「canvas#cv15」のDOM要素取得。それへ描画開始。
    色=駒色[3]。色へ塗り色設定。[0,0,駒サイズ,駒サイズ]に四角描画。
    x=25。y=68。黒色塗り色設定。[x,y]へ「★」の文字描画。
    新規ゲーム待ち=オン。
    成績表記録。

    #表示させる文字の設定
    もし、手数順位=0ならば、
      手数成績=「{改行} 手数{手数}手です」
    違えば、
      手数成績=「{改行} 手数{手数}手は{改行}   歴代{手数順位}位の成績です」
    ここまで。

    もし、タイム順位=0ならば、
      タイム成績=「{改行} タイム{分}分{秒}秒です」
    違えば、
      タイム順位=タイム順位-表示順位数
      タイム成績=「{改行} タイム{分}分{秒}秒は{改行}   歴代{タイム順位}位の成績です」
    ここまで。

    #表示させる
    もし、(手数順位=0)かつ(タイム順位=0)ならば、
      もし、効果音フラグ=オンならば、「#se」に「<audio src="{完成音}" autoplay></audio>」をDOM_HTML設定。
      「おめでとう。完成です!{改行}{手数成績}{タイム成績}」と言う。
    違えばもし、(手数順位=1)または(タイム順位=1)ならば、
      もし、効果音フラグ=オンならば、「#se」に「<audio src="{ハイスコア音}" autoplay></audio>」をDOM_HTML設定。
      「ハイスコアが出ました!{改行}おめでとう。新記録です!!{改行}{手数成績}{タイム成績}」と言う。
      成績表表示。
    違えば、
      もし、効果音フラグ=オンならば、「#se」に「<audio src="{ハイスコア音}" autoplay></audio>」をDOM_HTML設定。
      「ハイスコアが出ました!{改行}おめでとう。{改行}{手数成績}{タイム成績}」と言う。
      成績表表示。
    ここまで。
  「#se」に「<audio src="" autoplay></audio>」をDOM_HTML設定。    #音止める
  ここまで。
ここまで。
#-----------------------------------------------------------------------

#-----タイムトライアル--------------------------------------------------
●タイムトライアル
  もし、新規ゲーム待ち=オフならば、
    経過=経過+1。
    分=経過/60を切捨。
    秒=経過%60。
    分=分を2でゼロ埋め。秒=秒を2でゼロ埋め。    #時を00:00で表示させる。
    「#time」に「{分}:{秒}」をDOMテキスト設定。
  ここまで。
ここまで。
#-----------------------------------------------------------------------

#-----成績表記録--------------------------------------------------------
●成績表記録
  #手数のハイスコア
  手数順位=0。
//  数を表示順位数から1まで繰り返す。   #逆順での繰り返しが出来ない?
  (表示順位数)
    数=表示順位数-(回数-1)
    もし、(成績[数-1]>手数)または(成績[数-1]=0)ならば、
      手数順位=数。
    ここまで。
  ここまで。
//  数を表示順位数から1まで繰り返す。
  (表示順位数)
    数=表示順位数-(回数-1)
    もし、手数順位=0でなければ、
      もし、手数順位=数ならば、
        成績[数-1]=手数。
      ここまで。
      もし、手数順位<数ならば、
        成績[数-1]=成績[数-2]。
      ここまで。
    ここまで。
  ここまで。

  #タイムのハイスコア
  タイム順位=0
//  数を(表示順位数*2)から(表示順位数+1)まで繰り返す。
  (表示順位数)
    数=表示順位数*2-(回数-1)
    もし、(成績[数-1]>経過)または(成績[数-1]=0)ならば、
      タイム順位=数。
    ここまで。
  ここまで。
//  数を(表示順位数*2)から(表示順位数+1)まで繰り返す。
  (表示順位数)
    数=表示順位数*2-(回数-1)
    もし、タイム順位=0でなければ、
      もし、タイム順位=数ならば、
        成績[数-1]=経過。
      ここまで。
      もし、タイム順位<数ならば、
        成績[数-1]=成績[数-2]
      ここまで。
    ここまで。
  ここまで。
  「15パズル成績表」に成績をローカルストレージ保存ここまで。
#-----------------------------------------------------------------------

#-----成績表表示--------------------------------------------------------
●成績表表示
  成績表=「★☆★成績表★☆★{改行}{改行}◎手数のハイスコア{改行}」  #どうも変数がアルファベット一文字の時、正常動作しないことがあるみたい?
  数を1から表示順位数まで繰り返す
    手=成績[数-1]
    もし、手が0ならば、
      成績表=「{成績表} {数}位  ---手{改行}」
    違えば、
      成績表=「{成績表} {数}位  {手}手{改行}」
    ここまで。
  ここまで。
  
  成績表=「{成績表}{改行}◎タイムのハイスコア{改行}」
  数を(表示順位数+1)から(表示順位数*2)まで繰り返す。
    分=成績[数-1]/60を切捨。
    秒=成績[数-1]%60。
    分=分を2でゼロ埋め。秒=秒を2でゼロ埋め。
    順位=数-表示順位数
    もし、成績[数-1]が0ならば、
      成績表=「{成績表} {順位}位  --分--秒{改行}」
    違えば、
      成績表=「{成績表} {順位}位  {分}分{秒}秒{改行}」
    ここまで。
  ここまで。
  成績表を言うここまで。
#-----------------------------------------------------------------------

#-----成績リセット--------------------------------------------------------
●成績リセット
  「リセットしてもいい?」と二択。
  もしそれはいならば、成績初期化。
ここまで。

●成績初期化
  成績=配列。
  (表示順位数*2)
    数=回数-1。
    成績[数]=0。
  ここまで。
  「15パズル成績表」にをローカルストレージ保存ここまで。
#-----------------------------------------------------------------------
●効果音オフオン
  もし、効果音フラグ=オンならば、効果音フラグ=オフ。
  違えば、効果音フラグ=オンここまで。
#-----------------------------------------------------------------------
</script>

<style type="text/css">
<!--
html, body		{ height: 100%; }
body			{background-color: #FFFFFF;}
div.cnt			{width: 420px; margin:auto;}
div.menu		{width: 420px; margin:auto;}
div.game		{width: 420px; margin:auto;}

/*画面幅が420px以下*/
@media (max-width: 420px) {
  body			{width:100%;}
  div.cnt		{width: 100%;}
  div.menu		{width: 100%;}
  div.game		{width: 100%;}
  canvas		{width: 23%;}
  h1			{font-size: 150%;}
}
/*画面高さが420px以下*/
@media (max-height: 420px) {
  div.game		{ height: 100%;}
  canvas		{ height:24%;}
  h1			{font-size: 150%;}
}
 -->
</style>
    <center><H1>15パズル</H1></center>
    <BR>
      <div class="cnt" style="font-weight: bold; margin-bottom: 5px">
        <label>タイムトライアル:<input id="time" type="text" maxlength="5" size="8"></label> 
        <label>手数:<input id="tekazu" type="text" maxlength="5" size="5"></label>
      </div>
      <div id="game" class="game"></div>
      <div class="menu">
        <button id="newgame">新規ゲーム</button>
        <button id="seiseki">成績表表示</button>
        <button id="reset">成績リセット</button>
        <BR>
        <label style="font-size:small;"><input type="checkbox" id="se" checked="checked">効果音を鳴らす?</label>
      </div>
      <div id="se"></div>

http://www.geocities.jp/snowdrops890/wnako3_test/15puzzle_1_50.html

 どうかな? だいぶ遊んだので、うまくいってると思うんだけど・・・

 やっぱりハイスコアの表示あると、俄然やる気がでるんですよwww


 好きな画像に変えるなどは、現状では難しそうな気がするため、取りあえずここまで~。

 なでしこ1と違って、座標がHTMLCSSで相対指定(?)みたいな感じだから、CSSが無いと、表示がへんちくりんなことになってしまう。

 CSSは学び始めたばっかりなんで、あんまり良い書き方じゃないもしないけど、気にしないで!

 とりあえず、自分の環境で思ったような表示になることだけ優先しましたΣ(゜д゜;えっ;

 スタイルシートの意味なし!(爆)

 DOMスタイル設定で出来そうな部分も多いけど、ちょこっとだとタグに直接書いちゃった方が早かったり、なでしこだと全部ID振らなきゃない(?)とか、まとめて指定出来ないっぽいことなどあって、HTMLのほうに書いちゃう方が、楽なんだよね~;

 なでしこでは、途中で変えたりするような部分だけすればいいかなあ・・・とか。

 プロパティ(?)も値もCSSのとうりだから、HTML埋め込みでやる場合には、全部なでしこで指定するメリットはあんまりないよね。出来れば、基本的なヤツだけでも、なでしこっぽく日本語で書けるようになったらいいですねぇ☆

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

2017/09/19 (火)

なでしこ3でラーメンタイマー。音も鳴らすよ!

| 07:58 | なでしこ3でラーメンタイマー。音も鳴らすよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - なでしこ3でラーメンタイマー。音も鳴らすよ! - 雪乃☆雫のなでしこ日和 なでしこ3でラーメンタイマー。音も鳴らすよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 なでしこ1で作った15パズルは、手数のカウント機能とタイムトライアル機能がありました。

 手数のカウントは、すぐにもカンタンにつけれる予定なんだけど、タイマーはどうしたらいいんですかね・・・っと見ていくと、「秒毎」とゆう命令がありました!

 文字通り指定した秒毎に、指定した関数を繰り返し実行するというものです。

 マニュアルの利用例に、「」を1秒毎表示する、時計のサンプルが載っています。

https://nadesi.com/doc3/index.php?plugin_system%252F%E7%A7%92%E6%AF%8E

 ほぼ、コレだ! と思うところなのですが、しかし、コレを止める命令がないっぽい?

 なでしこ1のタイマー部品なら、「停止」が出来たんだけど・・・こっちは、一実行したら、もう永久に続けるしかない的な・・・???(´д`;

 時計と違って、完成したら、止めなくちゃ。

 でもまあ、フラグを立てて、必要の無い時にはなにもしないようにしておけば、取りあえずタイマーとして使えそう


 とゆうわけで、タイマーの実験として3分固定のカウントダウンタイマー。いわゆるラーメンタイマーを作ってみました。

 ところで、先に作った時間加算関数に、とんでもない違いが発覚Σ(゜д゜;

 なななんと、秒のところにもナゼか60を掛けてしまっていたので、秒を加算減算するような計算の場合は、結果が大変なことに・・・;;;

 既にモノスゴクこっりと直していますw

 でも、も実際に使っているのはプラグインの方。

 むむむぅ、便利~♪

#-----------------------------------------------------------------------
<!-- なでしこを使うために必要なスクリプト -->
<script src="https://nadesi.com/v3/0.1.5/release/wnako3.js?run"></script>
<!-- うぇいくさまの日付時計算プラグイン -->
<script src="http://weyk.la.coocan.jp/weyk/nadesiko3/release/plugin_weykdatetime.js"></script>
<!-- type="なでしこ" のスクリプトが実行される -->
<script type="なでしこ">
#-----------------------------------------------------------------------
# ここになでしこのプログラムを記述
#-----------------------------------------------------------------------
分=3。秒=0。

終了=0。秒=秒を2でゼロ埋めタイマーオフ。
「#time」に「{分}:{秒}」をDOMテキスト設定。
スタートボタン作成。

「ラーメンタイマー」を1秒毎。

●タイマー開始
  タイマーオン。
  「#start」の「disabled」を「disabled」にDOM属性設定。  #スタートボタンを押せなくする。
  に「+0:{分}:{秒}」を時間加算して終了代入ここまで。

●ラーメンタイマー
  もしタイマーオンならば、
    終了秒差を残秒数に代入。
    もし、残秒数<0ならば、
      「ラーメンできたよ!!」と言う。
      タイマーオフ。「#time」に「{分}:{秒}」をDOMテキスト設定。
      スタートボタン作成。
    違えば、
      残分=残秒数/60を切捨。残秒=残秒数%60を2でゼロ埋め。
      「#time」に「{残分}:{残秒}」をDOMテキスト設定。
    ここまで。
  ここまで。
ここまで。

●スタートボタン作成
  「#button」に「<button id="start">スタート!</button>」をDOM_HTML設定。
  「#start」の「onclick」に「タイマー開始」をDOMイベント設定。
ここまで。
#-----------------------------------------------------------------------
</script>

<body>
    <H1>なでしこ3てすと~ラーメンタイマー</H1>
    <HR>
    <input id="time" type="text" readonly="on" size="4" style="font-size:32px; text-align:center;">
    <span id="button"></span>
#-----------------------------------------------------------------------

 先に書いたとうり、タイマーとゆう変数オフオンをつけてラーメンタイマー関数し、オンの時だけ処理を行うようにしただけです。

 うまくいっているっぽいです。

 コレで同様にして、15パズルのタイムトライアルも作れそう


 タイマーってる時にスタートボタンを押すとリセットしてしまうので、押せないように、タイマー開始時にスタートボタンの属性を「disabled」にしてみました。

 とっところが、この「disabled」はオンオフするような性質のものではないらしく、属性「disabled」の値は「disabled」に固定・・・ってか、値なしで属性だけ書いてもOKなヤツらしいのですよ。

 一応念のため、「off」とか「false」とか「no」とかとか試したけどダメっぽい。一旦無効化したら、もう二度と有効化できないのかい???

 しようが無いので、やっつけで、もういちど<div>にスタートボタンを作り直すことに。

 上書きされて無効化した前のボタンは消えて、新しいスタートボタンが出来る感じですケド、見た目的には希望どうりです☆


 よしよし♪ ・・・と思ったのですが、ラーメンタイマー的には、タイマー終了時に音が鳴らないとかどうなんですか;

 タイマー終わるのを睨んでるくらいなら、時計見てるのといっこも変わらん;;;

 なでしこ3に音を出す的な命令は無いのですが、HTML5はなんと<audio>タグで音を鳴らすことが出来るようです!

 タイマー終了時に、このaudioを設置してやれば、音を鳴らせるんじゃないですか?!

 とゆうわけで、ボタンの下にアラーム用のdivを作り、「ラーメンできたよ!!」と言う前に、DOM_HTML設定でaudioを設置。

 「controls」属性をつけなければ、画面上には何も表示しませんが、「autoplay」属性をつけておくことで、設置と同時に鳴り始めます。

 よくある開くと同時に勝手に音が鳴り出すページは、こうゆう仕組みか?!

 アラームの停止は、やっぱりを設定することで、audioを消すコトにw

●ラーメンタイマー
  もしタイマーオンならば、
    終了秒差を残秒数に代入。
    もし、残秒数<0ならば、
      「#alarm」に「<audio src="alarm_75_8C.mp3" autoplay></audio>」をDOM_HTML設定。
      「ラーメンできたよ!!」と言う。
      「#alarm」にをDOM_HTML設定。
      タイマーオフ。「#time」に「{分}:{秒}」をDOMテキスト設定。
      スタートボタン作成。
    違えば、
      残分=残秒数/60を切捨。残秒=残秒数%60を2でゼロ埋め。
      「#time」に「{残分}:{残秒}」をDOMテキスト設定。
    ここまで。
  ここまで。
ここまで。

 そういえば、「サクラ」がバージョンアップしてたよ!

http://oto.chu.jp/top/

 ・・・といっても、素養が無いので、とうてい曲など作れないんですが、たったこんだけで、アラームっぽい音が完成w

 サクラは、ドレミで入れれんのが本当にいいよねぇ~♪

音色75 音階8 音符16 ン4【8【4 ド】【2 ッ】】

 なでしこ1ならこのまま鳴らせたんだけど・・・(なでしこで鳴らす場合は、音色は数値にしないとダメ)

 なでしこ3もストトン表記でMML演奏出来るようにならないかなぁ~w

 ともかく、MMLどころかaudioはMIDIファイルも鳴らせないっぽいので、何かでmp3とかに変換しなきゃないですねー。

 サクラでmp3保存できたらとても便利なんですが。

 でもまあ、無料で変換してくれるサイトもフリーソフトもいろいろありますからねぇ~☆


 でっ、ラーメンタイマー、音が鳴るバージョン。

http://www.geocities.jp/snowdrops890/wnako3_test/05_RamenTimer.html

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

2017/09/15 (金)

15パズル改 ~canvasと関数を動的に(?)作るよ!

| 08:31 | 15パズル改 ~canvasと関数を動的に(?)作るよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 15パズル改 ~canvasと関数を動的に(?)作るよ! - 雪乃☆雫のなでしこ日和 15パズル改 ~canvasと関数を動的に(?)作るよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 ひっ、ひらめきました!w

 DOMイベント設定に指定する関数には引数がつけれないっぽいとか、DOM要素作成canvasを作ると、後から(実際の)サイズは変えれないラシイとか、いろいろと散々ぼやいた末に、ほぼヤケクソでマウスクリックようの関数と<canvas>タグをそれぞれ16個並べて無理矢理感満載の15パズルを作ったわけですが・・・

 DOM_HTML設定はDOM_HTML設定で、上書きで前のが消えてしまうから出来ないと思っていたんだけど、何のことは無い、変数一行追加で作っていって、最後にまとめてDOM_HTML設定すればいいんじゃ?!

 してして、関数の方も同様にして「ナデシコする」で設置できました!

 っこー書き換え(^▽^;;

<script type="なでしこ">
#---宣言------
駒=配列。
駒サイズ=100。
駒色=["AAAAFF","FFAAAA","FFDDAA","AAFFAA","DDDDDD"]
アキ=15。
新規ゲーム待ち=オン。

#---canvasとマウス押下関数の設置------  ※ ココです★
マウス押下関数。
キャンバスHTML。
数を0から15まで繰り返す。
  マウス押下関数=マウス押下関数に「●マウス押下時{数}{改行}  {数}のマウス押下時。{改行}ここまで。{改行}{改行}」を一行追加。
  もし回数%4=0ならば、
      キャンバスHTML=キャンバスHTMLに「<canvas id="cv{数}" width="100" height="100"></canvas>{改行}<BR>」を一行追加。
  違えば、
      キャンバスHTML=キャンバスHTMLに「<canvas id="cv{数}" width="100" height="100"></canvas>」を一行追加。
  ここまで。
ここまで。
マウス押下関数ナデシコする。
「#game」にキャンバスHTMLをDOM_HTML設定

#---イベント設定------
数を0から15まで繰り返す。
  「#cv{数}」の「onmousedown」に「マウス押下時{数}」をDOMイベント設定。
ここまで。

新規ゲーム。

#-----新規ゲーム--------------------------------------------------------
●新規ゲーム
  #---初期化------
  アキ=15。            #アキ位置を初期化。
  数を0から15まで繰り返す。    #駒位置を初期化
    駒[数]=数。
  ここまで。

  #---問題作成------
  1000
    rは4の乱数。rで駒入替。
  ここまで。

  駒描画。新規ゲーム待ち=オフここまで。

●駒描画
  #---画面描画------
  数を0から15まで繰り返す。
    「canvas#cv{数}」のDOM要素取得。それへ描画開始。
    もし、駒[数]<15ならば、色=駒色[駒[数]/4を切捨]
    違えば、色=駒色[4]
    「#{色}」へ塗り色設定。[0,0,駒サイズ,駒サイズ]に四角描画。
    「bold 48px MS ゴシック」に描画フォント設定。
    もし、駒[数]<9ならば、x=37。
    違えば、x=22。
    y=70。            #文字描画のyは、文字の下部なのか?
    もし、駒[数]<15ならば、
      黒色塗り色設定。[x,y]へ駒[数]+1の文字描画。
    ここまで。
  ここまで。
ここまで。
#-----------------------------------------------------------------------

#-----駒入れ替え--------------------------------------------------------
●駒入替(方向で)
  もし、(方向=0)かつ(アキ/4≧1)ならば、
    駒のアキとアキ-4を配列入替。
    アキ=アキ-4。
  違えばもし、(方向=1)かつ(アキ/4<3)ならば、
    駒のアキとアキ+4を配列入替。
    アキ=アキ+4。
  違えばもし、(方向=2)かつ(アキ%4>0)ならば、
    駒のアキとアキ-1を配列入替。
    アキ=アキ-1。
  違えばもし、(方向が=3)かつ(アキ%4<3)ならば、
    駒のアキとアキ+1を配列入替。    #右の駒と入れ替え
    アキ=アキ+1。
  ここまで。
ここまで。

#なでしこ3に「配列入れ替え」はない。
●配列入替(AのIとJを)
  II=A[I]。JJ=A[J]。
  A[I]=JJ。A[J]=II。
ここまで。
#-----------------------------------------------------------------------

#-----マウス判定--------------------------------------------------------
●マウス押下時(Noの)
  もし、新規ゲーム待ち=オフならば、
    もし、駒[No]<15ならば、
      もし、No+4=アキならば、0で駒入替。
      もし、No-4=アキならば、1で駒入替。
      もし、No+1=アキならば、2で駒入替。
      もし、No-1=アキならば、3で駒入替。
      駒描画。完成判定。
    ここまで。
  ここまで。
  もし、新規ゲーム待ち=オンならば、   #なぜか「違えば」がうまく出来ない?
    「もう一度?」で二択。
    もしそれはいならば、新規ゲーム。
  ここまで。
ここまで。
#-----------------------------------------------------------------------

#-----完成判定----------------------------------------------------------
●完成判定
  完成=0。
  数を0から15まで繰り返す。
    もし、駒[数]が数ならば、完成は完成+1。
  ここまで。
  もし、完成=16ならば、
    「canvas#cv15」のDOM要素取得。それへ描画開始。
    色=駒色[3]。「#{色}」へ塗り色設定。[0,0,駒サイズ,駒サイズ]に四角描画。
    x=25。y=68。黒色塗り色設定。[x,y]へ「★」の文字描画。
    「おめでとう!」と言う。
    新規ゲーム待ち=オン。
  ここまで。
ここまで。
#-----------------------------------------------------------------------
    </script>

    <H1>なでしこ3で15パズル ver.1.01</H1>
    <HR>
      <div id="game" class="game" style="text-align: center;"></div>

 どうでしょう。問題なく同じに動いてると、思うんだけど・・

http://www.geocities.jp/snowdrops890/wnako3_test/15puzzle_1_01.html


 無理矢理感が完全に払拭されたわけでもないけど、コードのダサい見た目も解消されて行数も節約できて、してコレなら100個とか作っても大丈夫・・かも?!(まぢか;)

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

2017/09/14 (木)

なでしこ3でも15パズルを作るよ!

| 07:31 | なでしこ3でも15パズルを作るよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - なでしこ3でも15パズルを作るよ! - 雪乃☆雫のなでしこ日和 なでしこ3でも15パズルを作るよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 ちょっと無理矢理な感じもするケド、イベントが使えるようになったことで出来そう感がでてきたので、やっぱりゲームが作りたいなぁ~

 ・・・っとゆうわけで、でんせつの15パズルをなでしこ3でも作ってみたよ!

 ちなみに何が伝説かって、これがワタシが最初に作ったプログラムだったんだけど、それがなんと、の当時のなでしこコミュニティーコンテストで最優秀賞を頂戴してしまったとゆう・・・(自慢かよ!?;)

 ・・・いやしかし、一体ナゼなのか、もって分からんね;

 おらく、初心者のしろーとが、結構こだわってノリノリで作ってたので、後も精進しろよとゆうことだったに違いないね。

 っ、それはともかく15パズルです。

 そうそう、なんとなでしこ3では、「配列入れ替え」が無くなってしまったんだね。

 15パズルは基本的に、配列入れ替えをしてはそれを画面に反映するの繰り返しなのですよ。

 もっとも、考えたら、入れ替えたい二つを別々の変数に一時記憶して、ばくりっこするだけのカンタンな関数でしたが。

 とりあえず、単に15パズルの出来るver.1の段階まで。

<script type="なでしこ">

#---宣言------
駒=配列。
駒サイズ=100。
駒色=["AAAAFF","FFAAAA","FFDDAA","AAFFAA","DDDDDD"]
アキ=15。
新規ゲーム待ち=オン。

#---イベント設定------
数を0から15まで繰り返す。
  「#cv{数}」の「onmousedown」に「マウス押下時{数}」をDOMイベント設定。
ここまで。

新規ゲーム。

#-----新規ゲーム--------------------------------------------------------
●新規ゲーム
  #---初期化------
  アキ=15。            #アキ位置を初期化。
  数を0から15まで繰り返す。    #駒位置を初期化
    駒[数]=数。
  ここまで。

  #---問題作成------
  1000
    rは4の乱数。rで駒入替。
  ここまで。

  駒描画。新規ゲーム待ち=オフここまで。

●駒描画
  #---画面描画------
  数を0から15まで繰り返す。
    「canvas#cv{数}」のDOM要素取得。それへ描画開始。
    もし、駒[数]<15ならば、色=駒色[駒[数]/4を切捨]
    違えば、色=駒色[4]
    「#{色}」へ塗り色設定。[0,0,駒サイズ,駒サイズ]に四角描画。
    「bold 48px MS ゴシック」に描画フォント設定。
    もし、駒[数]<9ならば、x=37。
    違えば、x=22。
    y=70。            #文字描画のyは、文字の下部なのか?
    もし、駒[数]<15ならば、
      黒色塗り色設定。[x,y]へ駒[数]+1の文字描画。
    ここまで。
  ここまで。
ここまで。
#-----------------------------------------------------------------------

#-----駒入れ替え--------------------------------------------------------
●駒入替(方向で)
  もし、方向が0ならば、
    もし、(アキ/4≧1)ならば、      #アキが一番上でなければ
      駒のアキとアキ-4を配列入替。    #上の駒と入れ替え
      アキ=アキ-4。
    ここまで。
  ここまで。
  もし、方向が1ならば、
    もし、(アキ/4<3)ならば、      #アキが一番下でなければ
      駒のアキとアキ+4を配列入替。    #下の駒と入れ替え
      アキ=アキ+4。
    ここまで。
  ここまで。
  もし、方向が2ならば、
    もし、(アキ%4>0)ならば、      #アキが左端でなければ
      駒のアキとアキ-1を配列入替。    #左の駒と入れ替え
      アキ=アキ-1。
    ここまで。
  ここまで。
  もし、方向が3ならば、
    もし、(アキ%4<3)ならば、      #アキが右端でなければ
      駒のアキとアキ+1を配列入替。    #右の駒と入れ替え
      アキ=アキ+1。
    ここまで。
  ここまで。
ここまで。

#なでしこ3に「配列入れ替え」はない。
●配列入替(AのIとJを)
  II=A[I]。JJ=A[J]。
  A[I]=JJ。A[J]=II。
ここまで。
#-----------------------------------------------------------------------

#-----マウス判定--------------------------------------------------------
●マウス押下時(Noの)
  もし、新規ゲーム待ち=オフならば、
    もし、駒[No]<15ならば、
      もし、No+4=アキならば、0で駒入替。
      もし、No-4=アキならば、1で駒入替。
      もし、No+1=アキならば、2で駒入替。
      もし、No-1=アキならば、3で駒入替。
      駒描画。完成判定。
    ここまで。
  ここまで。
  もし、新規ゲーム待ち=オンならば、   #なぜか「違えば」がうまく出来ない?
    「もう一度?」で二択。
    もしそれはいならば、新規ゲーム。
  ここまで。
ここまで。

●マウス押下時0
  0のマウス押下時。
ここまで。

●マウス押下時1
  1のマウス押下時。
ここまで。

●マウス押下時2
  2のマウス押下時。
ここまで。

●マウス押下時3
  3のマウス押下時。
ここまで。

●マウス押下時4
  4のマウス押下時。
ここまで。

●マウス押下時5
  5のマウス押下時。
ここまで。

●マウス押下時6
  6のマウス押下時。
ここまで。

●マウス押下時7
  7のマウス押下時。
ここまで。

●マウス押下時8
  8のマウス押下時。
ここまで。

●マウス押下時9
  9のマウス押下時。
ここまで。

●マウス押下時10
  10のマウス押下時。
ここまで。

●マウス押下時11
  11のマウス押下時。
ここまで。

●マウス押下時12
  12のマウス押下時。
ここまで。

●マウス押下時13
  13のマウス押下時。
ここまで。

●マウス押下時14
  14のマウス押下時。
ここまで。

●マウス押下時15
  15のマウス押下時。
ここまで。
#-----------------------------------------------------------------------

#-----完成判定----------------------------------------------------------
●完成判定
  完成=0。
  数を0から15まで繰り返す。
    もし、駒[数]が数ならば、完成は完成+1。
  ここまで。
  もし、完成=16ならば、
    「canvas#cv15」のDOM要素取得。それへ描画開始。
    色=駒色[3]。「#{色}」へ塗り色設定。[0,0,駒サイズ,駒サイズ]に四角描画。
    x=25。y=68。黒色塗り色設定。[x,y]へ「★」の文字描画。
    「おめでとう!」と言う。
    新規ゲーム待ち=オン。
  ここまで。
ここまで。
#-----------------------------------------------------------------------
</script>



<CENTER><H1>なでしこ3で15パズル ver.1</H1></CENTER>
<div class="game" style="text-align: center;">
    <canvas id="cv0" width="100" height="100"></canvas>
    <canvas id="cv1" width="100" height="100"></canvas>
    <canvas id="cv2" width="100" height="100"></canvas>
    <canvas id="cv3" width="100" height="100"></canvas>
    <BR>
    <canvas id="cv4" width="100" height="100"></canvas>
    <canvas id="cv5" width="100" height="100"></canvas>
    <canvas id="cv6" width="100" height="100"></canvas>
    <canvas id="cv7" width="100" height="100"></canvas>
    <BR>
    <canvas id="cv8" width="100" height="100"></canvas>
    <canvas id="cv9" width="100" height="100"></canvas>
    <canvas id="cv10" width="100" height="100"></canvas>
    <canvas id="cv11" width="100" height="100"></canvas>
    <BR>
    <canvas id="cv12" width="100" height="100"></canvas>
    <canvas id="cv13" width="100" height="100"></canvas>
    <canvas id="cv14" width="100" height="100"></canvas>
    <canvas id="cv15" width="100" height="100"></canvas>
</div>

 マウスの判定が・・・・・・(爆)

 いろいろ試したけど、やっぱりこれ以外ではうまく出来なかった。

 15パズルくらいまでは、まだこれでもイイですけれどねぇ~;;;

 でもとりあえずは希望通りに、15パズルで遊ぶことは出来ます♪

http://www.geocities.jp/snowdrops890/wnako3_test/15puzzle_1_00.html


 いちおう、またスマホにも対応してみた。

 だけど、スマホの場合は、「onmousedown」も「onclick」も同じくタップ(?)指を離した時に発動するみたいなんだよね。してスマホだと、どうしてもフリック(?)しゅっと駒を動かしたくなっちゃうんで、かえって動かないってゆうね;

 ・・・だから、なんぼでもアプリが転がってるだろとか言わないで~。折角スマホとかでも動くよ!っていうのがウリなんだから、ちょこっと試してみたいってゆうか。

 でっ、結局一番時が掛かったのは、なでしこのことではなく、幅はいいんだけど、横持ちした場合に縦(狭い方)に合わせて縮小するには一体どうしたらいいんすかってことでしたとさ;

 縦の場合は、<html>や<body>はもとより、上位の要素全てに、「height」の設定が必要となるようです。

 幅420px以下と高さ420px以下と、別っこに設定してるので、どっちも420px以下の画面では、駒の比率が変なことになりますが、んなちっちゃこい端末って、ないよね?!


 そう言えば、文字描画」のyの値は、文字の下側の値みたいなんだよね。

 なでしこ1では、x,yで左上の位置を指定することになっていたんだけど、なでしこ3では文字の左下の位置を指定しなければならないようです。

 途中で文字の大きさを変えたりした時にも文字の底辺が揃えやすいから、こっちの方がイイかもしないけど、要注意です。

canvas#nako3_canvas_1」のDOM要素取得。それへ描画開始。
赤色線色設定。白色塗り色設定。
y=24。
[0,y]から[300,y]へ描画。
黒色塗り色設定。「{y}px Aria」に描画フォント設定。
[0,y]へ「いろはにほへと」の文字描画。
「12px Aria」に描画フォント設定。
[y*7,y]へ「ちりぬるを」の文字描画

公式ページの簡易エディタで動きます。

https://nadesi.com/doc3/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%933%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF

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

2011/01/13 (木)

15パズルのバグを直すよ!

| 21:29 | 15パズルのバグを直すよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 15パズルのバグを直すよ! - 雪乃☆雫のなでしこ日和 15パズルのバグを直すよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 突然ですけど、以前作った15パズルに、バグを発見したので、直しておきます。


 この部分です。

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

> テキストをクリアするだけなら、保存すればいいだけだけど、それだと現在の成績表表示は変わらないので、成績配列の中身もにしないとね。


 なんて書いていながら、それが正常に機能してなかったことが判明なのです;

 ちゃんとテストもしてたつもりだったのに、なんでだ・・・(涙)


 というわけで、↓のように直しました。

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

 繰り返しの「」の中身がちゃんとインデントされていなかったのが問題でした。

 途中で、変にしてしまったのかも・・・




 さてさて、問題の15パズルのソースの全文は、こちら。

http://nadesiko.g.hatena.ne.jp/snowdrops89/20090401/1238587801

 該当の関数し替えたら、ばっちり動きます☆

chocochoco2011/01/28 20:45いつの間にか復帰してたのですね^^;
今日初めて気が付きました(笑)

また素敵な物語が続くのかと思うと、とても楽しみです。
これからも頑張って下さい。

私も自分のページ頑張らないと・・・。

雪乃☆雫雪乃☆雫2011/01/29 17:12>choco さま
そうなんです、いつの間にか・・・w
でも、ぼちぼちですけれどね。
復帰そうそう、こちらは大雪で雪かきに追われてぐったり(>_<)
プログラムどころじゃ、ありません;;;
ともあれ、素敵な物語?!?!と言えるかどうか分かりませんけれども、またゆるゆるとお付き合いくださいませ。

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

2009/05/04 (月)

大事件だよ!

| 01:11 | 大事件だよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 大事件だよ! - 雪乃☆雫のなでしこ日和 大事件だよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 GWで遊び呆けているに、大変なことが!!!

 ノリで(参加賞目当てで;)応募した、なでしこコミュニティーコンテストの発表が、5/1だったわけで。

 んなことも忘れ去り、GWを満喫し、遊び歩いていたわけで(汗)

 ふと、久々にパソコンを起動してみたら、メールが届いていたわけで。(しかも、さりげなく迷惑メールフォルダに落ちていたりして、大ぴんち!(滝汗))


 とにかく!

 なぜか、最優秀賞のところに、ワタシのつくった15パズルがさりげなく載っているのであった。

 なんで?! Why?!

 あんなので、良かったのデスか~~?!?!?!

 何かの違いじゃないかと、こはかとなく不安だ・・(爆)

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

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

2009/03/31 (火)

いよいよ完成! かな?

| 21:01 | いよいよ完成! かな? - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - いよいよ完成! かな? - 雪乃☆雫のなでしこ日和 いよいよ完成! かな? - 雪乃☆雫のなでしこ日和 のブックマークコメント

 まずは課題の解決から。

 表示順位数を先に宣言しておくことで、何位まで表示するかを後から容易に変更できるようになりました!

 「言う」では8位以上表示しきれずに、詳細ってボタン表示されてしまいますけどね(汗)

 調子に乗って5位まで表示させるようにしました。

#-----成績表表示-----------------------------------------------
*成績表表示
  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」へ保存。
#--------------------------------------------------------------

 前のUD様にいただいたコメントから、「成績表.txt」を毎行読んで反復する時に、回数を-1すれば成績¥0から値が入っていくことを学びましたが、順位のところをまた全部+1しないとならないのが面倒で、のままになってます(汗)


 成績表読み書きの部分を作るにあたって、何度も成績表のテキストを手動でにした(笑)

 それはさておいても、成績表はリセットできたほうがいいと思うので、成績リセットをメニュー追加することに。

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

 違いでいきなりリセットされるとショックなので、2択で確認メッセージを表示

 テキストをクリアするだけなら、保存すればいいだけだけど、それだと現在の成績表表示は変わらないので、成績配列の中身もにしないとね。


 あと追加で、前「15パズル.jpg」が存在しなかった場合の処理を追加しましたが、じゃあもし「15パズル.jpg」が違う画像にし変わってた場合は?

 もしかしたら毎自分の好きな画像でやりたいと思って、「15パズル.jpg」自体を違う画像にする場合があるもしない

 自分はわかってるからいいけど、人にあげた場合とか、400*400の画像にしてくれるとは思えないんだよね。


 実際に試してみると、予想通り大きな画像の端っこだけが表示される上、ギブアップしたら母艦が大変なことに!(滝汗)

 これ避するには、画像変更の時と同様、もし400*400の画像じゃなかったら、違う「15パズル.jpg」をリサイズして表示させられるようにしないとね。

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

 「*画像変更」は、フォルダ選択から始まってしまうので、ルーチンを二つに分割して「*リサイズし変更」をつくり、ここへ飛ばすようにした。


 15パズル的には、このくらいでもう十分かなあ?

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

2009/03/30 (月)

ギブアップとヒント表示をつけよう!

| 21:44 | ギブアップとヒント表示をつけよう! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - ギブアップとヒント表示をつけよう! - 雪乃☆雫のなでしこ日和 ギブアップとヒント表示をつけよう! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 昨日は妹が遊びに来ていたので、成績表表示の確認を兼ねて15パズル大会を開催しました! 妹とはいえ、人にやらせるのは初めてだから、嬉しいね☆

 ちなみに、なかなか盛り上がっていた。

 ・・・なんと暇でバカで微笑ましい姉妹であろうか(汗)


 さて、昨日ので好きな画像で15パズルが遊べるようになったのはいいけど、難しすぎて解けない!という大問題が!!(汗)

 折角選んだ画像の完成形が見れないのは、悲しい・・・

 あと、完成図が見えていれば、パズルの難易度もぐっと下がるはず。


 というわけで、ヒントを見る機能と、ギブアップする機能を追加しようと思う。

 ギブアップは簡単。裏画面のを母艦コピーしてやればOKじゃん?

 メニューにギブアップの項目を追加する。

 バージョン情報のメニューをヘルプに変えて、の下にヒントとギブアップとバージョン情報をいれるよ。世の中の一般的なアプリケーションはこんな感じになってるはず!(ヘルプやヒントの意味が若干違うけどね;)

 折角だから(?)二択のダイアログでも使ってみよー。

 ギブアップを選択したら、「本当に?」とたずねて、はいのときだけ処理をする。

 もっと嫌味なことを言うと面白いかと思ったけど、使うのはどうせ自分なのに、なんかムカツクからやめた(爆)


 で、こんな感じ。

#-----ぎぶあっぷ-----------------------------------------------
*ギブアップ
  「本当に?」と二択。
    もしそれはいならば
      裏画面を母艦の15,15へ画像コピー。
      新規ゲーム待ちは「オン」
      初期化。
#--------------------------------------------------------------

 あれれ~? 書き換わらない

 マウスをクリックしたら変わるんだけど、おっかしいなあ。

 完成のときに同じように裏画面を母艦コピーしたときには問題なかったよ?

 意味わかんなーい!

 この機能を、実にスゥィ~トに考えていただけに、ドはまりしてしまってショック!!

 とりあえず、命令一覧をずっと眺めて「描画処理反映」を追加したら、正常動作しました。ちなみに、母艦再描画は、なぜかラベルが消えてしまってダメっぽい。

 問題は解決したけど、意はわからず・・・


 次に、ヒント機能です。

 これは、小さいサイズにリサイズした完成画像を、表示させる機能。

 手数とタイムの下が、無駄っぽく開いているから、こに表示させる。

 の学習内容は、メニューチェックオンオフで、ヒントの表示、非表示をトグルさせるよ!

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

 これは、比較的簡単に出来たよ! 描画処理反映も忘れず!!

 最初「もし、(ヒントメニューチェックオフ)ならば」の行の書き方が、どこか悪かったのか、ちゃんと動作しなくてしばらく悩んだのは内緒(汗)

 いろいろ違うコト書いたりしてもダメで、も一度書いてみたらあっさり動いたという・・・


 前、画像変更機能を付けたときに、ファイル選択のときに「いいえ」を押したら、っ白になってしまう現象が発生し、避する処理を加えた。

 ーいえば、しょっぱなに「15パズル.jpg」を読み込んでますけど、これが万一なかったらどーなるんだ? と思い、ためしに消してみたら案の定エラー出て止まった;

 これ避するには、もし無かったら、画像変更機能へ飛ばして、任意の画像を選ぶようにするのが簡単そうだとおもったんだけど、やっぱりやめて以下のようにしてみた。

#-----しょぼい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)を文字描画
  
  裏画面を母艦の15,15へ画像コピー。
#--------------------------------------------------------------

 これで、何の画像も無くても、15パズルの画面が出ます。

 意外と簡単で、はまりどころも無くすぐできちゃったよ!

 ていうか、最初にしょぼい画像に半日かけたワタシって一体・・・?(哀)

 成績表のテキストも、無いときは自動生成出来るようにしないとダメだね。

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

 今日ここまで。

 課題も大体解決してきてるけど、それは明日UPするよ!

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