EXCEL VBA 初心者でもできる!Excelで遊べる三目並べ!Tic-Tac-Toe(コード解説付き・ダウンロード可能)

 

EXCEL VBA 初心者でもできる!Excelで遊べる三目並べ!ゲームを作る(コード解説付き・ダウンロード可能)

 

 ●はじめに

今回説明するのはExcel VBAで三目並べでゲームを作成しましたので、この作成した三目並べ解説を行います。3つのサンプルプログラムを作成しており、プログラム①⇒②⇒③につれて複雑な処理を行っております。それでは、まず、三目並べについて説明します。三目並べ(Tic-Tac-Toe)は、二人で遊ぶ単純なペンと紙のゲームです。プレイヤーは交互に、「O」と「X」のマークを、3×3のグリッドに入れていきます。勝利の条件は、自分のマークを縦、横、または斜めの一列に揃えることです。一方がこの条件を満たすか、すべてのマスが埋まるまでゲームは続けられます。
このゲームは非常に簡単で、戦略も限られているため、大人同士の遊びとしてはすぐに飽きられることがありますが、子供たちにとっては理論的思考や先読みの基礎を学ぶ良い手段となります。また、手軽に遊べるため、ちょっとした時間潰しやリラックスするためのアクティビティとしても楽しまれています。
それでは、三目並べのゲームの作り方を順番に説明いたします。

●【EXCEL VBA 初心者でもできる!Excelで遊べるブラックジャックゲーム、下記を参照して下さい】

EXCEL VBA 初心者でもできる!Excelで遊べるブラックジャックゲーム(コード解説付き・ダウンロード可能)

 

●【Worksheet.SelectionChange イベント (Excel)、下記を参照して下さい】(Microsoft社 様)】
https://learn.microsoft.com/ja-jp/office/vba/api/excel.worksheet.selectionchange

 

 

Excel VBAで三目並べゲームを作ってみた!①:二人で遊ぶ( 人間 対 人間)

 

 

 ●プログラム説明 (サンプル①)

今回説明するのは、ExcelのセルとVBAを使って、三目並べゲームの作成方法を紹介します。基本的なゲームの流れとルールをVBAでどのようにプログラミングしたか、コードとともに解説していきます。このExcel VBAプログラムは、Excelシート上で三目並べ(Tic-Tac-Toe)をプレイするためのシンプルなゲームです。プログラムは、ゲームの状態を追跡するためにグローバル変数(currentPlayer, moveCount)を使用し、ユーザーの操作に基づいてセルの選択、プレイヤーの切り替え、勝利条件のチェックなどを行います。なお、今回のサンプル①のプログラムでは、人間対人間で勝負(ゲーム)する形となります。

 

【プログラムの流れ】

  • Worksheet_SelectionChange: ユーザーがセルを選択するたびに発生するイベント。セルがゲームのグリッド(B2:D4)内で、かつ空の場合、現在のプレイヤーの記号をそのセルに記入し、手数を増やします。勝利条件を満たしているか、または引き分け条件(全てのセルが埋まる)に達しているかを確認し、必要に応じてゲームを再開始します。
  • StartGame: ゲームを初期化するためのサブルーチン。B2:D4の範囲のセルをクリアし、ゲームの状態を初期状態(Xの手番、手数0)にリセットします。
  • TogglePlayer: 現在のプレイヤーをXからO、またはOからXに切り替えます。
  • CheckWinner: 現在のプレイヤーが勝利条件を満たしているかどうかをチェックします。勝利条件は、任意の行、列、または対角線上に同じプレイヤーの記号が3つ揃うことです。
  • CheckThree: 3つの指定されたセルが同じプレイヤーの記号であるかどうかをチェックする関数です。

【プログラム実行条件・注意事項】

  • セルの選択範囲: ゲームのグリッド外のセルを選択しても何も起こりません。
  • セルの状態: すでに記号が入っているセルを選択した場合、そのセルは変更されません。
  • 手数の制限: 手数が9に達するとゲームは自動的に終了します。これは引き分けを意味することが多いです。
  • エラーハンドリング: プログラムにはエラーハンドリングのコードが含まれていません。不正な入力や予期しない動作が発生した場合の処理が必要かもしれません。
  • インターフェースの単純さ: グラフィカルなインターフェースやアニメーションは含まれていません。ゲームは非常に基本的な形で行われます。

★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● tic-tac-toe01 (サンプルプログラム)

 

 

 

●実行前~実行後 ※このプログラムを実行すると、ユーザーはExcelのシート上で三目並べをプレイできます。勝者が決定すると、そのプレイヤーが勝ったことを示すポップアップメッセージが表示され、新しいゲームが自動的に開始されます。9手を超えるとゲームは引き分けとなります。
(画面クリックして拡大)

 

 

 

Excel VBAで三目並べゲームを作ってみた!②:一人で遊ぶ(人間 対 CPU)

 

 

 ●プログラム説明 (サンプル②)

上記のサンプルプログラム①では、人間対人間の三目並べゲームの説明でしたが、今回は、人間対CPUとの勝負(ゲーム)となります。このVBAプログラムはExcel上で三目並べ(Tic-Tac-Toe)をプレイするためのものです。プレイヤー(’O’)とコンピューター(’X’)が交互にゲームを進めます。プレイヤーの選択やコンピューターのランダムな手、勝利条件のチェック、ゲームのリセットなどの機能が含まれています。セル選択イベントに基づいてゲームの進行が管理され、勝利条件を満たすと勝利メッセージが表示されます。引き分けの状況やゲームの再開始もプログラム内で処理されています。全体的に、このプログラムはExcel VBAを使用して基本的なゲームロジックを実装しており、ユーザーとコンピューターが対戦するインタラクティブな三目並べゲームを提供します。

【プログラムの流れ】
・Worksheet_SelectionChange:
プレイヤーがB2:D4範囲内の空のセルを選択したときに、そのセルに「O」を入力し、手数をカウントアップする。勝利条件をチェックし、勝利または引き分けの場合はメッセージを表示してゲームを再開始する。それ以外の場合は、コンピューターの手を呼び出す。
・ComputerMove: コンピューターがB2:D4範囲内の空のセルの中からランダムに一つ選び、「X」を入力する。勝利条件をチェックし、勝利または引き分けの場合はメッセージを表示してゲームを再開始する。次のプレイヤーを「O」に設定する。
・StartGame: B2:D4範囲内のセルをクリアし、現在のプレイヤーを「O」に設定し、手数を0にリセットする。
・CheckWinner: 指定されたプレイヤーが勝利条件を満たしているかどうかをチェックする。
・CheckThree: 指定された3つのセルが同じプレイヤーの記号であるかをチェックする。

 

【プログラム実行条件・注意事項】
・プレイヤーの入力: ユーザーは常に「O」を使用し、コンピューターは「X」を使用する。
・手数の制限: 9手に達するとゲームは自動的に引き分けとなる。
・ランダム性: コンピューターの手はランダムであり、戦略は含まれていない。
・エラーハンドリング: エラーハンドリングのコードが含まれていないため、不正な入力や予期しない動作には対応していない。
・パフォーマンス: 無駄なループ(For i = 1 To 100000000)※この部分については、コンピューター側が直ぐに配置するのを遅らせるため。

★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● tic-tac-toe02(サンプルプログラム)

 

 

 ●実行前~実行後 ※スターボタンを押してゲームを開始します。プレイヤーは「O」を使用し、コンピューターは「X」をランダムに配置します。どちらかが勝利条件を満たすか、9手で引き分けになると、ゲームはメッセージを表示して再開始します。
(画面クリックして拡大)

 

 

Excel VBAで三目並べゲームを作ってみた!③:1人で遊ぶ(人間 対 AI?CPU)

 

 

 ●プログラム説明 (サンプル③)

今回のサンプルプログラム③では、サンプル②と同様に人間対CPUとのゲームですが、CPU側が遥かに賢くなっています。サンプルでは、空いているマスにランダムに配置するように出来ていますが、今回のサンプル③では、3つ並ぶのを阻止したり、早く3つ並べる様に考えて配置するプログラムを追加しているので、②のプログラムと違い賢くなっています。

★コンピュータの手を賢くするロジックを組み込む①②

①✖を配置する場所を探す:コンピュータ(✖)は、自分が勝つために縦、横、斜めのいずれかで3つの✖を揃えることを試みます。これは、既に2つの✖が並んでいる行、列、または対角線を探し、空いているセルに✖を配置することによって実現されます。
②〇の勝利を阻止する:もし上記の戦略で配置する場所がない場合、コンピュータは〇が勝つのを阻止するために動きます。これは、既に2つの〇が並んでいる行、列、または対角線を探し、空いているセルに✖を配置することによって実現されます。が交互に手を進め、勝利条件を満たすか9手に達すると、勝利者が発表され、ゲームが再開始されます。勝利条件が満たされない場合は引き分けとなります。

【プログラムの流れ】
・Worksheet_SelectionChange:
ユーザーがセルを選択すると、選択されたセルがゲームグリッド内にあるかをチェックし、現在のプレイヤーが「O」の場合、セルに「O」を入力して手数を増やします。勝利条件をチェックし、勝利または引き分けの場合、メッセージを表示してゲームを再開始します。それ以外の場合は、コンピューターの手を進行させます
・ComputerMove:
勝利する手があればそれを選択し、なければユーザーの勝利を阻止する手を選択します。どちらもない場合はランダムな手を選択します。手数を増やし、ゲームの状態をチェックします。
・FindWinningMove:
指定されたプレイヤーが勝利する可能性のある手を見つけます。
・PlaceRandomMove:
空のセルの中からランダムに手を選択して配置します。
・CheckGameStatus:
勝利条件をチェックし、勝利または引き分けの場合、メッセージを表示してゲームを再開始します。
・StartGame:
ゲームを初期化し、セルをリセットして現在のプレイヤーを「O」に設定し、手数を0にリセットします。
・CheckWinner:
勝利条件をチェックします。
・CheckThree:
指定された3つのセルが同じプレイヤーの記号であるかをチェックします。

 

【プログラム実行条件・注意事項】
パフォーマンス:
コンピューターの手を選択するロジックにおいて、効率的なアルゴリズムを使用することが重要です。
エラーハンドリング:
エラー処理が不足している可能性があります。適切なエラーハンドリングを追加することを検討してください。
ユーザー入力:
ユーザーは「O」のみを使用し、コンピューターは「X」を使用します。

 

★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● tic-tac-toe03(サンプルプログラム)

 

 

 ●実行前~実行後 ※ユーザーとコンピューターが交互に手を進め、勝利条件を満たすか9手に達すると、勝利者が発表され、ゲームが再開始されます。勝利条件が満たされない場合は引き分けとなります。 なお、今回のプログラムでは、三目並べのコンピュータの手を賢くするため、2つの戦略が用いられます。①コンピュータ(✖)は縦、横、斜めに3つの✖を揃えるため、2つ並んだ✖の列や行、対角線を探し空いているセルに✖を置く。②配置場所がなければ、コンピュータは〇の勝利を阻止し、2つの〇が並んだ場所を見つけてそこに✖を置く。
(画面クリックして拡大)

 

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。