🌸 「なでしこ」
>
🍯 「貯蔵庫」
マルバツゲーム(人対COM)
🌟新規
📒一覧
🔌
🔍検索
🚪ログイン
マルバツゲーム(人対COM) 📖
アドベントカレンダー8日目。実際に遊ぶつもりならこのくらいがちょうど良いと思うんだよね。次は、絶対勝てないマルバツゲームにします。
プログラム:
(→大)
#---宣言----- 定数 ゲーム画面=描画中キャンバス。 定数 マス幅=100。 定数 [アキ,マル,バツ]=[-1,0,1] 変数 [手数,手番]=[0,0]。 変数 局面=空配列。 #勝敗判定 定数 パターン=[[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]]。 定数 [引き分け,継続]=[-1,-2] 変数 ゲーム中=はい。 #コンピューターが打つ 定数 [先攻,後攻]=[0,1]。 変数 [人間,COM]=[先攻,後攻]。 変数 プレイヤー=空配列。 変数 レベル=1。 #----------------------------------------------- ゲーム開始。 #---イベント----- ゲーム画面をマウス押した時には もし、ゲーム中がいいえならば、戻る。 もし、手番がCOMならば、戻る。 列=(マウスX/マス幅)を整数変換。 行=(マウスY/マス幅)を整数変換。 番号=行*3+列。 番号へ打つ。 ここまで。 #---関数---------- ●ゲーム開始 人間=2の乱数。COM=(人間+1)%2。//先攻後攻決め 対戦相手選択。 初期化。 もし、COMが先攻ならば、COM着手。 ここまで。 ●対戦相手選択 「レベル選択。よわい(0)orふつう(1)」を尋ねる。 レベルはそれを整数変換。。 もし、レベルが0でなければ、レベルは1。 「レベル{レベル}です」を言う。 ここまで。 ●初期化 画面描画。 番号を0から8まで繰り返す。局面[番号]=アキ。。。 手数=0。手番=0。ゲーム中は、はい。 プレイヤー[人間]=「人間」。プレイヤー[COM]=「COM」。 ここまで。 ●新規ゲーム 人間=(人間+1)%2。COM=(COM+1)%2。//先攻後攻入れ替え 初期化。 もし、COMが先攻ならば、COM着手。 ここまで。 #描画 ●画面描画 全描画クリア。 4に線太さ設定。黒色に線色設定。 2回 [マス幅*回数,0]から[マス幅*回数,マス幅*3]へ線描画。 [0,マス幅*回数]から[マス幅*3,マス幅*回数]へ線描画。 ここまで。 ここまで。 ●(番号に記号を)マルバツ描画 定数 [マル中点,マル半径,バツ始点,バツ終点,記号太さ]=[50,30,20,80,10] x=番号を3で割った余りにマス幅を掛ける。 y=番号を3で割って、それの整数部分にマス幅を掛ける。 「#DD3344」に線色設定。空に塗り色設定。記号太さに線太さ設定。 もし、記号がマルならば、 [x+マル中点,y+マル中点]にマル半径の円描画。 違えば、もし、記号がバツならば、 [x+バツ始点,y+バツ始点]から[x+バツ終点,y+バツ終点]まで線描画。 [x+バツ始点,y+バツ終点]から[x+バツ終点,y+バツ始点]まで線描画。 ここまで。 ここまで。 ●(番号へ)打つ もし、局面[番号]がアキでなければ、戻る。 局面[番号]に手番を代入。 番号に手番をマルバツ描画。 0.1秒後には //chromeで描画より先にダイアログが上がっちゃうの防ぐため 勝敗判定して結果に代入。 もし、結果が継続ならば、 手数=手数+1。手番=手数%2。 もし、手番がCOMならば、 COM着手。 ここまで。 違えば、 結果で終局。 ここまで。 ここまで。 ここまで。 #勝敗判定 ●勝敗判定 パターンを反復 変数[a,b,c]=対象。 もし、(局面[a]≠アキ)かつ(局面[a]=局面[b])かつ(局面[a]=局面[c])ならば、局面[a]で戻る。 ここまで。 もし、手数が8以上ならば、 引き分けで戻る。 違えば、 継続で戻る。 ここまで。 ここまで。 ●(結果で)終局 もし、結果が引き分けならば、 「引き分け。」を言う。 違えばもし、結果>引き分けならば、 「{プレイヤー[結果]}の勝ち。」を言う。 ここまで。 ゲーム中は、いいえ。 「続ける?」で二択。 もし、それがはいならば、新規ゲーム。 ここまで。 #コンピューターが打つ ●COM着手 レベルで条件分岐。 0ならば、レベル0。。。 1ならば、レベル1。。。 ここまで。 ここまで。 #空いてる所へランダムに打つ ●レベル0 着手可能マス=着手可能マス確認。 着手可能マス[(着手可能マスの要素数)の乱数]へ打つ。 ここまで。 #同じ記号が2つあったら止める ●レベル1 パターンを反復 変数[a,b,c]=対象。 もし、(局面[b]≠アキ)かつ(局面[b]=局面[c])かつ(局面[a]=アキ)ならば、 aへ打って戻る。 違えば、もし、(局面[a]≠アキ)かつ(局面[a]=局面[c])かつ(局面[b]=アキ)ならば、 bへ打って戻る。 違えば、もし、(局面[a]≠アキ)かつ(局面[a]=局面[b])かつ(局面[c]=アキ)ならば、 cへ打って戻る。 ここまで。 ここまで。 レベル0。 ここまで。 ●着手可能マス確認 着手可能マスは空配列。 局面を反復 もし、対象がアキならば、着手可能マスに対象キーを配列追加。 ここまで。 着手可能マスで戻る。 ここまで。
プログラムを実行
⭐ 雪乃☆雫 作
(
関連URL
)
タイトル:
マルバツゲーム(人対COM)
ライセンス:
CC0 (著作権破棄)
タイプ:
wnako
タグ:
アドベントカレンダー2021
利用バージョン:
3.2.30
作成日時:
2021/12/08 06:58 (編集: 2022/11/28 14:30)
公開の投稿
ログイン
して★を付けよう!
Twitterへ投稿
📝作品を編集
作品公開情報
📍この作品のURL:
📍アプリ(即時実行)のURL:
📍アプリ(実行ボタンあり)のURL:
📍ブログパーツ:
上記HTML↑をブログに貼り付けることでアプリを埋め込めます。
📍ライブラリ直リンク - 『!「***」を取込』で使うとき:
📍なでしこハブ (最新版の反映は1日後):
ソースの確認
編集履歴の確認
通報数:
0
通報って何?