▶ 実 行
▶ 実行
クリア
テンテン神経衰弱
by 雪乃☆雫
!「貯蔵庫:playing_card.nako3」を取り込む #----- 設定 ---------- 定数 表=1。 定数 裏=-1。 倍率=0.4。 列数=6。 表示X=20/倍率。 表示Y=20/倍率。 #----- トランプを作成 ---------- 0から51までの配列連番作成して、トランプに代入。 裏カード=55の絵柄番号取得。 ●(Nの)使用カード判定: それは(N%13<9) # A~9まで 「使用カード判定」でトランプを配列フィルタして、トランプに代入。 トランプを配列シャッフル。 トランプを反復: トランプ[対象キー]は空辞書。 トランプ[対象キー]["ID"]=対象キー。 トランプ[対象キー]["X"]=対象キー%列数。 トランプ[対象キー]["Y"]=対象キー/列数を切り捨て。 トランプ[対象キー]["No"]=対象。 トランプ[対象キー]["絵柄"]=対象/13を切り捨て。 トランプ[対象キー]["番号"]=対象%13+1。 トランプ[対象キー]["角度"]=0。 トランプ[対象キー]["向"]=裏。 #----- 画面 ---------- 画面幅=カードW*列数+表示X*2。 画面高さ=カードH*列数+表示Y*2。 描画中キャンバス.幅属性=画面幅。 描画中キャンバス.高さ属性=画面高さ。 描画中キャンバスの「幅」に画面幅*倍率&「px」をDOMスタイル設定。 描画中キャンバスの「高さ」に画面高さ*倍率&「px」をDOMスタイル設定。 背景描画。 初期状態描画。 #--------------------------------------- ●背景描画 「#009900」に塗色設定。空に線色設定。 [0,0,画面幅,画面高さ]に四角描画。 ここまで。 # 裏カードを並べる ●初期状態描画 トランプの要素数回 X=(回数-1)%列数。 Y=(回数-1)/列数を切り捨て。 [X,Y]のカード表示位置に裏カード.絵柄の裏カード.番号をカード表示。 ここまで。 ここまで。 #--------------------------------------- ●(XYの)カード表示位置 x=表示X+XY[0]*カードW。 y=表示Y+XY[1]*カードH。 [x,y]を戻す。 ここまで。 ●(Noの)絵柄番号取得 絵柄=No/13を切り捨て。 番号=No%13+1。 {絵柄:絵柄,番号:番号}を戻す。 ここまで。 #--------------------------------------- 開始時間=空。 開いた札=空配列。 取った札数=0。 クリック待ち=オン。 アニメ中=0。 アニメID=空。 #----- イベント------------------------- 描画中キャンバスをクリックした時には もし、開始時間=空ならば、開始時間=システム時間。 # 無効なクリック もし、クリック待ち=オフならば、戻る。 mx=マウスX/倍率。my=マウスY/倍率。 もし、(mx<表示X)または(mx>画面幅-表示X)または(my<表示Y)または(my>画面高さ-表示Y)ならば、戻る。# カード以外の場所 もし、開いた札[1]≠未定義ならば、戻る。# 二枚目の札が開かれている状態 x=(mx-表示X)/カードWを整数変換。 y=(my-表示Y)/カードHを整数変換。 クリックした札=トランプ[y*列数+x]。 もし、クリックした札["No"]=-1ならば、戻る。# すでにカードが無い状態 もし、(開いた札[0]≠未定義)ならば、: もし、開いた札[0]["ID"]=クリックした札["ID"]ならば、戻る。# 一枚目が開かれている時に同じ場所 # 有効なクリック 開いた札へクリックした札を配列追加。 クリック待ち=オフ。 クリックした札.角度=6。 アニメ中を1増やす。 もし、アニメ中=1ならば、カード再描画。 # 判定 もし、開いた札[1]≠未定義ならば、# 二枚目 1秒待つ。 一枚目=開いた札[0]["番号"]。二枚目=開いた札[1]["番号"]。 アニメ中を2増やす。 もし、一枚目+二枚目=10ならば、 取った札数を2増やす。 開いた札を反復: トランプ[対象.ID]["No"]=-1。 トランプ[対象.ID]["サイズ"]=1。 もし、取った札数≧36ならば: 1秒後には: アニメIDの画面更新処理取消。 クリア。 違えば、 # 一致しない場合は二枚同時にひっくり返す 開いた札を反復: 対象.角度=6。 ここまで もし、アニメ中=2ならば、カード再描画。 0.5秒待つ。 開いた札=空配列。 ここまで。 クリック待ち=オン。 ここまで。 描画中キャンバスをタッチした時には、 対象イベントのDOMイベント処理停止。 ここまで。 ●クリア 文字色=白色。文字色に塗り色設定。 経過時間=「({システム時間-開始時間}秒)」。 メッセージ=[「クリアしました!」,経過時間] フォント=[「bold {36/倍率}px sans-serif」,「bold {24/倍率}px sans-serif」] メッセージY=[200/倍率,240/倍率] 2回: C=回数-1。 フォント[C]に描画フォント設定。 メッセージ幅=(メッセージ[C]の文字描画幅取得).width。 メッセージX=(画面幅-メッセージ幅)/2。 [メッセージX,メッセージY[C]]へメッセージ[C]を文字描画。 ここまで。 #----- アニメーション ------------------ ●カード再描画 背景描画。 トランプを反復 札=対象。 もし、札.角度≠0ならば: 札をカード反転描画。 もし、札.角度≧180ならば: 札.角度=0。札.向き=札.向き*-1。アニメ中を1減らす。 違えば: 札.角度=札.角度+6。 違えば: もし、札.向き=裏ならば、 [札.X,札.Y]のカード表示位置に裏カード.絵柄の裏カード.番号をカード表示。 違えば、 [札.X,札.Y]のカード表示位置に札.絵柄の札.番号をカード表示。 ここまで。 もし、札.No=-1ならば、 札.サイズ=札.サイズ-0.05。 もし、札.サイズ<0ならば: 札.サイズ=0。アニメ中を1減らす。 [札.X,札.Y]のカード表示位置。 [それ[0],それ[1],カードW,カードH]に四角描画。 札をカード縮小描画。 ここまで。 ここまで。 もし、アニメ中=0ならば、アニメIDの画面更新処理取消。 違えば、アニメID=「カード再描画」を画面更新時実行。 ここまで。 ●(札を)カード反転描画 もし、札.向き=裏ならば: 上面=裏カード。下面=札。 違えば: 上面=札。下面=裏カード。 xy=[札.X,札.Y]のカード表示位置。 cos=COS((札.角度をラジアン変換))の絶対値。 sin=SIN((札.角度をラジアン変換))*0.15。 キャンバス状態保存。 #--- [カードW/2,0]に描画起点設定。 [cos,sin,0,1,xy[0],xy[1]]だけ描画変換マトリクス追加。 [-1*カードW/2,0]に描画起点設定。 もし、札.角度≦90ならば、 [0,0]に上面.絵柄の上面.番号をカード表示。 違えば、 [0,0]に下面.絵柄の下面.番号をカード表示。 ここまで。 #--- キャンバス状態復元。 ここまで ●(札を)カード縮小描画 xy=[札.X,札.Y]のカード表示位置。 キャンバス状態保存。 #--- [カードW/2,カードH/2]に描画起点設定。 [札.サイズ,0,0,札.サイズ,xy[0],xy[1]]だけ描画変換マトリクス追加。 [-1*カードW/2,-1*カードH/2]に描画起点設定。 札.絵柄の札.番号を[0,0]にカード表示。 #--- キャンバス状態復元。 ここまで。
04d42349c4a539a97ad82e7ee439feed
3130