Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2019-12-08

尺貫法⇔メートル法の単位変換を実際に即して行いたい!

| 19:04

 マイナビ連載49目は、時給計算ツールを作ろう!でした。

https://news.mynavi.jp/article/nadeshiko-49/

 時の計算ってめんどくさいですよね~。

 なでしこ1の日付時計算命令は、とても便利で良い物でした。

 v3には実装されていないので、前に同じように使える関数を作ってみたりしたよね。

https://nadesiko.g.hatena.ne.jp/snowdrops89/20170824/1503579885


 めんどくさいと言えば、単位の変換もそうですよねー?

 して、例えば「1km」を「9.1667町」とか「550」とかに変換してくれるサイトは沢山あるんですけれどね。

 そうじゃない

 こはやはり、実際に即して、9町10となって欲しい。

 コレが、尺、寸だったら10進法だから165cm→5.445尺となっても、あー、5尺4寸4分5厘ですかねとゆうことになるんだけど、里、町、だとそうはいないワケですよ。1里は36町で、1町は60なんですよね。めんどくさい(´д`)

 というわけで、こんなの。

#-----------------------------------------------------------------------
# 単位変換 尺貫法←→メートル法
#-----------------------------------------------------------------------
変換データ=「"長さ","尺貫法","丈,尺,寸,分,厘","10,1,0.1,0.01,0.001","{1/3.3}","(じょう)=10尺=3.0303m,(しゃく)=10寸=30.303cm,(すん)=10分=3.0303cm,(ぶ)=10厘=3.0303mm,(りん)=0.30303mm"
"長さ","メートル法","m,cm,mm","1,0.01,0.001","3.3"," (メートル)=100cm=3.3尺, (センチメートル)=10mm=3.3分, (ミリメートル)=3.3厘"
"距離","尺貫法","里,町,,尺","12960,360,6,1","{1/3.3}","(り)=36町=3.9273km,(ちょう)=60=109.09m,(けん)=6尺=1.8182m,(しゃく)=30.303cm"
"距離","メートル法","km,m","1000,1","3.3"," (キロメートル)=1000m=9町10, (メートル)=3.3尺"
"体","尺貫法","石,斗,升,合,勺","100,10,1,0.1,0.01","{2401/1331}","(こく)=10斗=180.39L,(と)=10升=18.039L,(しょう)=10合=1.8039L,(ごう)=10勺=180.39cc,(しゃく)=18.039cc"
"体","メートル法","L,cc","1,0.001","{1331/2401}"," (リットル)=1000cc=0.55435升, (シーシー)=0.05543勺"
"面","尺貫法","町,反,畝,坪","3000,300,30,1","{1/0.3025}","(ちょう)=10反=9917.4m<sup>2</sup>=約1ha,(たん)=10畝=991.74m<sup>2</sup>=約1a,(せ)=30坪=99.174m<sup>2</sup>,(つぼ)=3.3058m<sup>2</sup>"
"面","メートル法","ha,a,m<sup>2</sup>","10000,100,1","0.3025","(ヘクタール)=10000m<sup>2</sup>=約1町,(アール)=100m<sup>2</sup>=約1反,(平方メートル)=0.3025坪"
"重さ","尺貫法","貫,斤,両,匁","1000,160,10,1","3.75","(かん)=1000匁=3.75kg,(きん)=160匁=600g,(りょう)=10匁=37.5g,(もんめ)=3.75g"
"重さ","メートル法","kg,g","1000,1","{1/3.75}"," (キログラム)=1000g=266.67匁, (グラム)=0.26667匁"」
変換データ=変換データをCSV取得。

#---宣言----------
変換元単位=。変換元単位相関=。変換元単位説明=。
変換先単位=。変換先単位相関=。変換定義=。
変換先A=配列。変換先B=配列。
桁=8。

#---HTML設定----------
HTML=「
  <div id="select"></div>
  <p><div id="setumei"></div></p>
  <p><div id="gui"></div></p>
  <p><div id="result"></div></p>」
「#nako3_div_1」にHTMLHTML設定。

#---CSS設定----------
「#setumei」に{
  "margin": "20px",
}をDOMスタイル一括設定。

「#gui」に{
  "width": "380px",
  "margin": "20px",
}をDOMスタイル一括設定。

「#result」に{
  "border": "3px double",
  "margin": "5px",
  "padding": "10px",
  "文字サイズ": "20px",
  "背景色": アリスブルー色
}をDOMスタイル一括設定。

#---セレクトボックス作成----------
項目=配列
数=0。
変換データを反復
  換算項目=対象[0]。変換元=対象[1]。
  もし、数%2=0ならば、変換先=「メートル法」
  違えば、変換先=「尺貫法」
  項目[数]=「{換算項目} {変換元}→{変換先}」。
  数=数+1。
ここまで。

「#select」にDOM親要素設定。
項目のセレクトボックス作成し、項目セレクトに代入。
項目セレクトの「onchange」に「フィールド作成」をDOMイベント設定。
#-----------------------------------------------------------
フィールド作成。

●フィールド作成
  v=項目セレクトの「value」をDOM属性取得。
  No=項目からvを配列検索。
  変換元=変換データ[No]。
  もし、No%2=0ならば、変換先=変換データ[No+1]。
  違えば、変換先=変換データ[No-1]

  タイトル=「{変換元[0]}の単位変換 {変換元[1]}→{変換先[1]}」
  説明=「{変換元[1]}の{変換元[0]}の単位を、{変換先[1]}に変換します。」

  #---データ----------
  変換元単位=変換元[2]を「,」で区切る。
  変換元単位相関=変換元[3]を「,」で区切る。
  変換元単位説明=変換元[5]を「,」で区切る。
  変換先単位=変換先[2]を「,」で区切る。
  変換先単位相関=変換先[3]を「,」で区切る。
  変換定義=変換元[4]。
  変換先A=配列。変換先B=配列。

  #---項目設定----------
  A=。B=。
  (変換先単位の要素数)
    A=A&「0{変換先単位[回数-1]} 」
    B=B&「0{変換先単位[回数-1]}<BR>」
  ここまで。
  変換内容=A&「<BR><BR>」&B。
  説明=説明の改行を「<BR>」に置換。
  「#setumei」に説明をテキスト設定。
  「#result」に変換内容をテキスト設定。

  #---GUI作成----------
  変換元エディタ。
  (変換元単位の要素数)
    変換元エディタ=変換元エディタに「<input type="text" id="edit{回数-1}" value="0" maxlength="{桁+2}" onclick="this.select();"  pattern="^[0-9]+$">
        <span>{変換元単位[回数-1]}{変換元単位説明[回数-1]}</span><BR>」を一行追加。
  ここまで。
  変換元エディタを「#gui」にHTML設定。
  (変換元単位の要素数)
    「#edit{回数-1}」に{
      "幅": "65px",
      "高さ": "20px",
      "margin": "5px",
      "text-align": "right",
      "padding":"0px 5px",
      "ime-mode":"disabled"
    }をDOMスタイル一括設定。
  ここまで。

  「#gui」にDOM親要素設定。
  「変換」のボタン作成して、変換ボタン代入。
  「クリア」のボタン作成して、クリアボタン代入。
  変換ボタンに{"幅": "60px","margin": "5px"}をDOMスタイル一括設定。
  クリアボタンに{"幅": "60px","margin": "5px"}をDOMスタイル一括設定。

  #---イベント設定----------
  クリアボタンをクリックした時には、
   (変換元単位の要素数)
     「#edit{回数-1}」に0をテキスト設定。
   ここまで。
  ここまで。

  変換ボタンをクリックした時には
   #---変換元を一つにまとめる----------
   変換元=0。
   (変換元単位の要素数)
     仮=「#edit{回数-1}」のテキスト取得。
     もし、(仮が数列判定)=いいえならば、
       仮=0。「#edit{回数-1}」に0をテキスト設定。
     ここまで。
     仮=仮*(変換元単位相関[回数-1])。
     変換元=変換元+仮。
   ここまで

   #---変換先A(実際に即した換算)作成----------
   基本=変換元*変換定義。  #基本となるデータ
   (変換先単位の要素数)
     基本=基本を桁で小数点四捨五入。
     もし回数=1ならば、基本=基本*(1/変換先単位相関[回数-1])
     違えば、基本=(基本-変換先A[回数-2])*(1/(変換先単位相関[回数-1]/変換先単位相関[回数-2]))
     もし回数=(変換先単位の要素数)ならば、変換先A[回数-1]=基本を2で小数点切捨。
     違えば、変換先A[回数-1]=基本を切り捨て。
   ここまで。

   #---変換先B(各単位毎単独で換算)作成----------
   基本=変換元*変換定義。  #基本となるデータ。
   (変換先単位の要素数)
     変換先B[回数-1]=(基本/変換先単位相関[回数-1])を桁で桁揃え。
   ここまで。

   #---HTML設定----------
   A=。B=。
   (変換先単位の要素数)
     A=A&「{変換先A[回数-1]}{変換先単位[回数-1]} 」
     B=B&「{変換先B[回数-1]}{変換先単位[回数-1]}<BR>」
   ここまで。
   変換内容=A&「<BR><BR>」&B。
   「#result」に変換内容をHTML設定。
  ここまで。
ここまで。

#-----------------------------------------------
●(数を桁で)桁揃え
 整数桁=(数の整数部分文字列変換)の文字数。
 もし整数桁≧桁ならば、数の整数部分戻る。
 違えば、数を(桁-整数桁)で小数点四捨五入して戻るここまで。

●(数をAで)小数点四捨五入
  数=数*(10^A)
  数=数を四捨五入。
  数=数/(10^A)
  数で戻る
ここまで。

●(数をAで)小数点切捨
  数=数*(10^A)
  数=数を切捨。
  数=数/(10^A)
  数で戻る
ここまで。

●(数の)整数部分
  数のINTここまで。

●(数の)小数部分
  数のFRACここまで。
#-----------------------------------------------------------------------

http://snowdrops.starfree.jp/nako3/kanzan_1_10.html

 どうかな? うまくいってると思うんだけど・・・

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

2019-09-20

なでしこでナンプレを解いてみようと「配列複製」のこと

| 01:06

 なでしこ1の最新版がリリースされましたね!ヽ(^o^)ノ

https://nadesi.com/top/index.php?%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9


 と、ゆうわけで、久々のなでしこ1。

 クジラ飛行机さまの『Pythonでナンプレを解いてみよう』とゆう記事が、ついったーで流れてきたので、通常は、なでしこ以外の記事はスルーすることが多いんだけど、なでしこで同じようにやってみようと思い立った。

https://news.mynavi.jp/article/zeropython-54/

 ぱいんさんは分からないし、アルファベットは見たくないが、イメージで! なんかまあ、こんなこったろう・・・って感じで、なでしこ1では、わりとすぐに出来たように思います。

 一応、ダウンロードしたての最新版で、記事と答えが合うことを確認。

 他の問題、解いてみてないけどねー(^▽^;

#ナンプレ(なでしこ1)
# 問題データを読む --- (*2)
問題=「 , ,5, ,3, ,6, ,
8, , ,4, , ,3, ,
4, , , , ,9, ,2,
 , , , , , ,9, ,6
 , , ,1, , , ,8,
7, , , , ,8, , ,
3, , ,5, , ,8, ,
2, ,1, ,7,3, , ,
 ,9, , ,1,2, , ,」をCSV取得。
9
 x=回数-1。
 9
  y=回数-1。
  問題[x][y]が数字か判定。
  もしそれいいえならば、問題[x][y]=0。
「--- 問題データ ---」を表示。
問題を表示。
「--- 完成データ ---」を表示。

問題の0をナンプレ解答検索。
# 白の部分を再帰的に解く --- (*3)
●ナンプレ解答検索(元データのNoを)
 # 終了判定 --- (*4)
 もし、No≧81ならば、元データを表示はい戻る。

 # 白があるか調べる --- (*5)
 #(既に数値が入っていたら、次のマス。)
 行とは整数=No/9を整数変換。列とは整数=No%9。
 もし、元データ[行][列]=0でなければ、元データの(No+1)をナンプレ解答検索。はい戻る。

 # どの数字が利用可能か調べる --- (*6)
 #(除外して良い数字を検索)
 除外数とは配列。
 9。
  除外数[元データ[回数-1][列]]=はい。
  除外数[元データ[行][回数-1]]=はい。

 # 3x3のマスの中も数字が重複しないか確認
 小行とは整数=行/3を整数変換*3。小列とは整数=列/3を整数変換*3。
 3
  x=回数-1。
  3
   y=回数-1。
   除外数[元データ[小行+x][小列+y]]=はい。

 # 利用可能な数値を順に入れて再帰 --- (*7)
 Cとは整数。
 9
  C=回数。
  もし、除外数[C]=はいならば、
   続ける。
  違えば、
   仮データとは配列=元データ。
   仮データ[行][列]=C。
   仮データの(No+1)をナンプレ解答検索。
   もしそれが0ならば続ける。
 いいえ戻る

注:表示されるまで数秒かかります;


 ところがですよ!

 コレをなでしこ3でも動かそうとしたら、たちまちはまりました(´д`)

 いちおう、v3に合わせて必要な「ここまで」を追加し、ローカル変数の宣言もちゃんと変更して、エラーは出ないし内容はv1で動いたのままなのに、何故だ、何故なんだ~~~と、悩みまくった結果。

 v1では、仮データに元データを複製するのは、代入するだけでOKだったのですが、v3では、それでは戻った時に、データが戻らないっぽいとゆうことが分かりました。

 再帰で、行き着くとこまで調査して完了~ではなく、うまくいかなかったら戻ってやり直し~、となるので、ちゃんとデータも元に戻ってくれないと、困っちゃうわけです。


 さてこで、「配列複製」です!

 なでしこ1には無い命令で(たしか)、何するもんだか分からぬと思ってたんだけど、コレを使ったらできました。一発解決☆

 元のぱいんさんのコードでも、代入ではなく何やらコピーのコマンドが使われているので、なでしこ1のは特有の便利仕様であって、本来はこうゆう物なのかも知れない

#ナンプレ(なでしこ3)
# 問題データを読む --- (*2)
問題=「 , ,5, ,3, ,6, ,
8, , ,4, , ,3, ,
4, , , , ,9, ,2,
 , , , , , ,9, ,6
 , , ,1, , , ,8,
7, , , , ,8, , ,
3, , ,5, , ,8, ,
2, ,1, ,7,3, , ,
 ,9, , ,1,2, , ,」をCSV取得。
9
 x=回数-1。
 9
  y=回数-1。
  問題[x][y]が数字か判定。
  もしそれいいえならば、問題[x][y]=0。
 ここまで。
ここまで。
「--- 問題データ ---」を表示。
問題を表CSV変換それ表示。
「--- 完成データ ---」を表示。

問題の0をナンプレ解答検索。
# 白の部分を再帰的に解く --- (*3)
●ナンプレ解答検索(元データのNoを)
 # 終了判定 --- (*4)
 もし、No≧81ならば、
  元データを表CSV変換それ表示はい戻る。
 ここまで。

 # 白があるか調べる --- (*5)
 #(既に数値が入っていたら、次のマス。)
 行とは変数=No/9を整数変換。列とは変数=No%9。
 もし、元データ[行][列]=0でなければ、
  元データの(No+1)をナンプレ解答検索。はい戻る。
 ここまで。

 # どの数字が利用可能か調べる --- (*6)
 #(除外して良い数字を検索)
 除外数とは変数配列。
 9。
  除外数[元データ[回数-1][列]]=はい。
  除外数[元データ[行][回数-1]]=はい。
 ここまで。

 # 3x3のマスの中も数字が重複しないか確認
 小行とは変数=(行/3を整数変換)*3。小列とは変数=(列/3を整数変換)*3。
 3
  x=回数-1。
  3
   y=回数-1。
   除外数[元データ[小行+x][小列+y]]=はい。
  ここまで。
 ここまで。

 # 利用可能な数値を順に入れて再帰 --- (*7)
 Cとは変数。
 9
  C=回数。
  もし、除外数[C]=はいならば、
   続ける。
  違えば、
   仮データとは変数=元データを配列複製。  //配列複製!!
   仮データ[行][列]=C。
   仮データの(No+1)をナンプレ解答検索。
   もしそれが0ならば続ける。
  ここまで
 ここまで。
 いいえ戻るここまで。

 簡易エディタでお試し出来ます。

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/20190920

2019-09-13

なで☆がめ ver.1.3で完成☆ あとハッシュの初期化とかselectedの設定のこととか

| 02:38

 成績表のデータは、二次元配列から、ジェイソンさんのハッシュ型に変更しようと思ったんですよ。

 最初、なんかワケ分からんと思ったけど、INIのようにキーでアクセス出来るのみならず、ハッシュの中にさらに配列を持たせたりと、なかなかの便利仕様っぽい☆

 まあ、なんか、こんなようなことです。

成績={
"6×9":[
  {"score":222,"date":"2019/08/30"},
  {"score":100,"date":"2019/09/12"},
  {"score":"","date":""}
 ],
"32×13":[
  {"score":698,"date":"2019/09/10"},
  {"score":555,"date":"2019/09/11"},
  {"score":412,"date":"2019/08/31"}
 ]
}
成績を反復
 ステージ=対象キー。
 成績["{ステージ}"]を反復
   「{ステージ} {対象["score"]}点 {対象["date"]}」を表示。
 ここまで。
ここまで。

 こうすると、各ステージごとのデータを別々に、一元管理できそうですね☆

 ところがですよ。

 上のように、直接値を入れるんじゃ無いような時には、配列の場合は、まず、「成績=配列」みたいな感じで初期化してやらなきゃなりません。なでしこ1では配列の宣言なしでも動いたけど、なでしこ3では絶対必要です。

 ハッシュも同様のようでした。(エラー出る)

 でも、ハッシュ的なのは無いっぽい。

 ででで、一応「配列」でも動いたかに思えたんだけどやっぱりダメで。

 どーしたらいいんだよと悩んでいたんですが、突然分かりました!

成績={}

 コレですwww

 そうさ。「配列」だって「[]」ってコトなんだよね? あああ(´д`)



 さて、気を取り直して。

 これさえ分かれば、データの読み書き部分はさくっと変更出来ました。

 で、成績表の表示も、「言う」では限界があるので、自前のフォームを作ってセレクトボックスで切り替えられるようにしようという

 ここで! なんと!! ついに!!!

 実装当初から分からんとぼやいていた、部品作成で作ったセレクトボックスの、selectedの付け方が分かりました!(喜)

 selectedとゆうのは、選択状態の初期値です。

 HTML的に言うと、<select>タグ配下の<option>タグに「selected」属性を設定するってことで、後から動的に変更しようとすると、IDとかを指定して「DOM属性設定」とゆう感じなんだけど、セレクトボックス作成で作った場合には<option>にIDは付いてないんで、どーしたらいいんだと、結局自前でHTML設定したりしてたんだけども。

 なななんと、セレクトボックスの「value」に選択状態にしたいオプションのvalueの値を設定するだけで良かったんです! なんと~。

 なでしこ3では、表示するテキストと同じ物が自動的に<option>タグvalue値として設定されているので、

["A","B","C"]のセレクトボックス作成し、テストに代入
テストの「value」に「B」をDOM属性設定。

 こんだけ!

 おおぉ、なんてこった。簡単じゃん;



 んなこんなで・・・

#なで☆がめ ver.1.3

#---設定----------------------------------------
余白=20。部品間隔=10。ラベル高さ=30。メニュー高さ=25。
駒w=40。駒h=40。駒色=配列。消駒=配列。

最小駒数x=5。最小駒数y=5。
最大駒数x=((クライアント幅-余白*4)/駒w)を切捨。
最大駒数y=((クライアント高さ-余白-部品間隔*2-ラベル高さ-メニュー高さ)/駒h)を切捨。
駒数x=6。駒数y=9。駒数=駒数x*駒数y。
画面w=駒w*駒数x。画面h=駒h*駒数y。
母艦w=画面w+余白*2。//母艦wを言う
母艦h=画面h+余白+部品間隔*2+ラベル高さ+メニュー高さ。

色一覧=["",["#FF6699","♥"],["#8888FF","♣"],["#66EE66","♠"],["#FFCC66","♦"]]。
探索済一覧=配列。消色=。個数=0。スコア=0。
終了フラグ=オフ。カウンタ=0。順位=0。
ハイスコア表示件数=10。ハイスコアフラグ=0。
ステージ=「{駒数x}×{駒数y}」。ステージ一覧=配列。

#---成績読み込み--------------------------------
成績=「なで☆がめ成績表2」をローカルストレージ読むもし、(成績=undefined)または(成績=ならば、
  成績={}。ステージを成績初期化。
ここまで。

#---HTML作成------------------------------------
HTML=「<div id="base"><div id="bokan"><div id="game"></div></div></div>」
「#nako3_div_1」にHTMLHTML設定。

#---GUI作成-------------------------------------
「#bokan」へDOM親要素設定。

#---難易度変更-----
「X:」のラベル作成して、xラベル代入。
xラベルに{
  "position": "absolute",
  "font-size": "14px",
}をDOMスタイル一括設定。

「* Y:」のラベル作成して、yラベル代入。
yラベルに{
  "position": "absolute",
  "幅": "120px",
  "font-size": "14px",
}をDOMスタイル一括設定。

「({最小駒数x}~{最大駒数x})」のラベル作成して、x駒数ラベル代入。
x駒数ラベルに{
  "position": "absolute",
  "font-size": "10px",
  "幅": "50px",
}をDOMスタイル一括設定。

「({最小駒数y}~{最大駒数y})」のラベル作成して、y駒数ラベル代入。
y駒数ラベルに{
  "position": "absolute",
  "font-size": "10px",
  "幅": "50px",
}をDOMスタイル一括設定。

「{駒数x}」のエディタ作成して、xエディタ代入。
xエディタに{
  "position": "absolute",
  "幅": "25px",
  "高さ": "15px",
}をDOMスタイル一括設定。

「{駒数y}」のエディタ作成して、yエディタ代入。
yエディタに{
  "position": "absolute",
  "幅": "25px",
  "高さ": "15px",
}をDOMスタイル一括設定。

「難易度変更」のボタン作成して、難易度ボタン代入。
難易度ボタンに{
  "position": "absolute",
  "幅": "100px",
  "高さ": "25px",
}をDOMスタイル一括設定。

#---スコア表示-----
「SCORE」のラベル作成して、スコアラベル代入。
スコアラベルに{
  "position": "absolute",
  "幅": "95px",
  "高さ": "{ラベル高さ}px",
  "top": "{部品間隔}px",
  "left": "{余白}px",
  "font-size": "24px",
  "font-weight": "bold",
  "色": "#CC4433",
  "text-shadow": "2px 2px 1px #FFFFFF";  /* 水平方向の距離,垂直方向の距離,影のぼかし半径,影の色*/
}をDOMスタイル一括設定。

「{スコア}」のラベル作成して、スコア表示代入。
スコア表示に{
  "position": "absolute",
  "幅": "80px",
  "高さ": "{ラベル高さ}px",
  "top": "{部品間隔}px",
  "left": "115px",
  "padding": "0px 10px",  /* 上下、左右*/
  "font-size": "24px",
  "font-weight": "bold",
  "背景色": "#FFEEDD",
  "色": "#882211",
  "text-align": "right",
}をDOMスタイル一括設定。

#---ゲームオーバー表示-----
「GAME OVER」のラベル作成して、ゲームオーバー代入。
ゲームオーバーに{
  "position": "absolute",
  "幅": "{母艦w-20}px",
  "高さ": "100px",
  "top": "{母艦h/2-100}px",
  "left": "0px",
  "padding": "30px 10px",  /* 上下、左右*/
  "font-size": "24px",
  "font-weight": "bold",
  "背景色": "rgba(0, 0, 0, 0.7)",
  "色": "#FFEEEE",
  "text-align": "center",
  "z-index": "-1",
  "transition": "opacity 0.5s, transform 0.5s",    /* 0.5秒かけて透明度とサイズの変化 */
  "opacity": "0",
  "transform": "scale(0.1)",    /* 0.1に縮小 */
}をDOMスタイル一括設定。

「もう一度?」のボタン作成して、リトライボタン代入。
リトライボタンに{
  "position": "absolute",
  "幅": "100px",
  "top": "{母艦h/2+10}px",
  "左": "{母艦w/2-50}px",
  "z-index": "-1",
}をDOMスタイル一括設定。

#---メニューボタン-----
「成績表示」のボタン作成して、成績表示ボタン代入。
成績表示ボタンに{
  "position": "absolute",
  "幅": "80px",
  "高さ": "25px",
  "左": "0px",
  "top": "{母艦h-25}px",
}をDOMスタイル一括設定。

「リセット」のボタン作成して、成績リセットボタン代入。
成績リセットボタンに{
  "position": "absolute",
  "幅": "80px",
  "高さ": "25px",
  "左": "80px",
  "top": "{母艦h-25}px",
}をDOMスタイル一括設定。

「遊び方」のボタン作成して、ルールボタン代入。
ルールボタンに{
  "position": "absolute",
  "幅": "60px",
  "高さ": "25px",
  "左": "{母艦w-60}px",
  "top": "{母艦h-25}px",
}をDOMスタイル一括設定。

#---成績表ポップアップ-----
EL=「div」のDOM要素作成。ID=「pop-up」
ELの「id」にIDをDOM属性設定。
DOM親要素へELをDOM子要素追加。
IDへDOM親要素設定
Sのラベル作成し、成績テキストに代入。
「OK」のボタン作成し、OKボタン代入。
「#pop-up」をオフに可視変更。

 mgn=20。
 Tw=250。Th=200。           //テキスト
 Bw=60。Bh=25。            //OKボタン
 Pw=Tw+mgn。Ph=Th+Bh+15+mgn*2。   //ポップアップ

「#pop-up」に{
  "position": "absolute",
  "幅": "{Pw}px",
  "高さ": "{Ph}px",
  "top": "{母艦h/2-Ph/2}px",
  "左": "{母艦w/2-Pw/2}px",
  "背景色": "#FFFFDD",
  "border": "1px solid #666699"
  "border-top": "15px solid #666699"
}をDOMスタイル一括設定。

成績テキストに{
  "position": "absolute",
  "幅": "{Tw}px",
  "高さ": "{Th}px",
  "top": "{Ph/2-Th/2-Bh/2+10}px",
  "左": "{Pw/2-Tw/2}px",
  "font-size": "16px",
  "font-family": "monospace",
  "line-height": "1em",
  "letter-spacing": "0em",
  "背景色": "#FFFFDD",
}をDOMスタイル一括設定。

 OKボタンに{
  "position": "absolute",
  "幅": "{Bw}px",
  "高さ": "{Bh}px",
  "top": "{Ph-Bh-5}px",
  "左": "{Pw/2-Bw/2}px",
}をDOMスタイル一括設定。

#---セレクトボックス-----
「ステージ:」のラベル作成し、ステージラベル代入。

C=0。
成績を反復
 ステージ一覧[C]=対象キー
 C=C+1。
ここまで。

ステージ一覧のセレクトボックス作成し、成績セレクトに代入。
成績セレクトの「onchange」に「表示ステージ変更」をDOMイベント設定。
成績セレクトをオフに可視変更。


#---イベント------------------------------------
OKボタンをクリックした時には
 成績表閉じる。
ここまで。

リトライボタンをクリックした時には、
  オフにゲームオーバー表示。
  新規ゲーム。
ここまで。

成績表示ボタンをクリックした時には、
  成績セレクトをオンに可視変更。
  順位でステージのハイスコア表示ここまで。

成績リセットボタンをクリックした時には、
  成績リセット。
ここまで。

ルールボタンをクリックした時には、
 「【なで☆がめ】
いわゆるSameGameのルール。
駒をクリックすると、それと上下左右で隣接する同じ色の駒が一緒に消えます。
消せる駒が無くなったらゲームオーバー。
同時に消える駒が多ければ多いほど高得点になりますが、画面上から全ての駒を消すことが出来ればボーナス点が入りますので、よく考えて全消しを目指しましょう。(必ず全消し出来るわけではありませんが)」と言うここまで。

難易度ボタンをクリックした時には、
  x=xエディタのテキスト取得。y=yエディタのテキスト取得。
  もし、x>最大駒数xならば、xエディタに最大駒数xをテキスト設定。
  もし、x<最小駒数xならば、xエディタに最小駒数xをテキスト設定。
  もし、y>最大駒数yならば、yエディタに最大駒数yをテキスト設定。
  もし、y<最小駒数yならば、yエディタに最小駒数yをテキスト設定。
  x=xエディタのテキスト取得。y=yエディタのテキスト取得。

  「{x}*{y}に駒数変更して新規ゲームを始めます」で二択。
  もしそれはいならば、
   駒数x=x。駒数y=y。駒色=配列。ステージ=「{駒数x}×{駒数y}」。
   もし、(成績["{ステージ}"]=undefined)ならば、
     ステージを成績初期化。
     EL=「option」のDOM要素作成。
     ELにステージをテキスト設定。
     ELの「value」にステージをDOM属性設定。
     ELの「selected」に「true」をDOM属性設定。
     成績セレクトへELをDOM子要素追加。
   ここまで。
   CSS設定。駒作成。駒設定。新規ゲーム。
  違えば、
   xエディタに駒数xをテキスト設定。yエディタに駒数yをテキスト設定。
  ここまで。
ここまで。



#-----------------------------------------------
CSS設定。駒作成。駒設定。
新規ゲーム。
●新規ゲーム
 終了フラグはオフ。順位=0。
 スコア=0。スコア表示にスコアをテキスト設定。
 数を0から駒数-1まで繰り返す。
  色番号=4の乱数。
  駒色[数]=色番号+1。
  数へ駒描画。
 ここまで。
ここまで。

●(Noの)マウス押下時。
 消色=駒色[No]。個数=1。消駒=配列。  //初期化。
 もし終了フラグ=オフならば、
  もし、駒色[No]=でなければ、
   Noの同色探索。駒詰。全駒再描画。
   スコア=スコア+(個数-1)^2。
   スコア表示にスコアをテキスト設定。
   もし、(終了判定)がはいならば、
    終了フラグはオン終了処理。
   ここまで。
  ここまで。
 ここまで。
ここまで。

●終了処理
  もし、(全消判定)がはいならば、
   ゲームオーバーの「色」に「#FFDDDD」をDOMスタイル設定。
   ゲームオーバーに「全消し!<BR>Bonus +100」をテキスト設定。
   オンにゲームオーバー表示。
   //全消しボーナス
   カウンタ=0。
   1.3秒後には、
    0.01秒タイマー開始した時には(タイマーID)
     スコア=スコア+1。カウンタ=カウンタ+1。
     スコア表示にスコアをテキスト設定。
     もし、カウンタ=100ならば、
       タイマーIDのタイマー停止。
       0.5秒後には
        最終処理。
       ここまで。
     ここまで。
    ここまで。
   ここまで。
  違えば、
   ゲームオーバーの「色」に「#DDDDFF」をDOMスタイル設定。
   ゲームオーバーに「GAME OVER」をテキスト設定。
   オンにゲームオーバー表示。
   0.5秒後には
     最終処理。
   ここまで。
  ここまで。
ここまで。

●最終処理
 ステージへ成績記録。順位はそれ。
 リトライボタンの「z-index」に「3」をDOMスタイル設定。
 もし、順位=0でなければ、
   ステージラベルに「ステージ:{ステージ}」をテキスト設定。
   ステージラベルオンに可視変更。
   順位でステージのハイスコア表示。
 ここまで。
ここまで。

●(Aに)ゲームオーバー表示
  もし、A=オンならば、
    ゲームオーバーオンに可視変更。
    ゲームオーバーの「z-index」に「2」をDOMスタイル設定。
    ゲームオーバーの「transform」に「scale(1)」をDOMスタイル設定。
  違えば、
    ゲームオーバーオフに可視変更。
    ゲームオーバーの「transform」に「scale(0.1)」をDOMスタイル設定。
    リトライボタンの「z-index」に「-1」をDOMスタイル設定。
  ここまで。
ここまで。

●(順位でステージの)ハイスコア表示
  ハイスコア=「  ★☆★ ハイスコア ★☆★{改行}{改行}」。
  (ハイスコア表示件数)
    順=回数。
    もし、順位=順ならば=「😃」
    違えば=「 」。
    得点=成績["{ステージ}"][順-1]["score"]。
    もし、得点=ならば、得点=「----」。
    違えば、得点=「{得点}」を4で文字列右寄せ。
    日付=成績["{ステージ}"][順-1]["date"]
    もし、日付=ならば、日付=「----/--/--」。
    順=「{順}」を2で文字列右寄せ。
    ハイスコア=ハイスコアに「{}{順}位 {得点}点 {日付}」を一行追加。
  ここまで。
  ハイスコア=ハイスコアの改行を「<BR>」に置換。
  成績テキストにハイスコアをテキスト設定。
  成績表開くここまで。

●(Sを数で)文字列右寄せ
  スペース=。
  もし、(Sの文字数)<数ならば、
   (数-(Sの文字数))
    スペース=スペースに「&nbsp;」を追加。
   ここまで。
  ここまで。
  スペース&Sで戻るここまで。
#-----------------------------------------------
●表示ステージ変更
 ステージ=成績セレクトのテキスト取得。
 もし、ステージ=「{駒数x}×{駒数y}」ならば、
  順位でステージのハイスコア表示。
 違えば、
  0でステージのハイスコア表示。
 ここまで。
ここまで。

●成績表閉じる
 ステージ=「{駒数x}×{駒数y}」
 ステージラベルに「ステージ:」をテキスト設定。
 「#pop-up」をオフに可視変更。
 「#pop-up」の「z-index」に「-1」をDOMスタイル設定。 //最背面
 成績セレクトをオフに可視変更。
ここまで。

●成績表開く
 成績セレクトの「value」にステージをDOM属性設定。
 「#pop-up」をオンに可視変更。
 「#pop-up」の「z-index」に「99」をDOMスタイル設定。 //最前面
ここまで。
#-----------------------------------------------
●(ステージへ)成績記録
  順位=0。
  数を(ハイスコア表示件数)から1まで繰り返す。
    もし、(成績["{ステージ}"][数-1]["score"]<スコア)または(成績["{ステージ}"][数-1]["score"]=)ならば、
      順位=数。
    違えば、
      抜ける
    ここまで。
  ここまで。
  数を(ハイスコア表示件数)から1まで繰り返す。
    もし、順位=0でなければ、
      もし、順位<数ならば、
        成績["{ステージ}"][数-1]["score"]=成績["{ステージ}"][数-2]["score"]。
        成績["{ステージ}"][数-1]["date"]=成績["{ステージ}"][数-2]["date"]。
      違えばもし、順位=数ならば、
        成績["{ステージ}"][数-1]["score"]=スコア。
        成績["{ステージ}"][数-1]["date"]=今日。
        抜ける。
      ここまで。
    ここまで。
  ここまで。
  「なで☆がめ成績表2」に成績をローカルストレージ保存。
  順位で戻るここまで。

●成績リセット
  「成績をリセットしてもいい?」と二択。
  もしそれはいならば、
    「なで☆がめ成績表2」をローカルストレージキー削除。
    成績={}。ステージを成績初期化。
  ここまで。
ここまで。

●(ステージを)成績初期化
 成績["{ステージ}"]=配列。
 (ハイスコア表示件数)
  C=回数-1。
  成績["{ステージ}"][C]={}。
  成績["{ステージ}"][C]["score"]=。
  成績["{ステージ}"][C]["date"]=。
 ここまで。
ここまで。

#-----------------------------------------------
●(Noの)同色探索
 X=No%駒数x。Y=(No/駒数x)を切捨。
 もし、(探索済一覧[No]=1)または、(駒色[No]=)ならば、
   戻る。
 違えば、
   探索済一覧[No]=1。
   # 上下左右に同じ色の駒があるかどうかチェックする
   もし、(X-1≧0)かつ(駒色[No-1]=消色)かつ(探索済一覧[No-1]≠1)ならば、        #左
     個数=個数+1。(No-1)の同色探索。
   ここまで。
   もし、(X+1<駒数x)かつ(駒色[No+1]=消色)かつ(探索済一覧[No+1]≠1)ならば、      #右
     個数=個数+1。(No+1)の同色探索。
   ここまで。
   もし、(Y-1≧0)かつ(駒色[No-駒数x]=消色)かつ(探索済一覧[No-駒数x]≠1)ならば、    #上
     個数=個数+1。(No-駒数x)の同色探索。
   ここまで。
   もし、(Y+1<駒数y)かつ(駒色[No+駒数x]=消色)かつ(探索済一覧[No+駒数x]≠1)ならば、  #下
     個数=個数+1。(No+駒数x)の同色探索。
   ここまで。
   もし、個数=1でなければ、
     駒色[No]=。消駒[No]=1。
   ここまで。
   戻る。
 ここまで。
ここまで。

●駒詰
 # 消えた分だけ下に詰める
 Noを駒数xから駒数-1まで繰り返す。
  Y=(No/駒数x)を切捨。
  もし、(消駒[No]=1)ならば、
    # 上部の駒を1個下にずらす。
    移動元=No-駒数x。移動先=No。
    (Y)   #上部に残ってる駒の数。
      駒色[移動先]=駒色[移動元]。
      駒色[移動元]=。
      移動元=移動元-駒数x。移動先=移動先-駒数x。
    ここまで。
  ここまで。
 ここまで。

 #全部消えた列を左に詰める
 Noを(駒数-2)から(駒数-駒数x)まで繰り返す。  #一番下がなら全部消えてる
  X=No%駒数x+1。
  もし、(駒色[No]=)ならば、
    移動元=No+1。移動先=No。
    (駒数x-X)    #右側に残ってる列数。
      (駒数y)    #一列全てをずらす。
        駒色[移動先-駒数x*(回数-1)]=駒色[移動元-駒数x*(回数-1)]。
        駒色[移動元-駒数x*(回数-1)]=。
      ここまで。
      移動元=移動元+1。移動先=移動先+1。
    ここまで。
  ここまで。
 ここまで。
ここまで。

●終了判定
 Noを0から駒数-1まで繰り返す。
  X=No%駒数x。Y=(No/駒数x)を切捨。
  もし、駒色[No]=でなければ、
   # 上下左右に同じ色の駒があるかどうかチェックする
   もし、X=0ならば、         #左端
    もし、(駒色[No]=駒色[No+1])または(駒色[No]=駒色[No-駒数x])または(駒色[No]=駒色[No+駒数x])ならば、
     いいえ戻る。
    ここまで。
   違えばもし、X=駒数x-1ならば、   #右端
    もし、(駒色[No]=駒色[No-1])または(駒色[No]=駒色[No-駒数x])または(駒色[No]=駒色[No+駒数x])ならば、
     いいえ戻る。
    ここまで。
   違えばもし、Y=0ならば、     #上端
    もし、(駒色[No]=駒色[No-1])または(駒色[No]=駒色[No+1])または(駒色[No]=駒色[No+駒数x])ならば、
     いいえ戻る。
    ここまで。
   違えばもし、Y=駒数y-1ならば、   #下端
    もし、(駒色[No]=駒色[No-1])または(駒色[No]=駒色[No+1])または(駒色[No]=駒色[No-駒数x])ならば、
     いいえ戻る。
    ここまで。
   違えば、
    もし、(駒色[No]=駒色[No-1])または(駒色[No]=駒色[No+1])または(駒色[No]=駒色[No-駒数x])または(駒色[No]=駒色[No+駒数x])ならば、
     いいえ戻る。
    ここまで。
   ここまで。
  ここまで。
 ここまで。
 はい戻るここまで。

●全消判定
 Noを0から駒数-1まで繰り返す。
  もし、駒色[No]=でなければ、
    いいえ戻る。
  ここまで。
 ここまで。
 はい戻るここまで。
#-----------------------------------------------
●CSS設定
 駒数=駒数x*駒数y。画面w=駒w*駒数x。画面h=駒h*駒数y。
 母艦w=画面w+余白*2。//母艦wを言う
 もし母艦w<480ならばメニュー高さ=50。  //駒数11未満
 違えばメニュー高さ=25。
 母艦h=画面h+余白+部品間隔*2+ラベル高さ+メニュー高さ。

 「#base」に{
  "margin": "auto",
  "幅": "{母艦w}px",
  "高さ": "{母艦h}px",
  "border": "5px ridge #999999",
  "背景色": "#FFDDCC",
}をDOMスタイル一括設定。
 「#bokan」に{
  "position": "absolute"
}をDOMスタイル一括設定。

 「#game」に{
  "position": "absolute",
  "幅": "{画面w+2}px",
  "高さ": "{画面h+2}px",
  "top": "{母艦h-画面h-余白-メニュー高さ}px",
  "左": "{余白}px",
  "背景色": "#FFFFFF",
}をDOMスタイル一括設定。

 ゲームオーバーに{
  "幅": "{母艦w-20}px",
  "top": "{母艦h/2-100}px",
}をDOMスタイル一括設定。

リトライボタンに{
  "top": "{母艦h/2+10}px",
  "左": "{母艦w/2-50}px",
}をDOMスタイル一括設定。

成績表示ボタンに{
  "top": "{母艦h-25}px",
}をDOMスタイル一括設定。

成績リセットボタンに{
  "top": "{母艦h-25}px",
}をDOMスタイル一括設定。

ルールボタンに{
  "左": "{母艦w-60}px",
  "top": "{母艦h-25}px",
}をDOMスタイル一括設定。

「#pop-up」に{
  "top": "{母艦h/2-Ph/2}px",
  "左": "{母艦w/2-Pw/2}px",
}をDOMスタイル一括設定。


 もし母艦w<480ならば、
  xラベルに{
  "左": "{母艦w-235}px",
  "top": "{母艦h-25-部品間隔-18}px",
}をDOMスタイル一括設定。

  yラベルに{
  "左": "{母艦w-178}px",
  "top": "{母艦h-25-部品間隔-18}px",
}をDOMスタイル一括設定。

  x駒数ラベルに{
  "左": "{母艦w-215}px",
  "top": "{母艦h-40-部品間隔-18}px",
}をDOMスタイル一括設定。

  y駒数ラベルに{
  "左": "{母艦w-140}px",
  "top": "{母艦h-40-部品間隔-18}px",
}をDOMスタイル一括設定。

  xエディタに{
  "左": "{母艦w-215}px",
  "top": "{母艦h-25-部品間隔-18}px",
}をDOMスタイル一括設定。

  yエディタに{
  "左": "{母艦w-140}px",
  "top": "{母艦h-25-部品間隔-18}px",
}をDOMスタイル一括設定。

  難易度ボタンに{
  "左": "{母艦w-100}px",
  "top": "{母艦h-25-部品間隔-22}px",
}をDOMスタイル一括設定。

 違えば、
  xラベルに{
  "左": "185px",
  "top": "{母艦h-23}px",
}をDOMスタイル一括設定。

  yラベルに{
  "左": "240px",
  "top": "{母艦h-23}px",
}をDOMスタイル一括設定。

  x駒数ラベルに{
  "左": "205px",
  "top": "{母艦h-38}px",
}をDOMスタイル一括設定。

  y駒数ラベルに{
  "左": "275px",
  "top": "{母艦h-38}px",
}をDOMスタイル一括設定。

  xエディタに{
  "左": "205px",
  "top": "{母艦h-23}px",
}をDOMスタイル一括設定。

  yエディタに{
  "左": "278px",
  "top": "{母艦h-23}px",
}をDOMスタイル一括設定。

  難易度ボタンに{
  "左": "320px",
  "top": "{母艦h-25}px",
}をDOMスタイル一括設定。

 ここまで。
ここまで。

●駒作成
  マウス押下関数。
  HTML。
  数を0から駒数-1まで繰り返す。
    マウス押下関数=マウス押下関数に「●マウス押下時{数}{改行}  {数}のマウス押下時。{改行}ここまで。{改行}{改行}」を一行追加。
    HTMLHTMLに「<div id="cv{数}"></div>」を一行追加。
  ここまで。
  マウス押下関数ナデシコする。
  「#game」にHTMLHTML設定。
ここまで。

●駒設定
 数を0から駒数-1まで繰り返す。
  駒x=数%駒数x*駒h。
  駒y=((数/駒数x)を切捨)*駒w。
  「#cv{数}」に{
  "position": "absolute",
  "z-index": "1",
  "幅": "{駒w-2}px",
  "高さ": "{駒h-2}px",
  "top": "{駒y}px",
  "left": "{駒x}px",
  "border": "2px solid #FFFFFF",
  "border-radius": "0.5em",
  "font-size": "30px"
  "font-weight": "nomal",
  "cursor": "default",
  "色": "#FFFFFF",
  "text-align": "center",
  }をDOMスタイル一括設定。

  #---イベント-----
  探索済一覧[数]=0。
  「#cv{数}」の「onclick」に「マウス押下時{数}」をDOMイベント設定。
 ここまで。
ここまで。

●全駒再描画
  Noを0から駒数-1まで繰り返す。
   探索済一覧[No]=0。
   もし、駒色[No]=ならば、
     Noを駒消去。
   違えば、
     Noへ駒描画。
   ここまで。
  ここまで。
ここまで。

●(Noへ)駒描画
 色番号=駒色[No]。
 「#cv{No}」の「背景色」に色一覧[色番号][0]をDOMスタイル設定。
 「#cv{No}」に色一覧[色番号][1]をテキスト設定。
ここまで。

●(Noを)駒消去
 「#cv{No}」の「背景色」に白色DOMスタイル設定。
 「#cv{No}」にをテキスト設定。
ここまで。
#-----------------------------------------------
●クライアント幅
  「document.documentElement.clientWidth」をJS実行。
ここまで。

●クライアント高さ
  「document.documentElement.clientHeight」をJS実行。
ここまで。

●(GUIをAに)可視変更
  もし、A=オンならば
    GUIの「opacity」に「1」をDOMスタイル設定。
  違えば、
    GUIの「opacity」に「0」をDOMスタイル設定。
  ここまで。
ここまで。
#-----------------------------------------------------------------------

http://snowdrops.starfree.jp/nako3/nadegame_1_30.html

 スマホでやると、難易度変更、直接エディタ数値を入れて変更する仕様は、ちょっと面倒っぽかったけど、かといって、パソコンで無闇に長いセレクトボックスとかもアレだしねー。

 これで一応「なで☆がめ」は、完成としたい。

 珍しく、最後まで飽きずに作ったね(!?)

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

2019-09-09

0と空は同じなの?

| 14:58

 テキスト取得のうまくいかない謎が何とかなったので、無事に難易度を変更出来るようになりました☆

 後から呼べるよう、駒を作ったり、CSSを設定したりする部分をまるっと関数にしたくらいで、大きな変更はありませんが。

http://snowdrops.starfree.jp/nako3/nadegame_1_20.html

 成績表は、一応駒数を表示するようにしたけど、本当はまちっとなんとかしたいね。


 ところで、ナゾと言えば書き忘れていましたが、もう一個ありました。

 0は、なの? とゆう話です。

A=。
「A={A}です」を表示もし、A=0ならば、「A=0です」と表示もし、A=ならば、「A=です」と表示
B=0。
「B={B}です」を表示もし、B=0ならば、「B=0です」と表示もし、B=ならば、「B=です」と表示

 これを、なでしこ1で実行すると、

A=です
A=0です
A=です
B=0です
B=0です

 と、なります。

 0は、ではありません。

 ちなみに、A=0となっているのは、が0なのではなく、数値が入ってないから0とゆう扱いになってるんですよね。ではなく、なんらかの文字列を入れても、A=0になります。


 なでしこ3の場合は・・・

A=です
A=0です
A=です
B=0です
B=0です
B=です

 0はだとゆうことになっちゃうんだよね。


 このため、駒があるところに、色一覧の配列の0~3を設定してどの駒があるのかを表し、駒が無い場所を「」としたところ、0の駒があるトコは駒が無いとゆうことになって、めちゃくちゃ誤動作していた;

 駒が無いとこは、-1とでもしておけば良かったんだけどもさー。当初は、意味が分からなかったため、色一覧の0を開けておいて、1~4を使うことにしていたというwww

 直すのめんどーだから、未だにのままになってる;;;


 0はなのか、それとも0とは別物なのか。

 どっちが妥当なのか、わたしにはよく分からん~。

 しかし、出来れば、なでしこ1と同じであって欲しい・・・

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

2019-09-06

部品作成とイベントの順番のナゾ(?)

| 23:53

 簡単なコードでは再現しないと言っていたのは気のせいで、簡易エディタでは、最初に実行ボタンをした時には、ちゃんと再現してたんだけど、の後、クリアしてもう一度実行した時には、なぜか普通に出来るようになっちゃってるんだよね。多分、ナニカが残ってるんだろうね(?)

 確か、前にもこんなことがあったと思うのに、忘れている。進歩が無い(´・ω・`)

 ともあれ、実際にHTMLで動かす時には、当然実行ボタンなんて物は無く、もっぺん実行するとなったら再読み込み、みたいな感じになるんでね、これこのとうりちゃんと再現しましたよ。

「1」のラベル作成して、ラベル1に代入
「a」のエディタ作成して、エディタ1に代入。
「1」のボタン作成して、ボタン1に代入ボタン1をクリックした時には、
  エディタ1のテキスト取得して言うここまで。
改行作成。

「2」のラベル作成して、ラベル2に代入
「b」のエディタ作成して、エディタ2に代入。
「2」のボタン作成して、ボタン2に代入ボタン2をクリックした時には、
  エディタ2のテキスト取得して言うここまで。
改行作成。

「3」のラベル作成して、ラベル3に代入
「c」のエディタ作成して、エディタ3に代入。
「3」のボタン作成して、ボタン3に代入ボタン3をクリックした時には、
  エディタ3のテキスト取得して言う
ここまで。
改行作成

http://snowdrops.starfree.jp/wnako3_test/GUI_Event_1.html

 ふつーに部品作成して、イベントを設定しているだけなんですが。

 ボタン1は、正常動作するけど、2、3が動かないですよね~。

 これ、「あ」を言う、とかだとちゃんと言ってくれるんで、イベント自体は動いてるんですよね。

 テキスト取得が失敗してるだけなら、とかundefinedとかを言いそうなもんだけど、うんともすんとも言わない

 この行以降に命令があっても、それも実行せず、どうもエラーもなにも出さずに、こでプログラムが止まっちゃうっぽい感じなんですよね~(?_?)


 でも、なんでだか分からないけど、このように部品を全て作成した後、イベントを設定すれば大丈夫ラシイことを発見。

 単に、順番・・・なのか???

#---GUI作成-----
「1」のラベル作成して、ラベル1に代入
「a」のエディタ作成して、エディタ1に代入。
「1」のボタン作成して、ボタン1に代入改行作成。

「2」のラベル作成して、ラベル2に代入
「b」のエディタ作成して、エディタ2に代入。
「2」のボタン作成して、ボタン2に代入改行作成。

「3」のラベル作成して、ラベル3に代入
「c」のエディタ作成して、エディタ3に代入。
「3」のボタン作成して、ボタン3に代入改行作成。

#---イベント-----
ボタン1をクリックした時には、
  エディタ1のテキスト取得して言うここまで。

ボタン2をクリックした時には、
  エディタ2のテキスト取得して言うここまで。

ボタン3をクリックした時には、
  エディタ3のテキスト取得して言う
ここまで。

http://snowdrops.starfree.jp/wnako3_test/GUI_Event_2.html

 そういえば、なでしこ3は、なでしこ1とは違って、上の方に関数があったりすると、うまく動かないことがあったりもするような感じが、あるよね(?)

 でも、全部が全部じゃないんだよね。それと、同様のコトなのか・・・

 あんまよく分かんないけど、こうゆうモノだと思って、気を付けてみよう。


 ・・・と、ゆうわけでナゾ解明とも言えないけど、とりあえずはこれで何とかなりそう

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