動)|VBA入門, Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As あとはまだひっくり返せない・ひっくり返す意思がない場所に石を置けてしまうのでひっくり返すことが可能な場所だけに石を置けるようにしたいです。それとパスできるようにするのと石を数えて勝利判定を実装くらいでしょうか。 中々難しそうですが頑張って完成目指します。, 34歳から未経験でITエンジニアを目指し、2019年11月からSESでの仕事がスタートしました。 Why not register and get more from Qiita? vbaでゲームを作れるようになりたい・・・ vbaでゲームを簡単に作る方法を知りたい・・・ vbaでゲームを作りたい!と思っても、作り方がわからない方がほとんどですよね。簡単なマクロを作るレベルと、ゲームを作るレベルに壁を感じている方もいるのではないでしょうか。 勉強用のアウトプット用にQiita始めました。 まだまだ経験が浅く大した記事は作成できませんが、宜しくお願いします。. オセロをつくりました! 前にExcel Vbaを駆使してオセロを作成しました!このオセロ、2人用のオセロになっていますのでCPU対戦などはできません(いずれ機能追加して作り方もご紹介しま … By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. 最初に石がひっくり返す判定が必要な場所に置かれたかを判断してからひっくり返す必要がある範囲でループして 一応専門学校で2年間Javaを学んでましたが10年ブランクあるのでほぼ初心者からのスタートです。 この記事を読むと、以下の問題が解決できます。 Excelのデータを反転したい。 特定の行や列のデータの並びを反転させて、並び替えたい 特別な関数やツールなどを使わずに、簡単な方法で反転したい! と 以前はコレクションにオセロの盤面の石の配置の情報を格納していたのですが、コレクションの特性で一度格納したデータを更新するのが困難だったので配列を使用する方法へ変更しました。配列に変更することでデータの取り扱い方が解りやすくなりひっくり返す判定も作りやすかったです。, ※注意この時点のコードではひっくり返し判定が動作がおかしな点がありますが、#5の記事にて改修していますのでそのままお進みください。, まず複数のプロシージャで盤面情報が格納された配列内のデータをやり取りするのでパブリックで配列を宣言しています。, ダブルクリックして石を置いたらStone_Mapプロシージャで盤面の状況を取得し、8方向ひっくり返し判定の関数を呼び出して オセロプログラムで最も重要な点は、やはり石を置いて相手の石をひっくり返す部分です。この解説ページでは、石が置けるかどうかの判定処理と、相手の石をひっくり返す処理に重点を置いて解説します。 なお、これはあくまで自作プログラムの解説です。 Help us understand the problem. 配列内で石をひっくり返して行きます。, 最初に盤面情報を取得した関数の逆バージョンで配列の中の盤面情報をExcelのセルへ反映させてます。, 前回投稿から大分時間が経ってしまいましたがなんとかひっくり返す所まで完成しました。 オセロプログラムで最も重要な点は、やはり石を置いて相手の石をひっくり返す部分です。この解説ページでは、石が置けるかどうかの判定処理と、相手の石をひっくり返す処理に重点を置いて解説します。, なお、これはあくまで自作プログラムの解説です。自作プログラム以外のオセロが、以下の解説通りに実装されているとは限りませんので、ご注意ください。, 石が置けるマスというのは、自分の石を置いた時に、相手の石を1つでもひっくり返せるマスのことを指します。, Excelファイルでは、「judgeStone」プロシージャでこの判断をしています。, Excelファイルでは、「reverseStones」プロシージャでこの処理をしています。, 石を置いたマスから上下左右斜めの8方向について、相手の石が並び、並びの先に自分の石があった場合に、並んでいる相手の石を自分の石に変えてしまえばよいです。, なお、ExcelファイルではVBAの都合により、相手の石が並んでいる数を調べてからその数の分だけ石を変えていますが、スタックやキューを利用した方がより効率的です。並んでいる相手の石の位置をスタック or キューに入れていき、並びの先に自分の石があった場合、スタック or キューから位置を取り出し、石を変えていけばOKです。, あなたもジンドゥーで無料ホームページを。 無料新規登録は https://jp.jimdo.com から, 該当マスに石が既に置かれていないか確認する。置かれていた場合はここで終了(石が置けない)。, 3の相手の石が並んでいる数が1以上 & 並びの先に自分の石がある(=相手の石が自分の石に挟まれている状況)、という方向が1つでもある場合、石が置けると判断する。それ以外は石が置けない。, 判定結果を保管しておく(Excelファイルではセル[X4:AE11]。0 = 石が置けない、1 = 石が置ける)。. ExcelマクロVBAでオセロ(リバーシ)を作っていきながらマクロVBAを学ぶ第3回です。いよいよ自分の石を置いて、相手の石をひっくり返す処理に進むのですが、その前に、そもそも自分の石を置ける場所はどこなのか…。クリックしたセルは、自分の石を置いて良いセルなのかの判定が必要です。 '変数stoneがBLACK_STONEだったら●を置く、WHITE_STONEだったら◯を置く, '////////////////////////////////////////////////////////////////////////////////////, '/////////////////////////右方向ひっくり返す関数/////////////////////////////////////, '*************************************************************************************, '******************************左方向ひっくり返す関数*********************************, '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++, '++++++++++++++++++++++++上方向ひっくり返す関数++++++++++++++++++++++++++++, '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@, '@@@@@@@@@@@@@@@@@@@@@@@@@@下方向ひっくり返す判定@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@, '--------------------------------------------------------------------------, '-----------------------右上方向ひっくり返す関数---------------------------, '選択セルの行が5~10且つ列が3~8だったら(右上ひっくり判定が必要な位置に石を置いたか), '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\, '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\左上方向ひっくり返す関数\\\\\\\\\\\\\\\\\\\\\\\\\\\, '選択セルの行が5~10且つ列が5~10だったら(右上ひっくり判定が必要な位置に石を置いたか), '##############################################################################################, '####################################右下方向ひっくり返す関数##################################, '選択セルの行が3~8且つ列が3~8だったら(右上ひっくり判定が必要な位置に石を置いたか), '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@左下方向ひっくり返す関数, you can read useful information later efficiently. 以前はコレクションにオセロの盤面の石の配置の情報を格納していたのですが、コレクションの特性で一度格納したデータを更新するのが困難だったので配列を使用する方法へ変更しました。 ExcelマクロVBAでオセロ(リバーシ)を作っていきながらマクロVBAを学ぶ第6回です。いよいよ今回は、黒石白石を交互に打てるようにします。もちろん、相手の石を挟んでいる場所は、自分の石に取り … 配列内の盤面を更新した後、実際のセルに配列の盤面状況を反映させてひっくり返しています。, 盤面情報を配列内に格納していく関数です。For分をネストして盤面に見立てた二次元配列に白黒どちらの石があるかを格納してます。, 右方向のひっくり返す判定です。 Boolean), Function is置ける全方向(ByVal Target As Range. What is going on with this article? vbaでオセロ作成 #4コレクションから配列使用に変更、8方向ひっくり返し判定.