Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2018/01/02 (火)

ナコ様の透視術

| 23:15 | ナコ様の透視術 - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - ナコ様の透視術 - 雪乃☆雫のなでしこ日和 ナコ様の透視術 - 雪乃☆雫のなでしこ日和 のブックマークコメント

 あけましておめでとうございます。

 12月中は、ほとんどなにもしないでいるうちに年が明け、ふと気が付いたらなでしこ3がバージョンアップしていたよ!

 んな中、なでしこ1のプログラム(笑)


 吹出作成と吹出セリフ表示は、前にスクリーンセーバーの時に作ったものなので(https://nadesiko.g.hatena.ne.jp/snowdrops89/20161107/1478528925)、は、数当てカードを作っただけ。

 数当てカードは、相手が心の中で思った数を当てるという古典的な有名なマジックで、カードの最初の数を足していくだけの誰にでも出来るカンタンなものなんだけど、暗算能力が無いワタシはまったくスマートに出来ないんですね;

 して、なんでこんなことが可能なのかについては、わりと最近理解しました;;;

 全ての整数は、重複しないいくつかの2の累乗の和で表すことができる、とゆうことになってる・・・ラシイ。(結局んなに理解してない?!)

 ようするに二進数なんだけど、なんでこんなりくどい言い方しなきゃならんのか><;

 とっ、とにかく、ようく分かったのは、昔は一生懸命書き写したりしていたカードですが、実はプログラムで一瞬で作るコトの出来るシロモノだった・・・ということで、ついでにナコ様に実演してもらうようにしたものです。


 ナコさまのセリフを読んだら、吹き出しをクリックして進めて下さい。

 カードの選択は、慎重かつ正直に。

 ナコさまは違えませんので、もし、結果が思っていた数と違ったら、それはアナタが違ってるのですwww

#ナコ様の透視術
#-----------------------------------------------------------
!母艦設計=「母艦の可視はオフ母艦のタイトルは「ナコ様の透視術」

#------------------------------------------------------------
科白色=$EEBBCC
#------------------------------------------------------------

#なこ様
ナコ様とはなこ。
これについて
  可視はオフ。
  X=ナコ様の幅。//デスクトップワークエリアW-ナコ様の幅。
  Y=デスクトップワークエリアH-ナコ様の高さ。
  マウス押した時は~
    吹出の可視はオフ。吹出右の可視はオフ。
  マウス離した時は~
    もし、Y-吹出の高さ+50<0ならば、Y=吹出の高さ-50-20。
    もし、Y+ナコ様の高さ>デスクトップワークエリアHならば、Y=デスクトップワークエリアH-ナコ様の高さ
    もし、X-吹出の幅<0ならば、
      もし、X<0ならば、X=0。
      吹出右の位置=「{ナコ様のX+ナコ様の幅-80},{ナコ様のY-吹出右の高さ+50}」
      もし、吹出方向=「右上」でなければ、吹出方向は「右上」。
    違えばもし、X+ナコ様の幅*2>デスクトップワークエリアWならば、
      X=デスクトップワークエリアW-ナコ様の幅*2
      吹出の位置=「{ナコ様のX-吹出の幅},{ナコ様のY-吹出の高さ+50}」
      もし、吹出方向=「左上」でなければ、吹出方向は「左上」。
    違えば、
      吹出の位置=「{ナコ様のX-吹出の幅},{ナコ様のY-吹出の高さ+50}」
      もし、吹出方向=「左上」でなければ、吹出方向は「左上」。
    もし、吹出表示状態=オンならば、
      吹出方向で条件分岐
        左上ならば、吹出の可視はオン。
        右上ならば、吹出右の可視はオン。
    母艦位置設定。
  ダブルクリックした時は~終わる。

#なこ様吹出
C=0。クリック待ちフラグ=オフ。
吹出とはフォームこれについて
  可視はオフ。ドラッグ移動オフ。
  クリックした時は~
    もし、クリック待ちフラグ=オンならば、
      クリック待ちフラグ=オフ。
      「{シナリオ¥C}」をナデシコする。。
      C=C+1。
      クリック待ちフラグ=オン。

吹出右とはフォームこれについて
  可視はオフ。ドラッグ移動オフ。
  クリックした時は~
    もし、クリック待ちフラグ=オンならば、
      クリック待ちフラグ=オフ。
      「{シナリオ¥C}」をナデシコする。。
      C=C+1。
      クリック待ちフラグ=オン。

#カードの表示位置(ダイアログ)は母艦の中央になる。
*母艦位置設定
  母艦のX=ナコ様のX+120。母艦のY=ナコ様のY-30。
  母艦の幅=ナコ様の幅。母艦の高さ=ナコ様の高さ。
#-----------------------------------------------------------
シナリオ=「科白を喋る。
科白非表示。数当カード。
終わる」
#------------------------------------------------------------
#メインルーチン
文字サイズは12。
塗り色は科白色。
吹出方向は「右上」
母艦位置設定。
ダイアログ詳細=「文字サイズ=12」

ナコ様の可視はオン。
数当表作成。
「心の中で1~60のの数字を思い浮かべて、
ボクには見えないようにメモって置いてね。{改行}
準備が出来たら、はじめるよ!」と喋る。
クリック待ちフラグ=オン。

科白=「では、これから六枚のカードを、お見せします。
の中に、あなたの思った数字があれば{カッコ}はい{カッコ閉じ}を、
なければ{カッコ}いいえ{カッコ閉じ}のボタンを押して下さい。」

*数当表作成
  数当表=。
  60
    数=回数。
    6
      もしAND(数,(2の(回数-1)乗))=0でなければ、数当表¥(回数-1)に数を一行追加。

*数当カード
  答=0
  6
    ダイアログタイトル=「数当てカード {回数}枚目」
    (回数-1)のカード表示。
    もしそれはいならば、答=答+(2の(回数-1)乗)
  「むむ、読めました!{~}あなたが心に描いた数字は…{~}  {答}  ですね?」と喋る。

*カード表示(Aの)
  カード=。
  数当表¥Aを配列数値ソート。
  30
    もしそれ¥(回数-1)<10ならば、数=「 {それ¥(回数-1)}」
    違えば、数=「{それ¥(回数-1)}」
    もし、(回数-1)%5=4ならば、カード=「{カード}{数}{改行}」
    違えば、カード=「{カード}{数} 」
  カードで二択。
#-----------------------------------------------------------
*喋る({文字列=「」}AでSと|Sを)
  科白種別はA。
  吹出方向で条件分岐
    「左上」ならば、
      吹出にSを「左上」へ200,100で吹出セリフ表示。
      吹出の位置=「{ナコ様のX-吹出の幅},{ナコ様のY-吹出の高さ+50}」
      吹出の可視はオン。
      吹出右にSを「右上」へ200,100で吹出セリフ表示。
    「右上」ならば、
      吹出右にSを「右上」へ200,100で吹出セリフ表示。
      吹出右の位置=「{ナコ様のX+ナコ様の幅-80},{ナコ様のY-吹出右の高さ+50}」
      吹出右の可視はオン。
      吹出にSを「左上」へ200,100で吹出セリフ表示。
  吹出表示状態=オン。

*科白非表示
  吹出の可視はオフ。吹出右の可視はオフ。吹出表示状態=オフ。
#------------------------------------------------------------
●吹出作成({グループ=?}FをW,Hで方向へ)
  xx=0。yy=0。ww=0。hh=0。
  方向で条件分岐
    右上ならば、  #矢印は左下
      Fのポケットは「右上」
      x1=0。y1=H。x2=W/8。y2=H/4*3。x3=W/4。y3=H/8*7。
    右下ならば、  #矢印は左上
      Fのポケットは「右下」
      x1=0。y1=0。x2=W/4。y2=H/8。x3=W/8。y3=H/4。
    左上ならば、  #矢印は右下(吹出し変形と同じ)
      Fのポケットは「左上」
      x1=W。y1=H。x2=W/4*3。y2=H/8*7。x3=W/8*7。y3=H/4*3。
    左下ならば、  #矢印は右上
      Fのポケットは「左下」
      x1=W。y1=0。x2=W/4*3。y2=H/8。x3=W/8*7。y3=H/4。
    上ならば、  #矢印は下向き
      hh=H/10。Fのポケットは「上」
      x1=W/2。y1=H+hh。x2=W/2-W/20。y2=H-H/100。x3=W/2+W/20。y3=H-H/100。
    下ならば、  #矢印は上向き
      hh=H/10。yy=hh。Fのポケットは「下」
      x1=W/2。y1=0。x2=W/2-W/20。y2=hh+H/100。x3=W/2+W/20。y3=hh+H/100。
    左ならば、  #矢印は右向き
      ww=W/10。Fのポケットは「左」
      x1=W+ww。y1=H/2。x2=W-W/100。y2=H/2-H/20。x3=W-W/100。y3=H/2+H/20。
    右ならば、  #矢印は左向き
      ww=W/10。xx=ww。Fのポケットは「右」
      x1=0。y1=H/2。x2=ww+W/100。y2=H/2-H/20。x3=ww+W/100。y3=H/2+H/20。
  Fの可視はオフ。
  FのクライアントWはW+ww。FのクライアントHはH+hh。
  Fを$00FF00で画面クリア。
  線スタイルは透明。
  Fのxx,yyからxx+W,yy+Hへ。1秒待つ。
  Fの「{x1},{y1},{x2},{y2},{x3},{y3}」へ多角形。
  F→画像通り変形。
//  Fの可視はオン。

●吹出セリフ表示({グループ=?}FにSを{整数=100}minW,{整数=50}minHで{文字列=「」}方向へ)
  Aとは文字列=「」。Bとは文字列=「」。
  Sで反復
    Bはそれ。
    もし(Aの文字数)<(Bの文字数)ならば、A=B。
  swとは整数=Aの文字幅取得shとは整数=(Sの文字高さ取得)*(Sの要素数)
  fwとは整数=(Aの文字幅取得)*1.5。fhとは整数=(Sの文字高さ取得)*(Sの要素数)*1.8
  もしfw<minWならばfw=minW。
  もし、fh<minHならば、fh=minH。
  sxとは整数fw/2-sw/2-10
  syとは整数=fh/2-sh/2
  もし、方向=ならば、方向=F→ポケット。
  もし、方向=ならば、方向=左上。
  もし、方向=右ならば、sx=sx+fw/10  #矢印の長さ分
  もし、方向=下ならば、sy=sy+fh/10
  Fをfw,fhで方向へ吹出作成。
  Fのsx,syへSを文字表示。
#------------------------------------------------------------

ゲスト



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