▶ 実 行
▶ 実行
クリア
ブラックジャック
by てぃふと@うぇいく
「全て」で実行速度優先 描画中キャンバス["width"]は600 描画中キャンバス["height"]は480 カード情報は{ 角半径:5, 幅:100, 高:140, 枠:16 } スート情報は[ {名前:"", 色:青色, 文字:""}, {名前:"スペード", 色:黒色, 文字:"♠"}, {名前:"クラブ", 色:黒色, 文字:"♣"}, {名前:"ダイヤ", 色:赤色, 文字:"♦"}, {名前:"ハート", 色:赤色, 文字:"♥"} {名前:"黒JK", 色:黒色, 文字:""}, {名前:"赤JK", 色:赤色, 文字:""}, ] ランク情報は[ {名前:"", NO:0, 反転: 14, マーク:[] }, {名前:"A", NO:1, 反転: 14, マーク:[[2,2.5]] }, {名前:"2", NO:2, 反転: 2, マーク:[[2,1],[2,4]] }, {名前:"3", NO:3, 反転: 3, マーク:[[2,1],[2,2.5],[2,4]] }, {名前:"4", NO:4, 反転: 3, マーク:[[1,1],[3,1],[1,4],[3,4]] }, {名前:"5", NO:5, 反転: 3, マーク:[[1,1],[3,1],[2,2.5],[1,4],[3,4]] }, {名前:"6", NO:6, 反転: 5, マーク:[[1,1],[3,1],[1,2.5],[3,2.4],[1,4],[3,4]] }, {名前:"7", NO:7, 反転: 6, マーク:[[1,1],[3,1],[1,2.5],[2,2],[3,2.5],[1,4],[3,4]] }, {名前:"8", NO:8, 反転: 5, マーク:[[1,1],[3,1],[1,2],[3,2],[1,3],[3,3],[1,4],[3,4]] }, {名前:"9", NO:9, 反転: 6, マーク:[[1,1],[3,1],[1,2],[3,2],[2,2.5],[1,3],[3,3],[1,4],[3,4]] }, {名前:"10", NO:10, 反転: 6, マーク:[[1,1],[1,2],[3,1],[3,2],[2,1.5],[2,3.5],[1,3],[1,4],[3,3],[3,4]] }, {名前:"J", NO:11, 画像:"" }, {名前:"Q", NO:12, 画像:"" }, {名前:"K", NO:13, 画像:"" }, {名前:"JK", NO:14, 反転: 14, マーク:[] }, ] TRUMPCV退避は空 ●全カード表示とは 画面横は描画中キャンバス["width"] 画面縦は描画中キャンバス["height"] [0, 0, 画面横, 画面縦]に描画クリア 4回、 スートは回数 13回、 ランクは回数 スートのランクを[(ランク-1)*カード情報["幅"],(スート-1)*カード情報["高"]]にカード表示 ここまで ここまで 0の0を[13*カード情報["幅"],0*カード情報["高"]]にカード表示 5の14を[13*カード情報["幅"],1*カード情報["高"]]にカード表示 6の14を[13*カード情報["幅"],2*カード情報["高"]]にカード表示 ここまで ●(スートのランクを位置に)カード表示とは Xは位置[0] Yは位置[1] Rはカード情報["角半径"] Wはカード情報["幅"] Hはカード情報["高"] PIは"Math.PI"をJS実行 CTXは描画中コンテキスト # カードの枠線を表示 黒色に線色設定 白色に塗り色設定 CTXの"beginPath"を[]でJSメソッド実行 CTXの"arc"を[X+R+0.5, Y+R+0.5, R, PI, 3*PI/2, 0]でJSメソッド実行 CTXの"arc"を[X+W-R-0.5, Y+R+0.5, R, 3*PI/2, 0, 0]でJSメソッド実行 CTXの"arc"を[X+W-R-0.5, Y+H-R-0.5, R, 0, PI/2, 0]でJSメソッド実行 CTXの"arc"を[X+R+0.5, Y+H-R-0.5, R, PI/2, PI, 0]でJSメソッド実行 CTXの"closePath"を[]でJSメソッド実行 CTXの"fill"を[]でJSメソッド実行 CTXの"stroke"を[]でJSメソッド実行 # 以降共通となる色の設定 スート情報[スート]["色"]に塗り色設定 スート情報[スート]["色"]に線色設定 # カード角のランクとスートを表示 描画中コンテキスト["textAlign"]は"center" 描画中コンテキスト["textBaseline"]は"middle" もし、((ランク情報[ランク]["名前"]の文字数)>0)||((スート情報[スート]["文字"]の文字数)>0)ならば、 キャンバス状態保存 CTXの"translate"を[X+カード情報["枠"]/2, Y+カード情報["枠"]+カード情報["枠"]*0.4]でJSメソッド実行 もし、(ランク情報[ランク]["名前"]の文字数)≦1ならば、 「{カード情報["枠"]*0.8}px sans-serif」に描画フォント設定 違えば、 「{カード情報["枠"]*0.6}px sans-serif」に描画フォント設定 CTXの"scale"を[1.0, 0.8/0.6]でJSメソッド実行 ここまで [0, 0]にランク情報[ランク]["名前"]を文字描画 キャンバス状態復元 「{カード情報["枠"]*0.8}px sans-serif」に描画フォント設定 [X+カード情報["枠"]/2, Y+カード情報["枠"]+カード情報["枠"]*1.2]にスート情報[スート]["文字"]を文字描画 キャンバス状態保存 CTXの"translate"を[X+カード情報["幅"]-カード情報["枠"]/2, Y+カード情報["高"]-カード情報["枠"]-カード情報["枠"]*0.4]でJSメソッド実行 CTXの"rotate"を[PI]でJSメソッド実行 もし、(ランク情報[ランク]["名前"]の文字数)≦1ならば、 「{カード情報["枠"]*0.8}px sans-serif」に描画フォント設定 違えば、 「{カード情報["枠"]*0.6}px sans-serif」に描画フォント設定 CTXの"scale"を[1.0, 0.8/0.6]でJSメソッド実行 ここまで [0, 0]にランク情報[ランク]["名前"]を文字描画 キャンバス状態復元 キャンバス状態保存 「{カード情報["枠"]*0.8}px sans-serif」に描画フォント設定 CTXの"translate"を[X+カード情報["幅"]-カード情報["枠"]/2, Y+カード情報["高"]-カード情報["枠"]-カード情報["枠"]*1.2]でJSメソッド実行 CTXの"rotate"を[PI]でJSメソッド実行 [0, 0]にスート情報[スート]["文字"]を文字描画 キャンバス状態復元 ここまで # カードの内枠の線を表示(確認用) もし、(ランク情報[ランク]["マーク"]の変数型確認)="undefined"ならば、 キャンバス状態保存 空に塗り色設定 [X+カード情報["枠"], Y+カード情報["枠"], カード情報["幅"]-カード情報["枠"]*2, カード情報["高"]-カード情報["枠"]*2]へ四角描画 キャンバス状態復元 ここまで # カード内容のマークを表示 もし、(ランク情報[ランク]["画像"]の変数型確認)≠"undefined"ならば、 # カード内容は画像のURLから画像を表示 もし、ランク=0ならば、 # 裏側だけなんか描く キャンバス状態保存 青色に線色設定 水色に塗り色設定 [X+カード情報["枠"], Y+カード情報["枠"], カード情報["幅"]-カード情報["枠"]*2, カード情報["高"]-カード情報["枠"]*2]へ四角描画 キャンバス状態復元 ここまで 違えば、 # カード内容はマークのリストからマークを表示 マークリストはランク情報[ランク]["マーク"] マーク数はマークリストの配列要素数 もし、マーク数>0ならば、 列幅は(カード情報["幅"]-カード情報["枠"]*2)/3 行高は(カード情報["高"]-カード情報["枠"]*2)/4 「{列幅}px sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"center" 描画中コンテキスト["textBaseline"]は"middle" (マーク数)回、 マークはマークリスト[回数-1] MXはマーク[0]*列幅-列幅/2 MYはマーク[1]*行高-行高/2 キャンバス状態保存 CTXの"translate"を[X+MX+カード情報["枠"], Y+MY+カード情報["枠"]]でJSメソッド実行 もし、回数≧ランク情報[ランク]["反転"]ならば、 CTXの"rotate"を[PI]でJSメソッド実行 ここまで [0, 0]にスート情報[スート]["文字"]を文字描画 キャンバス状態復元 ここまで ここまで ここまで ここまで ●トランプ画像生成とは TRUMPCVは"canvas"をDOM要素作成 TRUMPCV["width"]は14*カード情報["幅"] TRUMPCV["height"]は4*カード情報["高"] 画面CVは描画中キャンバス TRUMPCVへ描画開始 全カード表示 画面CVへ描画開始 TRUMPCVを戻す ここまで トランプ画像はトランプ画像生成 ●(位置に番号を)トランプ画像部分表示とは もし、番号が0ならば、 SXは13*カード情報["幅"] SYは0 違えばもし、番号=53||番号=54ならば、 SXは13*カード情報["幅"] SYは(番号-52)*カード情報["高"] 違えば、 スートは番号のスート取得 ランクは番号のランク取得 SXは(ランク-1)*カード情報["幅"] SYは(スート-1)*カード情報["高"] ここまで トランプ画像の[SX,SY,カード情報["幅"],カード情報["高"]]を[位置[0],位置[1],カード情報["幅"],カード情報["高"]]へ画像部分描画 ここまで 画面横は描画中キャンバス["width"] 画面縦は描画中キャンバス["height"] ディーラー手札域位置は[0-0.5,40-0.5] ディーラー手札位置は[ディーラー手札域位置[0]+20+0.5,ディーラー手札域位置[1]+0.5] ディーラー強位置は[ディーラー手札位置[0],ディーラー手札位置[1]+カード情報["高"]] ディーラー手札域サイズは[画面横-20+1, カード情報["高"]+1] プレーヤー手札域位置は[0-0.5,200-0.5] プレーヤー手札位置は[プレーヤー手札域位置[0]+20+0.5,プレーヤー手札域位置[1]+0.5] プレーヤー強位置は[プレーヤー手札位置[0],プレーヤー手札位置[1]+カード情報["高"]] プレーヤー手札域サイズは[画面横-20+1, カード情報["高"]+1] スプリット手札域位置は[ [0-0.5,200-0.5], [画面横÷2-0.5,200-0.5] ] スプリット手札位置は[ [スプリット手札域位置[0][0]+20+0.5, スプリット手札域位置[0][1]+0.5] [スプリット手札域位置[1][0]+20+0.5, スプリット手札域位置[1][1]+0.5] ] スプリット強位置は[ [スプリット手札位置[0][0],スプリット手札位置[0][1]+カード情報["高"]] [スプリット手札位置[1][0],スプリット手札位置[1][1]+カード情報["高"]] ] スプリット手札域サイズは[ [画面横÷2-20+1, カード情報["高"]+1] [画面横÷2-20+1, カード情報["高"]+1] ] # 操作ボタンを表示する際の基準領域。通常時とスプリット時 通常ボタン域は[プレーヤー手札位置[0]-0.5, プレーヤー手札位置[1]+カード情報["高"]+5-0.5, 画面横-20+1, 21+1] スプリットボタン域は[ [スプリット手札位置[0][0]-0.5, スプリット手札位置[0][1]+カード情報["高"]+5-0.5, 画面横/2-20+1, 21+1], [スプリット手札位置[1][0]-0.5, スプリット手札位置[1][1]+カード情報["高"]+5-0.5, 画面横/2-20+1, 21+1] ] # 通常ボタン域またはスプリットボタン域からの相対位置 ヒットサイズは[60,20] ヒット位置は[1, 1] ステイサイズは[60,20] ステイ位置は[ヒット位置[0]+ヒットサイズ[0]+5, ヒット位置[1]] ダブルダウンサイズは[100,20] ダブルダウン位置は[ステイ位置[0]+ステイサイズ[0]+8, ヒット位置[1]] スプリットサイズは[100,20] スプリット位置は[ダブルダウン位置[0]+ダブルダウンサイズ[0]+5, ヒット位置[1]] サレンダーサイズは[100,20] サレンダー位置は[スプリット位置[0]+スプリットサイズ[0]+5, ヒット位置[1]] 通常ベット表示位置は[プレーヤー手札位置[0]+0.5, 通常ボタン域[1]+通常ボタン域[3]+5+0.5] スプリットベット表示位置は[ [スプリット手札位置[0][0]+0.5, 通常ボタン域[1]+通常ボタン域[3]+5+0.5], [スプリット手札位置[1][0]+0.5, 通常ボタン域[1]+通常ボタン域[3]+5+0.5] ] ベット表示サイズは[100, 28] ベット矩形は[ [ 1, 1, 22, 20], [23, 1, 26, 20], [49, 1, 26, 20], [75, 1, 22, 20], [ 1,21, 48, 20], [49,21, 48, 20] ] ベットボタン域は[通常ベット表示位置[0]-0.5, 通常ベット表示位置[1]+ベット表示サイズ[1]+5.5, 98+1, 41+1] クリック待域は[0-0.5, 通常ボタン域[1]-0.5, 画面横+1, 25+1] クリック待位置は[画面横÷2, 通常ボタン域[1]+25/2] 勝敗表示域は[0-0.5, ベットボタン域[1]+15-0.5, 画面横+1, 30+0.5] 標準勝敗表示位置は[画面横÷2,勝敗表示域[1]+勝敗表示域[3]÷2] スプリット勝敗表示位置は[ [画面横÷4,標準勝敗表示位置[1]], [画面横÷4+画面横÷2,標準勝敗表示位置[1]] ] 持金は0 ディーラー持金は0 山札は[] ディーラー手札は[] プレーヤー手札は[] スプリット手札は[] ディーラーオープンはオフ 基本進行状態は空 進行状態は0 行動待は空 継続中はオフ マウスボタンハンドラは空 ダブルダウン可能はオフ スプリット可能はオフ サレンダー可能はオフ サレンダー宣言はオフ スプリットフェーズは0 スプリット中はオフ 掛金は0 前回掛金は1 掛金上限は10 ●マウスボタン処理とは EVTはWINDOW["event"] 要素位置はEVT["target"]の"getBoundingClientRect"を[]でJSメソッド実行 XはEVT["clientX"]-要素位置["left"] YはEVT["clientY"]-要素位置["top"] もし、マウスボタンハンドラが空でなければ、 マウスボタンハンドラ(X,Y) ここまで ここまで ●(XYで領域の位置とサイズに)ボタンヒットとは もし、(XY[0]≧領域[0]+位置[0])&&(XY[0]≦領域[0]+位置[0]+サイズ[0])ならば、 もし、(XY[1]≧領域[1]+位置[1])&&(XY[1]≦領域[1]+位置[1]+サイズ[1])ならば、 オンで戻る ここまで ここまで オフで戻る ここまで ●(XとYで)ベット中マウスボタン処理とは 位置は[X, Y] 領域はベットボタン域 (ベット矩形の配列要素数)回、 Iは回数-1 もし、(位置で領域の[ベット矩形[I][0], ベット矩形[I][1]]と[ベット矩形[I][2], ベット矩形[I][3]]にボタンヒット)ならば、 Iをベットクリック 抜ける ここまで ここまで ここまで ●(XとYで)ゲーム中マウスボタン処理とは 位置は[X, Y] もし、スプリット中ならば、 領域はスプリットボタン域[スプリットフェーズ-1] 違えば、 領域は通常ボタン域 ここまで もし、(位置で領域のヒット位置とヒットサイズにボタンヒット)ならば、 ヒットクリック ここまで もし、(位置で領域のステイ位置とステイサイズにボタンヒット)ならば、 ステイクリック ここまで もし、行動待=「初回行動」ならば、 もし、ダブルダウン可能ならば、 もし、(位置で領域のダブルダウン位置とダブルダウンサイズにボタンヒット)ならば、 ダブルダウンクリック ここまで ここまで もし、サレンダー可能ならば、 もし、(位置で領域のサレンダー位置とサレンダーサイズにボタンヒット)ならば、 サレンダークリック ここまで ここまで もし、スプリット可能ならば、 もし、(位置で領域のスプリット位置とスプリットサイズにボタンヒット)ならば、 スプリットクリック ここまで ここまで ここまで ここまで ●(XとYで)クリック待ボタン処理とは 画面クリック ここまで ●(領域の矩形にオプションで文字を)個別ボタン表示とは キャンバス状態保存 オプション["背景色"]に塗り色設定 オプション["枠色"]に線色設定 1に線太さ設定 [領域[0]+矩形[0], 領域[1]+矩形[1], 矩形[2], 矩形[3]]へ四角描画 オプション["文字色"]に塗り色設定 文字サイズは16 もし、(オプション["文字サイズ"]の変数型確認)≠"undefined"ならば、 文字サイズはオプション["文字サイズ"] ここまで 「」+文字サイズ+「px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"center" 描画中コンテキスト["textBaseline"]は"middle" [領域[0]+矩形[0]+矩形[2]/2, 領域[1]+矩形[1]+矩形[3]/2]に文字を文字描画 キャンバス状態復元 ここまで ●(領域に)操作ボタン表示部品とは 矩形は[ヒット位置[0], ヒット位置[1], ヒットサイズ[0], ヒットサイズ[1]] オプションは{背景色:水色 ,枠色:黒色, 文字色:黒色} 領域の矩形にオプションで「ヒット」を個別ボタン表示 矩形は[ステイ位置[0], ステイ位置[1], ステイサイズ[0], ステイサイズ[1]] オプションは{背景色:緑色 ,枠色:黒色, 文字色:黒色} 領域の矩形にオプションで「ステイ」を個別ボタン表示 もし、行動待=「初回行動」ならば、 もし、ダブルダウン可能ならば、 矩形は[ダブルダウン位置[0], ダブルダウン位置[1], ダブルダウンサイズ[0], ダブルダウンサイズ[1]] オプションは{背景色:緑色 ,枠色:黒色, 文字色:黒色} 領域の矩形にオプションで「ダブルダウン」を個別ボタン表示 ここまで もし、スプリット可能ならば、 矩形は[スプリット位置[0], スプリット位置[1], スプリットサイズ[0], スプリットサイズ[1]] オプションは{背景色:白色 ,枠色:黒色, 文字色:黒色} 領域の矩形にオプションで「スプリット」を個別ボタン表示 ここまで もし、サレンダー可能ならば、 矩形は[サレンダー位置[0], サレンダー位置[1], サレンダーサイズ[0], サレンダーサイズ[1]] オプションは{背景色:白色 ,枠色:黒色, 文字色:赤色} 領域の矩形にオプションで「サレンダー」を個別ボタン表示 ここまで ここまで ここまで ●操作ボタン表示とは もし、スプリット中ならば 領域はスプリットボタン域[スプリットフェーズ-1] 違えば、 領域は通常ボタン域 ここまで 領域に操作ボタン表示部品 ここまで ●操作ボタンクリアとは もし、スプリット中ならば 領域はスプリットボタン域[スプリットフェーズ-1] 違えば、 領域は通常ボタン域 ここまで [領域[0], 領域[1], 領域[2], 領域[3]]に描画クリア ここまで ●ベットボタン表示とは オプションは{ 背景色:白色 ,枠色:黒色, 文字色:赤色, 文字サイズ:12 } ベットボタン域のベット矩形[0]にオプションで「-10」を個別ボタン表示 ベットボタン域のベット矩形[1]にオプションで「-1」を個別ボタン表示 オプションは{ 背景色:白色 ,枠色:黒色, 文字色:黒色, 文字サイズ:12 } ベットボタン域のベット矩形[2]にオプションで「+1」を個別ボタン表示 ベットボタン域のベット矩形[3]にオプションで「+10」を個別ボタン表示 オプションは{ 背景色:白色 ,枠色:黒色, 文字色:青色, 文字サイズ:12 } ベットボタン域のベット矩形[4]にオプションで「MAX」を個別ボタン表示 ベットボタン域のベット矩形[5]にオプションで「START」を個別ボタン表示 ここまで ●ベットボタンクリアとは ベットボタン域に描画クリア ここまで ●ディーラー状態表示とは [0, 0, 画面横, 40]に描画クリア キャンバス状態保存 黒色に塗り色設定 「24px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"left" 描画中コンテキスト["textBaseline"]は"middle" 文字は「ディーラーズ・バンク:」+ディーラー持金+「」 [20, 40/2]に文字を文字描画 キャンバス状態復元 ここまで ●プレーヤー状態表示とは [0, 画面縦-30, 画面横, 30]に描画クリア キャンバス状態保存 黒色に塗り色設定 「24px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"left" 描画中コンテキスト["textBaseline"]は"middle" 文字は「プレーヤーズ・さいふ:」+持金+「」 [20, 画面縦-15]に文字を文字描画 キャンバス状態復元 ここまで ●ベット表示とは [0-0.5, 通常ベット表示位置[1]-0.5, 画面横+1, ベット表示サイズ[1]+1]に描画クリア もし、掛金=0ならば、 戻る ここまで キャンバス状態保存 黒色に塗り色設定 「24px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"center" 描画中コンテキスト["textBaseline"]は"middle" もし、スプリット中ならば 文字は「」+(掛金/2) [ スプリットベット表示位置[0][0]+ベット表示サイズ[0]/2, スプリットベット表示位置[0][1]+ベット表示サイズ[1]/2 ]に文字を文字描画 [ スプリットベット表示位置[1][0]+ベット表示サイズ[0]/2, スプリットベット表示位置[1][1]+ベット表示サイズ[1]/2 ]に文字を文字描画 違えば 文字は「」+掛金 [ 通常ベット表示位置[0]+ベット表示サイズ[0]/2, 通常ベット表示位置[1]+ベット表示サイズ[1]/2 ]に文字を文字描画 ここまで キャンバス状態復元 ここまで ●(位置にメッセージを)勝敗メッセージ表示部品とは キャンバス状態保存 黒色に塗り色設定 「22px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"center" 描画中コンテキスト["textBaseline"]は"middle" 位置にメッセージを文字描画 キャンバス状態復元 ここまで ●勝敗メッセージクリアとは 勝敗表示域に描画クリア ここまで ●クリック待ち表示とは キャンバス状態保存 黒色に塗り色設定 「22px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"center" 描画中コンテキスト["textBaseline"]は"middle" クリック待位置に「クリックして続ける」を文字描画 キャンバス状態復元 ここまで ●クリック待ちクリアとは クリック待域に描画クリア ここまで ●(領域情報に手札を)手札表示とは 領域位置は領域情報[0] 領域サイズは領域情報[1] カード位置は領域情報[2] 数値位置は領域情報[3] [領域位置[0], 領域位置[1], 領域サイズ[0], 領域サイズ[1]]に描画クリア 手札数は手札の配列要素数 カード域幅は領域サイズ[0]-(カード位置[0]-領域位置[0]) WXはカード情報["幅"]*1.1 もし、手札数>0&&手札数×WX>カード域幅ならば、 WXは((カード域幅-カード情報["幅"])÷(手札数-1))の整数部分 ここまで (手札数)回、 Iは回数-1 札は手札[I] Xはカード位置[0]+I*WX Yはカード位置[1] [X,Y]に札をトランプ画像部分表示 ここまで Pは手札の強さ キャンバス状態保存 黒色に塗り色設定 「10px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"right" 描画中コンテキスト["textBaseline"]は"bottom" [数値位置[0], 数値位置[1]]にPを文字描画 キャンバス状態復元 ここまで ●ディーラー手札表示とは 一時手札はディーラー手札を配列複製 もし、ディーラーオープンでなければ、 もし、(一時手札の配列要素数)>1ならば、 一時手札[1]は0 ここまで ここまで [ディーラー手札域位置, ディーラー手札域サイズ, ディーラー手札位置, ディーラー強位置]に一時手札を手札表示 ここまで ●プレーヤー手札表示とは もし、スプリット中ならば もし、スプリットフェーズ=1ならば、 [スプリット手札域位置[0], スプリット手札域サイズ[0], スプリット手札位置[0], スプリット強位置[0]]にプレーヤー手札を手札表示 違えば [スプリット手札域位置[1], スプリット手札域サイズ[1], スプリット手札位置[1], スプリット強位置[1]]にスプリット手札を手札表示 ここまで 違えば [プレーヤー手札域位置, プレーヤー手札域サイズ, プレーヤー手札位置, プレーヤー強位置]にプレーヤー手札を手札表示 ここまで ここまで ●(領域情報に手札を)手札評価表示とは メッセージは空 PXは0 もし、手札がバストならば、 メッセージは「BUST」 PXは64 違えばもし、手札がナチュラル21ならば、 メッセージは「ブラックジャック」 PXは36 ここまで もし、メッセージが空でなければ、 キャンバス状態保存 領域位置は領域情報[0] 領域サイズは領域情報[1] カード位置は領域情報[2] カード域幅は領域サイズ[0]-(カード位置[0]-領域位置[0]) 黒色に塗り色設定 「」+PX+「px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"center" 描画中コンテキスト["textBaseline"]は"middle" [カード位置[0]+カード域幅÷2, カード位置[1]+領域サイズ[1]÷2]にメッセージを文字描画 キャンバス状態復元 ここまで ここまで ●ディーラー手札評価表示とは [ディーラー手札域位置, ディーラー手札域サイズ, ディーラー手札位置]にディーラー手札を手札評価表示 ここまで ●プレーヤー手札評価表示とは もし、スプリット中ならば もし、スプリットフェーズ=1ならば、 [スプリット手札域位置[0], スプリット手札域サイズ[0], スプリット手札位置[0]]にプレーヤー手札を手札評価表示 違えば [スプリット手札域位置[1], スプリット手札域サイズ[1], スプリット手札位置[1]]にスプリット手札を手札評価表示 ここまで 違えば [プレーヤー手札域位置, プレーヤー手札域サイズ, プレーヤー手札位置]にプレーヤー手札を手札評価表示 ここまで ここまで ●全画面クリアとは [0, 0, 画面横, 画面縦]に描画クリア ここまで ●ヒットクリックとは もし、進行状態=0ならば、 基本進行状態は「プレーヤーヒット」 進行状態は1 進行する ここまで ここまで ●ステイクリックとは もし、進行状態=0ならば、 基本進行状態は「プレーヤーステイ」 進行状態は1 進行する ここまで ここまで ●ダブルダウンクリックとは もし、進行状態=0ならば、 もし、ダブルダウン可能ならば、 基本進行状態は「ダブルダウン」 進行状態は1 進行する ここまで ここまで ここまで ●スプリットクリックとは もし、進行状態=0ならば、 もし、スプリット可能ならば、 基本進行状態は「スプリット」 進行状態は1 進行する ここまで ここまで ここまで ●サレンダークリックとは もし、進行状態=0ならば、 もし、サレンダー可能ならば、 基本進行状態は「サレンダー」 進行状態は1 進行する ここまで ここまで ここまで ●(IDXを)ベットクリックとは IDXで条件分岐 0ならば 掛金は掛金-10 もし、掛金<1ならば、 掛金は1 ここまで ベット表示 ここまで 1ならば 掛金は掛金-1 もし、掛金<1ならば、 掛金は1 ここまで ベット表示 ここまで 2ならば 掛金は掛金+1 もし、掛金>掛金上限ならば、 掛金は掛金上限 ここまで もし、掛金>持金ならば、 掛金は持金 ここまで ベット表示 ここまで 3ならば 掛金は掛金+10 もし、掛金>掛金上限ならば、 掛金は掛金上限 ここまで もし、掛金>持金ならば、 掛金は持金 ここまで ベット表示 ここまで 4ならば 掛金は掛金上限 もし、掛金>持金ならば、 掛金は持金 ここまで ベット表示 ここまで 5ならば ベットボタンクリア 継続中はオン 基本進行状態は「ベット」 進行状態は0 行動待は空 マウスボタンハンドラは空 進行する ここまで ここまで ここまで ●画面クリックとは もし、進行状態=0ならば、 勝敗メッセージクリア クリック待ちクリア マウスボタンハンドラは空 行動待は空 もし、持金≦0||ディーラー持金≦0ならば、 終了処理 違えば、 継続中はオン 基本進行状態は「単ゲーム開始」 進行状態は0 進行する ここまで ここまで ここまで ●単ゲーム初期化とは ディーラーオープンはオフ ディーラー手札は[] プレーヤー手札は[] スプリット手札は[] ダブルダウン可能はオフ スプリット可能はオフ サレンダー可能はオフ サレンダー宣言はオフ スプリット中はオフ スプリットフェーズは0 掛金は前回掛金 もし、持金≧500&&掛金上限<100ならば、 掛金上限は100 違えばもし、持金≧2000&&掛金上限<500ならば、 掛金上限は500 違えばもし、持金≧5000&&掛金上限<1000ならば、 掛金上限は1000 違えばもし、持金≧20000&&掛金上限<5000ならば、 掛金上限は5000 違えばもし、持金≧50000&&掛金上限<10000ならば、 掛金上限は10000 ここまで ここまで ●開始処理とは 継続中はオン 基本進行状態は「準備」 進行状態は1 行動待は空 ディーラー持金は50000 持金は500 前回掛金は100 掛金上限は100 描画中キャンバスの「mousedown」に「マウスボタン処理」をDOMイベント追加 進行する ここまで ●終了処理とは 描画中キャンバスの「mousedown」から「マウスボタン処理」をDOMイベント削除 基本進行状態は空 進行状態は0 もし、持金≦0ならば、 メッセージは「さいふが空になってしまいました」 違えばもし、ディーラー持金≦0ならば、 メッセージは「ディーラーの金庫は空になりました」 違えば、 メッセージは「ひとまず止めることにしました」 ここまで キャンバス状態保存 黒色に塗り色設定 「36px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"center" 描画中コンテキスト["textBaseline"]は"middle" metricsは描画中コンテキストの"measureText"を[メッセージ]でJSメソッド実行 [(画面横-metrics["width"])÷2-5, 画面縦÷2-20, metrics["width"]+10, 40]に描画クリア [画面横÷2, 画面縦÷2]にメッセージを文字描画 キャンバス状態復元 ここまで ●準備進行とは 基本進行状態は「単ゲーム開始」 進行状態は0 ここまで ●単ゲーム開始進行とは 進行状態で条件分岐 1ならば、 山札準備する ここまで 2ならば 単ゲーム初期化 全画面クリア ディーラー状態表示 プレーヤー状態表示 継続中はオフ 行動待は「ベット」 掛金は前回掛金 もし、掛金>持金ならば、 掛金は持金 ここまで ベット表示 ベットボタン表示 基本進行状態は「ベット」 マウスボタンハンドラは「ベット中マウスボタン処理」のJSオブジェクト取得 # プレーヤー操作(ベット) ここまで ここまで ここまで ●ベット進行とは 進行状態で条件分岐 1ならば、 ベットボタンクリア 前回掛金は掛金 持金は持金-掛金 プレーヤー状態表示 ベット表示 行動待は空 継続中はオン 基本進行状態は「カード配布」 進行状態は0 マウスボタンハンドラは空 ここまで ここまで ここまで ●カード配布進行とは 進行状態で条件分岐 1ならば ドローをプレーヤー手札に配列追加 プレーヤー手札表示 ここまで 2ならば ドローをプレーヤー手札に配列追加 プレーヤー手札表示 ここまで 3ならば ドローをディーラー手札に配列追加 ディーラー手札表示 ここまで 4ならば ドローをディーラー手札に配列追加 ディーラー手札表示 もし、プレーヤー手札がナチュラル21ならば、 プレーヤー手札評価表示 ディーラーオープンはオン ディーラー手札表示 基本進行状態は「勝敗判定」 進行状態は0 違えばもし、ディーラー手札がナチュラル21ならば、 ディーラーオープンはオン ディーラー手札表示 基本進行状態は「勝敗判定」 進行状態は0 違えば、 継続中はオフ # プレーヤー操作(行動:初回) マウスボタンハンドラは「ゲーム中マウスボタン処理」のJSオブジェクト取得 行動待は「初回行動」 もし、掛金≦持金ならば、 ダブルダウン可能はオン もし、(プレーヤー手札がスプリット可能判定)ならば、 スプリット可能はオン ここまで ここまで もし、掛金≧2ならば、 サレンダー可能はオン ここまで 操作ボタン表示 ここまで ここまで ここまで ここまで ●プレーヤーヒット進行とは 進行状態で条件分岐 1ならば もし、行動待=「初回行動」ならば、 操作ボタンクリア 行動待は「通常行動」 操作ボタン表示 ここまで もし、スプリット中&&スプリットフェーズ=2ならば、 ドローをスプリット手札に配列追加 手札はスプリット手札 違えば、 ドローをプレーヤー手札に配列追加 手札はプレーヤー手札 ここまで プレーヤー手札表示 もし、手札がバストならば、 プレーヤー手札評価表示 もし、スプリット中ならば、 基本進行状態は「スプリット中」 進行状態は0 継続中はオン 違えば、 操作ボタンクリア 継続中はオン 行動待は空 マウスボタンハンドラは空 基本進行状態は「勝敗判定」 進行状態は0 ここまで ここまで ここまで ここまで ここまで ●プレーヤーステイ進行とは 進行状態で条件分岐 1ならば もし、スプリット中ならば、 基本進行状態は「スプリット中」 進行状態は0 継続中はオン 違えば、 操作ボタンクリア 継続中はオン 基本進行状態は「ディーラープレイ」 進行状態は0 行動待は空 マウスボタンハンドラは空 ここまで ここまで ここまで ここまで ●ダブルダウン進行とは 進行状態で条件分岐 1ならば 操作ボタンクリア 行動待は空 マウスボタンハンドラは空 継続中はオン 持金は持金-掛金 プレーヤー状態表示 掛金は掛金+掛金 ベット表示 ここまで 2ならば ドローをプレーヤー手札に配列追加 プレーヤー手札表示 もし、プレーヤー手札がバストならば、 プレーヤー手札評価表示 基本進行状態は「勝敗判定」 違えば、 基本進行状態は「ディーラープレイ」 ここまで 進行状態は0 ここまで ここまで ここまで ●スプリット進行とは 進行状態で条件分岐 1ならば 操作ボタンクリア 行動待は空 スプリットフェーズは1 スプリット中はオン 継続中はオン スプリット手札は[] (プレーヤー手札から配列ポップ)をスプリット手札に配列追加 持金は持金-掛金 プレーヤー状態表示 掛金は掛金+掛金 ベット表示 プレーヤー手札表示 スプリットフェーズは2 プレーヤー手札表示 ここまで 2ならば スプリットフェーズは1 ドローをプレーヤー手札に配列追加 プレーヤー手札表示 ここまで 3ならば スプリットフェーズは2 ドローをスプリット手札に配列追加 プレーヤー手札表示 ここまで 4ならば 要Aはオン 要Bはオン もし、プレーヤー手札がナチュラル21ならば、 スプリットフェーズは1 プレーヤー手札評価表示 要Aはオフ ここまで もし、スプリット手札がナチュラル21ならば、 スプリットフェーズは2 プレーヤー手札評価表示 要Bはオフ ここまで もし、(プレーヤー手札[0]の強さ取得)=1&&(スプリット手札[0]の強さ取得)=1ならば もし、要A||要Bならば、 基本進行状態は「ディーラープレイ」 違えば、 基本進行状態は「勝敗判定」 ここまで 進行状態は0 マウスボタンハンドラは空 違えば もし、要Aならば、 継続中はオフ 行動待は「通常行動」 スプリットフェーズは1 操作ボタン表示 違えばもし、要Bならば、 継続中はオフ 行動待は「通常行動」 スプリットフェーズは2 操作ボタン表示 違えば、 基本進行状態は「勝敗判定」 進行状態は0 マウスボタンハンドラは空 ここまで ここまで ここまで ここまで ここまで ●スプリット中進行とは 進行状態で条件分岐 1ならば 要Aはオン 要Bはオン もし、プレーヤー手札がナチュラル21ならば、 要Aはオフ ここまで もし、プレーヤー手札がバストならば、 要Aはオフ ここまで もし、スプリット手札がナチュラル21ならば、 要Bはオフ ここまで もし、スプリット手札がバストならば、 要Aはオフ ここまで もし、スプリットフェーズが1ならば、 もし、要Bならば、 継続中はオフ 操作ボタンクリア 行動待は「通常行動」 進行状態は0 スプリットフェーズは2 操作ボタン表示 違えば、 操作ボタンクリア 継続中はオン 行動待は空 進行状態は0 マウスボタンハンドラは空 もし、要Aならば、 基本進行状態は「ディーラープレイ」 違えば、 基本進行状態は「勝敗判定」 ここまで ここまで 違えば、 操作ボタンクリア 継続中はオン 行動待は空 進行状態は0 マウスボタンハンドラは空 もし、要A||要Bならば、 基本進行状態は「ディーラープレイ」 違えば、 基本進行状態は「勝敗判定」 ここまで ここまで ここまで ここまで ここまで ●サレンダー進行とは 進行状態で条件分岐 1ならば 操作ボタンクリア 行動待は空 マウスボタンハンドラは空 継続中はオン サレンダー宣言はオン 基本進行状態は「勝敗判定」 進行状態は0 ここまで ここまで ここまで ●ディーラープレイ進行とは 進行状態で条件分岐 1ならば ディーラーオープンはオン ディーラー手札表示 ここまで 2ならば もし、(ディーラー手札の強さ)<17ならば、 ドローをディーラー手札に配列追加 ディーラー手札表示 進行状態は2-1 違えば、 基本進行状態は「勝敗判定」 進行状態は0 ここまで ここまで ここまで ここまで ●勝敗判定進行とは 進行状態で条件分岐 1ならば、 ディーラー手札評価表示 勝負 継続中はオフ ベット表示 プレーヤー状態表示 ディーラー状態表示 クリック待ち表示 # プレーヤー操作(クリック待ち) マウスボタンハンドラは「クリック待ボタン処理」のJSオブジェクト取得 行動待は「クリック待ち」 ここまで ここまで ここまで ●進行とは 基本進行状態で条件分岐 「準備」ならば、 準備進行 ここまで 「単ゲーム開始」ならば、 単ゲーム開始進行 ここまで 「ベット」ならば、 ベット進行 ここまで 「カード配布」ならば、 カード配布進行 ここまで 「プレーヤーヒット」ならば、 プレーヤーヒット進行 ここまで 「プレーヤーステイ」ならば、 プレーヤーステイ進行 ここまで 「ダブルダウン」ならば、 ダブルダウン進行 ここまで 「サレンダー」ならば、 サレンダー進行 ここまで 「スプリット」ならば、 スプリット進行 ここまで 「スプリット中」ならば、 スプリット中進行 ここまで 「ディーラープレイ」ならば、 ディーラープレイ進行 ここまで 「勝敗判定」ならば、 勝敗判定進行 ここまで ここまで もし、継続中ならば、 進行状態は進行状態+1 0.5秒後には 進行する ここまで 違えば、 進行状態は0 ここまで ここまで ●勝負とは 勝敗メッセージクリア もし、スプリット中ならば、 残掛金は(掛金÷2)の整数部分 掛金は掛金-残掛金 結果はプレーヤー手札とディーラー手札で判定 表示文字は結果の勝敗メッセージ スプリット勝敗表示位置[0]に表示文字を勝敗メッセージ表示部品 率は結果の還元率 額は((掛金×率)の整数部分) 持金は持金+額 ディーラー持金はディーラー持金+掛金-額 結果はスプリット手札とディーラー手札で判定 表示文字は結果の勝敗メッセージ スプリット勝敗表示位置[1]に表示文字を勝敗メッセージ表示部品 率は結果の還元率 額は((残掛金×率)の整数部分) 持金は持金+額 ディーラー持金はディーラー持金+残掛金-額 掛金は0 違えば、 結果はプレーヤー手札とディーラー手札で判定 表示文字は結果の勝敗メッセージ 標準勝敗表示位置に表示文字を勝敗メッセージ表示部品 率は結果の還元率 額は((掛金×率)の整数部分) 持金は持金+額 ディーラー持金はディーラー持金+掛金-額 掛金は0 ここまで ここまで ●山札準備とは 山札は[] 52回、 山札に回数を配列追加 ここまで 山札を配列シャッフル ここまで ●ドローとは 山札から配列ポップで戻る ここまで ●(結果の)還元率とは 率は0 結果で条件分岐 「勝ち」ならば 率は2.0 ここまで 「負け」ならば 率は0.0 ここまで 「投了負け」ならば 率は0.5 ここまで 「引き分け」ならば 率は1.0 ここまで 「BJ負け」ならば 率は0.0 ここまで 「BJ勝ち」ならば 率は2.5 ここまで 「BJ引き分け」ならば 率は1.0 ここまで 違えば 率は1.0 ここまで ここまで 率で戻る ここまで ●(結果の)勝敗メッセージとは 表示文字は空 結果で条件分岐 「勝ち」ならば 表示文字は「あなたの勝ちです」 ここまで 「負け」ならば 表示文字は「あなたの負けです」 ここまで 「投了負け」ならば 表示文字は「負け。勝負を降りました」 ここまで 「引き分け」ならば 表示文字は「引き分けです」 ここまで 「BJ負け」ならば 表示文字は「BJに負けました」 ここまで 「BJ勝ち」ならば 表示文字は「BJで勝ちました」 ここまで 「BJ引き分け」ならば 表示文字は「双方がBJで引き分けです」 ここまで 違えば 表示文字は結果 ここまで ここまで 表示文字で戻る ここまで ●(プレーヤー手札とディーラー手札で)判定とは 勝敗は空 もし、プレーヤー手札がナチュラル21ならば、 もし、ディーラー手札がナチュラル21ならば、 勝敗は「BJ引き分け」 違えば、 勝敗は「BJ勝ち」 ここまで 違えばもし、ディーラー手札がナチュラル21ならば、 勝敗は「BJ負け」 違えばもし、サレンダー宣言ならば、 勝敗は「投了負け」 違えばもし、プレーヤー手札がバストならば、 勝敗は「負け」 違えばもし、ディーラー手札がバストならば、 勝敗は「勝ち」 違えば、 自分はプレーヤー手札の強さ 相手はディーラー手札の強さ もし、自分=相手ならば、 勝敗は「引き分け」 違えばもし、自分>相手ならば、 勝敗は「勝ち」 違えば、 勝敗は「負け」 ここまで ここまで 勝敗で戻る ここまで ●(札の)ランク取得とは (((札-1)を13で割った余り)+1)で戻る ここまで ●(札の)スート取得とは ((((札-1)÷13)の整数部分)+1)で戻る ここまで ●(札の)強さ取得とは ランクは札のランク取得 数はランク もし、ランク>10ならば、 数は10 ここまで 数で戻る ここまで ●(手札の)強さとは 手札数は手札の配列要素数 Aは0 合計数は0 (手札数)回、 札は手札[回数-1] 数は札の強さ取得 もし、数=1ならば、 AはA+1 ここまで 合計数は合計数+数 ここまで (合計数≦11&&A>0)の間、 AはA-1 合計数は合計数+10 ここまで 合計数で戻る ここまで ●(手札が)バストとは ((手札の強さ)>21)で戻る ここまで ●(手札が)ナチュラル21とは 手札数は手札の配列要素数 もし、手札数≠2ならば、 オフで戻る ここまで Aはオフ Jはオフ (手札数)回、 札は手札[回数-1] 数は札の強さ取得 もし、数=1ならば、 Aはオン 違えばもし、数=10ならば、 Jはオン ここまで ここまで (A&&J)で戻る ここまで ●(手札が)スプリット可能判定とは 手札数は手札の配列要素数 もし、手札数≠2ならば、 オフで戻る ここまで 数Aは手札[0]の強さ取得 数Bは手札[1]の強さ取得 (数A=数B)で戻る ここまで 開始処理する ここまで