エクセルで遊べる「神経衰弱」の作り方【Vba ゲーム】

はじめに

 

どーも 暇人プログラマーTakeです。

今回も暇すぎて、Excel でトランプを使った神経衰弱」を作ってみました!!

 

 

作成時間はおよそ3時間くらいでした!

わたしは要領が悪いので、作成に結構時間がかかってしまいました。。。

たぶんプログラミングが得意な人はもっと早くできると思います。

 

この記事では、私が作成した「神経衰弱」の操作方法作成方法についてご紹介します~!

 

スポンサーリンク

操作方法

 

 

操作方法は下記手順です。

 

操作手順
  1. 数字の種類(2~13)を設定します
  2. マークの種類( ♣)を設定します。
  3. 「START」押下します。すると、「ステータス」がゲーム中に変更されます。
  4. セル上に赤いセルがでてきますので、どれかを二枚押します。
  5. 二枚同じ数字ならカードの表示が消え、獲得枚数が追加されます。
  6. 全部カードの表示が消えれば、ゲーム終了です。

 

簡単に言うと、設定することして、ボタンを押下すれば、

あとは普通の「神経衰弱」です。

 

数字の種類(2~13)

 

ゲームに使うトランプの数字の種類のことを指します。

たとえば、数字の種類(2~13)= 3 と設定すれば、

トランプの数字(2 ~10、J、Q、K)のうち3種類の数字(たとえば、2、4、Jの3種類)

を使うように設定するということです(この数値はランダムで決定します)。

 

マークの種類( ♣)

 

ゲームに使うトランプのマークの種類のことです。

これは、「2」か「4」のみ設定できるのですが、

「2」と設定すると、 ♠の2種類、「4」と設定すると、 ♣の4種類が

神経衰弱のゲーム内で使用されるということです。

 

配置されるカードの枚数について

 

また配置されるカードの枚数ですが、

数字の種類(2~13)×記号の種類(♥ ♠ ♦ ♣)の枚数になります。

つまり、最大が13×4枚=52 枚となります。

 

「START」と「FIN」ボタンについて

 

 

「START」ボタンを押下することで、ゲームが開始されます。

その際に「ステータス」という箇所が「ゲーム中」に変更されるのが確認できます。

また、トランプが表示されることが確認でき、押下も可能です(画面赤色のセルの箇所)。

 

 

「FIN」ボタンを押下することで、ゲームが終了します。

その際に「ステータス」という箇所が「ゲーム終了」に変更されるのが確認できます。

なお「ゲーム終了」状態では、カードを押下しても反応しなくなります。

 

作成方法

 

今回は、Excel Vba を用いて作成しました!

作成方法について、全部記述すると長くなるのですがご容赦ください。

 

※ 専門的な用語もでてきますので、よくわかない方は、ページの一番下のダウンロードボタンから

Excel「神経衰弱」をダウンロードして遊んでみてください!

 

シート構成

 

シート構成
  1. 神経衰弱
  2. トランプマスタ(非表示シート)
  3. 作業用

 

「神経衰弱」はメインシートであるので、実施に神経衰弱を行う用のシートとなります。

実装自体は Excel Vba で行っており、このシートはその実装結果を表示させているだけです。

 

「トランプマスタ」はトランプに関する情報を登録するシートです。

具体的には、トランプで使用する数字とマークをどういうものを使用するかといったことを登録しています。

この値を参照してトランプとして扱う数字とマークを設定するように Excel Vba 上で動作させています。

 

作業用シートは実際に神経衰弱のゲームを行っていく上で必要な情報を登録するシートです。

具体的には下記情報を登録しています。

 

必要な情報
  1. マウスからクリックされたカードの情報(カードの値とカードのセルの位置)
  2. クリックされた二枚のカードが同じ数字のカードであるか判定
  3. 全カード枚数、残り枚数、獲得枚数
  4. ゲームステータス(ゲーム中か終了か)

 

ソースコード

 

Excel Vba のソースコードについては下記のような構成になっています。

 

ソースコード
  1. Sheet1(神経衰弱)
  2. STARTボタン押下処理
  3. カード押下時の処理
  4. ゲーム終了処理
  5. 定数定義
  6. 配置カードを設定
  7. 盤上へカードを配置

 

Sheet1(神経衰弱)

 

ここはシート上のクリックを検知し、その検知した結果、さまざまな処理を行う箇所です。

 

具体的には、カードを配置する範囲のセルがクリックされている状態で

かつステータスが「ゲーム中」の場合にクリックが検知された場合に様々な処理を行うようにしています。

 

様々な処理
  1. カード押下前の処理
  2. カード押下時の処理
  3. カード押下後の処理
  4. カード終了時のフラグ

 

ソースコード
 

※ Excel シートのクリック検知について記事を以前記事を作成しましたの、よければ参考にご確認ください。

(わたしは以前これを知らなくてめちゃくちゃ悩んだ覚えがありますが、知っていれば超簡単です!)

 

STARTボタン押下処理

 

ここでは、START ボタンが押下された場合の処理をまとめています。

私が作成したマクロは、STARTボタンを押下することでゲームが開始する仕様になっていますが、

ゲーム開始前の準備をここでは行うということです。

 

ゲーム開始前の準備
  1. メインシート 初期化
  2. 作業用シート 初期化
  3. 盤上にカードをセット
  4. ゲームステータスの設定

 

ソースコード
 

カード押下時の処理

 

 

シート上の赤いセルをクリックした場合に実装される処理です。

Sheet1(神経衰弱)で動作を検知し、このソースコードに書かれたプロシージャが実行されるということです。

 

ゲーム開始前の準備
  1. カード押下前の処理
  2. カード押下時の処理
  3. カード押下後の処理

 

カード押下前の処理

ここでは、まず一枚目と二枚目のカードが押下されたセルの情報(セルの値とセルの位置)を

「作業用シート」に記述します。

 

カード押下時の処理

押下されたセルの配色を変更します。

赤色のカードとは、つまり赤色の背景色のセル(セル内の文字も赤色)ということですが、

カードが押下されたということが、カードを開く(表返す)ためにセルの背景色を赤色から白色に変更しています。

また、この際に、のマークを赤色、♠と♣を黒色にするように表示します。

 

下記はかなり悩んだところなんですが。。。

Excel Vbaでは、♣という文字が読み取れません。

読み取ろうとすると「?」となってしまいます(Excel 2016ではそうなりました。。)。

ですので、今回の対策として、

Vbaでマークが読み取れないときの対策
  1. Excel Vbaで値としては、♣ではなく別の文字に置き換える(「H」「S」「D」「C」のように)
  2. 表示の前に「作業用」シートに置き換える前の値を記述しておく
  3. 表示させるときのみ♣に置き換える(VLookup関数をつかって「トランプマスタ」シートから参照)
  4. カードを裏返すときに、置き換える前の文字を入力するようにする

 

カード押下後の処理

ここでは、カードが二枚クリックされたかを判定し、

判定した結果、同じ数字であるかそうでないかを比較し、同じならカードを削除します。

 

判定方法は、「作業用シート」のB2、C2の値が両方空白かどうかで判定します。

両方とも値が含まれていれば、二枚クリックされたということです。

 

数字の比較については、「作業用シート」のB2、C2の値を比較しますが、

このときカードのマーク無視するようにします(つまり一番最後の文字を無視して数字部分のみ判定します)。

 

ソースコード
 

ゲーム終了処理

 

ここでは、ゲーム終了処理に関する処理が含まれます。

ゲームが終了するパターンは主に2通りです。

 

マーク読み取れない対策
  1. 神経衰弱のカードがすべてめくられて終わるパターン
  2. 「FIN」ボタンが押下されて終了するパターン

 

①のすべてカードがめくられたときの検知方法ですが、

二枚目のカードがクリックされた後に

作業用シートの「残り枚数」と記載のある個所(F2)が0になったときに終了するように処理します。

 

ソースコード
 

定数定義

 

ここでは、Excel Vba で扱う定数についてまとめて定義しています。

シート名、カードを配置する箇所(盤上という表現で記載)などなどです。

(たぶん、ソースコード見たほうがはやいとおもいます。)

ソースコード
 

配置カードを設定

 

ここでは「START」ボタン押下時にはじめにカードを配置する処理を記述しています。

大きくは setCard() プロシージャで処理を実装しています。

 

実装内容
  1. 何種類の数字をゲームをするか、「神経衰弱」シートの数字とマークの種類から決定
  2. 上記の情報から、使用する数字を決定
  3. 最終的に使うカードの種類を決定し、配列に格納

 

ちょっとわかりにくかったかもなので、補足します。

はじめに「神経衰弱」シートで「3種類」の数字と「4種類」のマークを使用するとします。

つぎに「3種類」の数字の中からどの数字にするか(1 ~ 10の中で)ランダムに選択します。

たとえば、1、4、9と使うとすると

1、4、9 × 「4種類」のマーク♣ = 12種類の文字列を作成し、配列に格納します。

そして最終的に配列をランダムにシャッフルし、その配列をシートに出力するということです。

※ ここでは、配列の生成のみで、シートへの出力は別の「盤上へカードを配置」で行います。

 

ソースコード
 

盤上へカードを配置

 

「配置カードを設定」で生成した配列をシートに表示させます。

 

その表示の際に、カードの装飾も行っています。

カードの装飾とはつまりセルの配色を指します(たとえば、セルの値、罫線、背景色など)。

 

ソースコード
 

まとめ

 

いかがでしょうか?

 

Excel Vba があれば簡単に作れますでのよければぜひ作ってみてください!

※ 作成した Excel 「神経衰弱」は下記からダウンロードできます。よければぜひ遊んでみてください!

 

 

スポンサーリンク
おすすめの記事