▶ 実 行
▶ 実行
クリア
平面→クォータービューのテスト(マルバツゲーム(人対人) の改)
by てぃふと@うぇいく
#---宣言----- 定数 ゲーム画面=描画中キャンバス。 定数 マス幅=100。 定数 マス数=3。 定数 盤面高=マス幅*マス数。 定数 盤面幅=マス幅*マス数。 定数 [アキ,マル,バツ]=[0,-1,1]。 定数 変形率=0.7。 定数 回転度=15。 変数 [手数,手番]=[0,マル]。 変数 局面=空配列。 変数 勝敗=空。 #----------------------------------------------- # クォータービュー化 描画中コンテキストの"setTransform"を[1,0,0,1,0,0]でJSメソッド実行。 [盤面高*SIN(DEG2RAD(回転度)),0]に描画起点設定 [1,変形率]に描画拡大 回転度だけ描画回転 # 枠線を描く 画面描画。 # 初期化 (マス数*マス数)回繰り返す。 局面[回数-1]=アキ。 ここまで。 #---イベント----- ゲーム画面をマウス押した時には もし、勝敗が空でなければ、戻る。 xy=[マウスX,マウスY]をクォータービュー座標逆変換 列=(xy[0]/マス幅)の整数部分。 行=(xy[1]/マス幅)の整数部分。 もし、列<0または列≧マス数ならば、戻る。 もし、行<0または行≧マス数ならば、戻る。 番号=行*マス数+列。 もし、局面[番号]がアキでなければ、戻る。 局面[番号]に手番を代入。 番号に手番をマルバツ描画。 手数=手数+1。手番=手番×-1。 勝敗判定 ここまで。 #---関数----- ●画面描画 4に線太さ設定。黒色に線色設定。 (マス数-1)回 x=マス幅*回数 y=マス幅*回数 [x,0]から[x,盤面高]へ線描画。 [0,y]から[盤面幅,y]へ線描画。 ここまで。 ここまで。 ●(番号に記号を)マルバツ描画 定数 [マル中点,マル半径,バツ始点,バツ終点,記号太さ]=[マス幅/2,マス幅*0.3,マス幅/5,マス幅*0.8,マス幅/10] x=番号をマス数で割った余りにマス幅を掛ける。 y=番号をマス数で割って、それの整数部分にマス幅を掛ける。 「#DD3344」に線色設定。空に塗り色設定。記号太さに線太さ設定。 もし、記号がマルならば、 [x+マル中点,y+マル中点]にマル半径の円描画。 違えば、もし、記号がバツならば、 [x+バツ始点,y+バツ始点]から[x+バツ終点,y+バツ終点]まで線描画。 [x+バツ始点,y+バツ終点]から[x+バツ終点,y+バツ始点]まで線描画。 ここまで。 ここまで。 ●勝敗判定 WK=[ 局面[0]+局面[1]+局面[2], 局面[3]+局面[4]+局面[5], 局面[6]+局面[7]+局面[8], 局面[0]+局面[3]+局面[6], 局面[1]+局面[4]+局面[7], 局面[2]+局面[5]+局面[8], 局面[0]+局面[4]+局面[8], 局面[2]+局面[4]+局面[6] ] もし、(WKの配列最大値)がマス数ならば、 勝敗=「×の勝ち」 違えばもし、(WKの配列最小値)が(-マス数)ならば、 勝敗=「〇の勝ち」 違えば、 WK=局面[0]*局面[1]*局面[2]*局面[3]*局面[4]*局面[5]*局面[6]*局面[7]*局面[8] もし、WKが0でなければ、 勝敗=「引き分け」 ここまで。 ここまで。 もし、勝敗が空でなければ、 1/30秒後には、 勝敗を言う。 ここまで。 ここまで。 ここまで。 ●(xyを)クォータービュー座標逆変換 mat=描画中コンテキストの"getTransform"を[]でJSメソッド実行。 matの"invertSelf"を[]でJSメソッド実行。 [xy[0]*mat["a"]+xy[1]*mat["c"]+mat["e"],xy[0]*mat["b"]+xy[1]*mat["d"]+mat["f"]]で戻る。 ここまで。