▶ 実 行
▶ 実行
クリア
ビデオ・ポーカー(のようなもの)
by てぃふと@うぇいく
描画中キャンバス["width"]=700 描画中キャンバス["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]にスート情報[スート]["文字"]を文字描画 キャンバス状態復元 ここまで # カードの内枠の線を表示(確認用) もし、ランク情報[ランク]["マーク"]=NULLならば、 キャンバス状態保存 空に塗り色設定 [X+カード情報["枠"], Y+カード情報["枠"], カード情報["幅"]-カード情報["枠"]*2, カード情報["高"]-カード情報["枠"]*2]へ四角描画 キャンバス状態復元 ここまで # カード内容のマークを表示 もし、ランク情報[ランク]["画像"]≠NULLならば、 # カード内容は画像の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]にスート情報[スート]["文字"]を文字描画 キャンバス状態復元 ここまで ここまで ここまで ここまで ●(cvへ)描画切替とは sysは引数[1] 前描画情報は{ cv: 描画中キャンバス, ctx: 描画中コンテキスト } もし、cv["cv"]&&cv["ctx"]ならば、 『(function (sys, cv) { sys.__canvas = sys.__v0['描画中キャンバス'] = cv.cv; sys.__ctx = sys.__v0['描画中コンテキスト'] = cv.ctx; })』を[sys, cv]でJS関数実行 違えば cvへ描画開始 ここまで 前描画情報で戻る ここまで ●トランプ画像生成とは 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,5-0.5,画面横+1, カード情報["高"]+25+1] 手札位置=[手札域[0]+0.5,手札域[1]+25+0.5] 手札役位置=[画面横÷2,手札位置[1]-3] ホールド表示域=[手札域[0], 手札域[1]+手札域[3]+5-0.5, 手札域[2], 30+1] ホールド位置=[ホールド表示域[0]+0.5,ホールド表示域[1]+0.5] ホールドサイズ=[60,25] ボタン域=[手札域[0], ホールド表示域[1]+ホールド表示域[3]-0.5, 画面横+1, 45+1] チェンジサイズ=[160,40] チェンジ位置=[ボタン域[2]/2-チェンジサイズ[0]/2,2] 配当表域=[(画面横-520)/2-0.5,ボタン域[1]+ボタン域[3]+2-0.5,520,12*14] 配当表幅=[120,40,40,40,40,40,40,40,40,40,40] ベットボタン情報=[ ["クリア" ,[ 10, 1],[ 120, 30]], ["ベット+1" ,[ 150, 1],[ 120, 30]], ["開始" ,[ 290, 1],[ 120, 30]], ["最大ベットで開始",[ボタン域[2]-20-200, 1],[ 200, 30]] ] クリック待域=[0-0.5, ボタン域[1]-0.5, 画面横+1, 45+1] クリック待位置=[画面横÷2, ボタン域[1]+45/2] # 位置はleft,middleを起点 掛金表示域=[((画面横/2)の整数部分)*0-0.5,画面縦-24-0.5,((画面横/2)の整数部分)+1,24+1] 掛金表示位置=[20+0.5,12+0.5] # 位置はright,middleを起点 持金表示域=[((画面横/2)の整数部分)*1-0.5,画面縦-24-0.5,((画面横/2)の整数部分)+1,24+1] 持金表示位置=[持金表示域[2]-20+0.5,12+0.5] # 位置はcenter,middleを起点 勝敗表示域=[0-0.5,持金表示域[1]-24,画面横+1,24+1] 勝敗表示位置=[勝敗表示域[2]/2+0.5,12+0.5] 配当表=[ ["役無し" , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ["1ペア" , 0, 0, 0, 0, 0, 1, 1, 2, 2, 3], ["1ペア(ハイ)" , 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], ["2ペア" , 2, 4, 6, 8, 10, 12, 14, 16, 18, 20], ["3カード" , 3, 6, 9, 12, 15, 18, 21, 24, 27, 30], ["ストレート" , 4, 8, 12, 16, 20, 24, 28, 32, 36, 40], ["フラッシュ" , 6, 12, 18, 24, 30, 36, 42, 48, 54, 60], ["フルハウス" , 9, 18, 27, 36, 45, 54, 63, 72, 81, 90], ["4カード" , 25, 50, 75,100,125,150,175,200,225,250], ["ストレートフラッシュ", 50,100,150,200,250,300,350,400,450,500], ["ロイヤルフラッシュ" ,250,500,750,1000,1250,1500,1750,2000,2250,5000] ] 持金=0 山札=空配列 プレーヤー手札=空配列 手札ホールド=空配列 基本進行状態=空 進行状態=0 行動待=空 継続中=オフ マウスボタンハンドラ=空 掛金=-1 前回掛金=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] 領域=ボタン域 ベットボタン情報を反復する。 現ボタン=それ もし、(位置で領域の現ボタン[1]と現ボタン[2]にボタンヒット)ならば、 現ボタン[0]をベットクリック 抜ける ここまで ここまで ここまで ●(XとYで)ゲーム中マウスボタン処理とは 位置=[X, Y] 領域=ボタン域 もし、(位置で領域のチェンジ位置とチェンジサイズにボタンヒット)ならば、 チェンジクリック ここまで 領域=手札域 カード域幅=領域[2]-(手札位置[0]-領域[0]) WX=((カード域幅-カード情報["幅"])÷5)の整数部分 WD=(WX/2)の整数部分 カードサイズ=[カード情報["幅"],カード情報["高"]] 5回繰り返す。 I=回数-1 X=I*WX+WD カード位置=[X,0] もし、(位置で領域のカード位置とカードサイズにボタンヒット)ならば、 Iをカードクリック ここまで ここまで ここまで ●(XとYで)クリック待ボタン処理とは 画面クリック ここまで ●全画面クリアとは [0, 0, 画面横, 画面縦]に描画クリア ここまで ●(ボタン名を)ベットクリックとは ボタン名で条件分岐 「クリア」ならば 掛金=0 ベット表示 ここまで 「ベット+1」ならば 掛金=掛金+1 もし、掛金>掛金上限ならば、 掛金=掛金上限 ここまで もし、掛金>持金ならば、 掛金=持金 ここまで ベット表示 ここまで 「開始」ならば もし、掛金≦0ならば、抜ける。 ベットボタンクリア 継続中=オン 基本進行状態=「ベット」 進行状態=0 行動待=空 マウスボタンハンドラ=空 進行する ここまで 「最大ベットで開始」ならば 掛金=掛金上限 もし、掛金>持金ならば、 掛金=持金 ここまで もし、掛金≦0ならば、抜ける。 ベット表示 ベットボタンクリア 継続中はオン 基本進行状態=「ベット」 進行状態=0 行動待=空 マウスボタンハンドラ=空 進行する ここまで ここまで ここまで ●(IDXを)カードクリックとは 手札ホールド[IDX]=1-手札ホールド[IDX] 手札ホールドクリア 手札ホールド表示 ここまで ●チェンジクリックとは 操作ボタンクリア 継続中=オン 基本進行状態=「手札チェンジ」 進行状態=0 行動待=空 マウスボタンハンドラ=空 進行する ここまで ●(領域の矩形にオプションで文字を)個別ボタン表示とは キャンバス状態保存 オプション["背景色"]に塗り色設定 オプション["枠色"]に線色設定 1に線太さ設定 [領域[0]+矩形[0], 領域[1]+矩形[1], 矩形[2], 矩形[3]]へ四角描画 オプション["文字色"]に塗り色設定 文字サイズ=16 もし、オプション["文字サイズ"]≠NULLならば、 文字サイズ=オプション["文字サイズ"] ここまで 「{文字サイズ}px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"center" 描画中コンテキスト["textBaseline"]は"middle" [領域[0]+矩形[0]+矩形[2]/2, 領域[1]+矩形[1]+矩形[3]/2]に文字を文字描画 キャンバス状態復元 ここまで ●(領域に)操作ボタン表示部品とは 矩形=[チェンジ位置[0], チェンジ位置[1], チェンジサイズ[0], チェンジサイズ[1]] オプション={背景色:緑色 ,枠色:黒色, 文字色:黒色, 文字サイズ:28} 領域の矩形にオプションで「チェンジ」を個別ボタン表示 ここまで ●操作ボタン表示とは ボタン域に操作ボタン表示部品 ここまで ●操作ボタンクリアとは ボタン域に描画クリア ここまで ●ベットボタン表示とは 領域はボタン域 ベットボタン情報を反復する。 現ボタン=それ オプション={ 背景色:白色 ,枠色:黒色, 文字色:黒色, 文字サイズ:24 } 矩形=[現ボタン[1][0],現ボタン[1][1],現ボタン[2][0],現ボタン[2][1]] ボタン域の矩形にオプションで現ボタン[0]を個別ボタン表示 ここまで。 ここまで ●ベットボタンクリアとは ボタン域に描画クリア ここまで ●持金表示とは 持金表示域に描画クリア キャンバス状態保存 黒色に塗り色設定 「20px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]="right" 描画中コンテキスト["textBaseline"]="middle" 文字=「さいふ:{持金}」 [持金表示域[0]+持金表示位置[0],持金表示域[1]+持金表示位置[1]]に文字を文字描画 キャンバス状態復元 ここまで ●ベット表示とは 掛金表示域に描画クリア 配当表表示する。 もし、掛金<0ならば、 戻る ここまで キャンバス状態保存 黒色に塗り色設定 「20px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"left" 描画中コンテキスト["textBaseline"]は"middle" 文字=「掛金:{掛金}」 [掛金表示域[0]+掛金表示位置[0],掛金表示域[1]+掛金表示位置[1]]に文字を文字描画 キャンバス状態復元 ここまで ●(メッセージを)勝敗メッセージ表示とは キャンバス状態保存 黒色に塗り色設定 「20px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"center" 描画中コンテキスト["textBaseline"]は"middle" [勝敗表示域[0]+勝敗表示位置[0],勝敗表示域[1]+勝敗表示位置[1]]にメッセージを文字描画 キャンバス状態復元 ここまで ●勝敗メッセージクリアとは 勝敗表示域に描画クリア ここまで ●クリック待ち表示とは キャンバス状態保存 黒色に塗り色設定 「28px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"center" 描画中コンテキスト["textBaseline"]は"middle" クリック待位置に「クリックして続ける」を文字描画 キャンバス状態復元 ここまで ●クリック待ちクリアとは クリック待域に描画クリア ここまで ●プレーヤー手札表示とは 領域=手札域 カード位置=手札位置 領域に描画クリア 手札数=プレーヤー手札の配列要素数 表示数=0 カード域幅=領域[2]-(カード位置[0]-領域[0]) WX=((カード域幅-カード情報["幅"])÷5)の整数部分 WD=(WX/2)の整数部分 (手札数)回、 I=回数-1 札=プレーヤー手札[I] もし、札≠NULLならば、 X=カード位置[0]+I*WX+WD Y=カード位置[1] [X,Y]に札をトランプ画像部分表示 もし、札>0ならば、 表示数=表示数+1 ここまで。 ここまで。 ここまで。 もし、表示数が5ならば、 P=プレーヤー手札の役判定 キャンバス状態保存 黒色に塗り色設定 「20px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]="center" 描画中コンテキスト["textBaseline"]="bottom" 手札役位置にPを文字描画 キャンバス状態復元 配当表表示 ここまで。 ここまで ●手札ホールド表示とは 領域=ホールド表示域 カード域幅=領域[2]-(ホールド位置[0]-領域[0]) WX=((カード域幅-カード情報["幅"])÷5)の整数部分 WD=(WX/2)の整数部分 キャンバス状態保存 「20px bold sans-serif」に描画フォント設定 描画中コンテキスト["textAlign"]は"middle" 描画中コンテキスト["textBaseline"]は"top" 5回繰り返す I=回数-1 P=空 手札ホールド[I]で条件分岐する 0ならば、 P=「チェンジ」 赤色に塗り色設定 ここまで。 1ならば、 P=「ホールド」 黒色に塗り色設定 ここまで。 ここまで。 もし、Pが空でなければ、 X=ホールド位置[0]+I*WX+WD Y=ホールド位置[1] [X, Y]にPを文字描画 ここまで。 ここまで キャンバス状態復元 ここまで ●手札ホールドクリアとは ホールド表示域に描画クリア ここまで ●配当表表示とは H=14 手札数=プレーヤー手札の配列要素数 表示数=0 プレーヤー手札を反復する。 札=それ もし、札≠NULLならば、 もし、札>0ならば、 表示数=表示数+1 ここまで。 ここまで。 ここまで。 役=空 もし、表示数=5ならば、 役=プレーヤー手札の役判定 ここまで。 キャンバス状態保存 「{H*0.8}px normal sans-serif」に描画フォント設定 描画中コンテキスト["textBaseline"]は"base" Y=配当表域[1] J=0 配当表を反復する。 行=それ。 役マーク=オフ もし、行[0]が役ならば、 役マーク=オン ここまで。 X=配当表域[0] I=0 行を反復する。 項目=それ 掛金マーク=オフ もし、I>0かつ掛金>0かつI=掛金ならば、 掛金マーク=オン ここまで。 もし、Iが0ならば、 描画中コンテキスト["textAlign"]は"left" XX=X+2 違えば、 描画中コンテキスト["textAlign"]は"right" XX=X+配当表幅[I]-2 ここまで。 YY=Y+H*0.8 キャンバス状態保存 0.1に線太さ設定 黒色に線色設定 もし、役マーク&&掛金マークならば、 "#88ff88"に塗り色設定 違えばもし、役マークならば、 水色に塗り色設定 違えばもし、掛金マークならば、 "#ccffcc"に塗り色設定 違えば、 アリスブルー色に塗り色設定 ここまで。 [X,Y,配当表幅[I],H]へ四角描画 キャンバス状態復元 空に線色設定 黒色に塗り色設定 [XX,YY]に項目を文字描画 X=X+配当表幅[I] I=I+1 ここまで。 Y=Y+H J=J+1 ここまで。 キャンバス状態復元 ここまで ●画面クリックとは もし、進行状態=0ならば、 勝敗メッセージクリア クリック待ちクリア マウスボタンハンドラは空 行動待は空 もし、持金≦0ならば、 終了処理 違えば、 継続中はオン 基本進行状態は「単ゲーム開始」 進行状態は0 進行する ここまで ここまで ここまで ●単ゲーム初期化とは プレーヤー手札=空配列 手札ホールド=[0,0,0,0,0] 掛金=前回掛金 ここまで ●開始処理とは 継続中=オン 基本進行状態=「準備」 進行状態=1 行動待=空 持金=200 前回掛金=10 掛金上限=10 描画中キャンバスの「mousedown」に「マウスボタン処理」をDOMイベント追加 進行する ここまで ●終了処理とは 描画中キャンバスの「mousedown」から「マウスボタン処理」をDOMイベント削除 基本進行状態=空 進行状態=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 マウスボタンハンドラ=空 ここまで ここまで ここまで ●カード配布進行とは もし、進行状態≦5ならば、 ドローをプレーヤー手札に配列追加 プレーヤー手札表示 違えば、 継続中はオフ # プレーヤー操作(行動:ホールドするカード選択) マウスボタンハンドラは「ゲーム中マウスボタン処理」のJSオブジェクト取得 行動待は「ホールド選択」 操作ボタン表示 手札ホールド表示 ここまで ここまで ●手札チェンジ進行とは もし、進行状態=1ならば、 5回繰り返す。 I=回数-1 もし、手札ホールド[I]が0ならば、 プレーヤー手札[I]=0 ここまで。 ここまで。 プレーヤー手札表示 違えばもし、進行状態>0ならば、 I=-1 5回繰り返す。 もし、プレーヤー手札[回数-1]が0ならば、 I=回数-1 抜ける。 ここまで。 ここまで。 もし、I≧0ならば、 プレーヤー手札[I]=ドロー プレーヤー手札表示 違えば、 基本進行状態=「役判定」 進行状態=0 ここまで。 ここまで。 ここまで ●役判定進行とは もし、進行状態=1ならば、 役=プレーヤー手札の役判定 払出=-1 配当表を反復する。 行=それ もし、行[0]が役ならば、 払出=行[掛金] 抜ける。 ここまで。 ここまで。 もし、払出>0ならば、 「{役}で{払出}を獲得」を勝敗メッセージ表示 持金=持金+払出 違えばもし、払出=0ならば、 「残念、{役}でした。」を勝敗メッセージ表示 違えば、 「不明な役:{役}」を勝敗メッセージ表示 ここまで。 継続中はオフ ベット表示 持金表示 クリック待ち表示 # プレーヤー操作(クリック待ち) マウスボタンハンドラは「クリック待ボタン処理」のJSオブジェクト取得 行動待は「クリック待ち」 ここまで。 ここまで ●進行とは 基本進行状態で条件分岐 「準備」ならば、 準備進行 ここまで 「単ゲーム開始」ならば、 単ゲーム開始進行 ここまで 「ベット」ならば、 ベット進行 ここまで 「カード配布」ならば、 カード配布進行 ここまで 「手札チェンジ」ならば、 手札チェンジ進行 ここまで 「役判定」ならば、 役判定進行 ここまで 違えば、 基本進行状態を表示。 ここまで ここまで もし、継続中ならば、 進行状態は進行状態+1 0.5秒後には 進行する ここまで 違えば、 進行状態は0 ここまで ここまで ●山札準備とは 山札=[] 52回、 山札に回数を配列追加 ここまで 山札を配列シャッフル ここまで ●ドローとは 山札から配列ポップで戻る ここまで ●(手札の)役判定 # ワーク変数の初期化 値数=空配列。スート数=空配列。同値数=空配列。 直列=オフ。ブロードウエイ=オフ。 役=空 # 手札をサマリする。 13回繰り返す。 値数[回数-1]=0 ここまで。 4回繰り返す。 スート数[回数-1]=0 ここまで。 6回繰り返す。 同値数[回数-1]=0 ここまで。 手札を反復する。 札=それ-1 値=札%13 値数[値]=値数[値]+1 値=(札÷13)の整数部分 スート数[値]=スート数[値]+1 ここまで。 値数を反復する。 値=それ もし、値>0ならば、 同値数[値]=同値数[値]+1 ここまで。 ここまで。 もし、値数[9]*値数[10]*値数[11]*値数[12]*値数[0]が1ならば、 直列=オン。 ブロードウエイ=オン。 違えば、 (13-4)回繰り返す もし、値数[回数-1]*値数[回数]*値数[回数+1]*値数[回数+2]*値数[回数+3]が1ならば、 直列=オン。 ここまで。 ここまで。 ここまで。 # サマリした内容に基づき役の判定をする。 もし、同値数[5]=1ならば、 役=「5カード」 違えばもし、直列&&ブロードウエイ&&(スート数の配列最大値)=5ならば、 役=「ロイヤルフラッシュ」 違えばもし、同値数[4]=1ならば、 役=「4カード」 違えばもし、直列&&(スート数の配列最大値)=5ならば、 役=「ストレートフラッシュ」 違えばもし、同値数[3]=1かつ同値数[2]=1ならば、 役=「フルハウス」 違えばもし、直列ならば、 役=「ストレート」 違えばもし、(スート数の配列最大値)=5ならば、 役=「フラッシュ」 違えばもし、同値数[3]=1ならば、 役=「3カード」 違えばもし、同値数[2]=2ならば、 役=「2ペア」 違えばもし、同値数[2]=1ならば、 役=「1ペア」 もし、値数[10]=2||値数[11]=2||値数[12]=2||値数[0]=2ならば、 役=「1ペア(ハイ)」 ここまで。 違えば、 役=「役無し」 ここまで。 役で戻る。 ここまで。 ●(札の)ランク取得とは (((札-1)を13で割った余り)+1)で戻る ここまで ●(札の)スート取得とは ((((札-1)÷13)の整数部分)+1)で戻る ここまで 開始処理する。