こちらは旧サイトを当時のまま移転したものとなります。
最新の状況は https://9cguide.appspot.com/blog/index.html にて公開しています。

戻る
エクセルでゲームを作る

今回は誰もが知ってる表計算ソフト「エクセル」
をつかってジャンケンゲームを作ります。

ゲームを作るには

ゲームを作ろう。ゲームを作るのにはなにが必要なのでしょうか。
簡単に作りたいのなら、Click&Createなどを使うと簡単に作れます。
本格的なものを作りたいのであれば、Visual C++ や C++Builder など、
本格的なプログラム用のツールが必要になります。
しかし、ジャンケンゲーム程度であれば、
表計算ソフトのエクセルで十分
です。
エクセルにはVBAなるプログラミングツールが内蔵されています。
このVBAの本来の目的はエクセルの処理を自動化して楽にするためのものです。
このVBAを使えば、エクセル上で動く会計ソフトなんかも作れます。
しかし、今回はジャンケンゲームを作ります。


準備

まずは準備です。用意するものは以下の通りです。
・Microsoft Windows 95 以上が正常に動くパソコンとそのOS。
・Microsoft Excel 97 以上。(もしかしたら95でもうごくかも)
・じゃんけんの絵
・紙とエンピツ(紙なら何でもいいです。)
必要なものはこれだけです。 じゃんけんの絵は僕の方でも用意しましたが、
気に入らない人は自分で書いてみましょう。
グーの絵 チョキの絵 パーの絵
※相手の分はこれをひっくり返して作ります。


ゲームシステム

さあ、ゲームを作ろう。と、その前にまだやることが残っています。
どのようなゲームをつくり、どうやってパソコンで動かすのか。
これを考えておく必要があります。
ゲームのルールはこのようにしましょう。
ゲーム画面
・「じゃんけんをする」ボタンを押します。
・プレイヤーはマウスで手前に表示されている
 「グー」「チョキ」「パー」の絵のどれかをクリックします。
・すると、プレイヤーのクリックした絵以外は見えなくなります。
・同時に、コンピューターも手を出します。
 コンピューターも出した以外の手は見えなくなります。
・勝ち負けが決定します。勝った場合は「あなたの勝ちです。」
 負けた場合は「あなたの負けです。」
 引き分けの時は「引き分けです。」と表示します。
 引き分けの場合はもう一回じゃんけんします。
・始めに戻ります。

ちょっと説明がわかりにくいかもしれませんが、
何となく解っていただけたでしょうか。
プログラムの世界では、次にこれを「流れ図」にします。


流れ図

流れ図とはなにか? これは、説明するより見たほうが早いです。
その前に、これは正式な書き方ではないことをお断りしておきます。
正式な書き方では、仕事によって枠の形が決まっていますが、
この流れ図はすべて長方形です。
流れ図
このように、仕事の手順をあらわしたものが流れ図です。
あとは、この流れ図をプログラムに書きなおすだけです。


ゲーム画面を作る

プログラムの前にゲーム画面を作ります。 ここからは手順を示すハズですが、
上の画面を作るだけでも非常に長ったらしい手順になってしまいます。
よって、ここでは概略だけを説明します。

メニューから 「表示 → ツールバー → コントロールツールボックス」を選択
「コントロールツールボックス」を表示します。

もし、「三角形と定規の絵」か押されていなければ、押しておきます。

山の絵を選んで画面上でドラッグしイメージコントロールを作成します。
「イメージコントロール」とは、画面の中で「じゃんけんの絵」になります。
できた四角形を逆クリックして「プロバティ」を選び
その中から、 「Picture」と言う文字をクリックし、
右のはしに表示される 「...」と言うボタンを押します。
表示する画像ファイルを選ぶ画面になりますので、
そこからじゃんけん画像ファィルを選びましょう。

次に、「一つだけのボタンの絵 」をクリックし、
画面上でドラッグすると「コマンドボタン」が作成できます。
これはよくあるボタンです。 「じゃんけんをするボタン」になります。
できたボタンを逆クリックして「プロバティ」を選ぶと
「プロバティ画面」が表示されるので、
その中から、 「Caption」と言う文字をクリックし、
その右に「じゃんけんをする」と入力します。

次に、「abl と書かれている絵」をクリックし、
画面上でドラッグすると「テキストボックス」が作成できます。
これはよくある文字を入力するものです。 「メッセージ表示」になります。
これはそのままでも結構です。

次に、「大文字でAと書かれた絵」をクリックし、
画面上でドラッグすると「ラベル」が作成できます。
これはもじを表示するもので。 「相手」「自分」になります。
できたラベルを逆クリックして「プロバティ」を選ぶと
「プロバティ画面」が表示されるので、
その中から、 「Caption」と言う文字をクリックし、
上のラベルにはその右に「相手」と入力します。
下のラベルにはその右に「自分」と入力します。

かなり手を抜いて説明したのでわからないと思います。
しかし、とにかくやってみれば何となく解ります。
プログラムの世界ではこの「慣れ」が重要なので、
とにかくやってみることが大切です。


プログラムを作る

これはゲーム画面を作るよりもわかりにくくめんどくさい作業であります。
一応解説はしますが絶対解らないと思います。
しかし、完成したゲームをダウンロードできるようにしておくので、
それを改造していくことで、だんだん仕組みが解ってきます。

・プログラムとは
 単純に表すと、「人間には人間の言葉があるが、
 同じように機械のための言葉」となる。
 VBAで使われる「Basic」と言う言葉は英語に近いものである。
 ただし、英語が苦手な人でも何の問題もなく覚えられる
 僕は高校一年ですが、中学一年ていどの英語しか分かりません。
 でも、「Basic」よりも難しい「C言語」もある程度使えます。

・変数
 数学の変数とはやや違い、 「数を入れる箱」が変数です。
 「A = 1」とすると、Aと言う箱に1がはいります。
 ただし、ここのイコールは数学のイコールとは違った意味で、
 「=」 と言うより 「←」  と言う意味になります。

・命令・関数
 関数も数学の関数とは違います。命令の一種です。
 命令というのはコンピュータに仕事を与えます。
 たとえば 「Print "わはははは"」 とすると、
 コンピュータは画面に わはははは と表示します。
 「Print」 というのは 画面に表示しろ と言う命令になります。

・命令解説
 Beep    音を鳴らします。
 If ~ Then~Else 条件式と言います。
 条件が正しかったとき、正しくなかったときにそれぞれの処理を行います。
 Int( X * Rnd + 1) ランダムに数を返します。
 さいころを振ると思ってもらえるとわかりやすいと思います。
 ほかに、このプログラムで使っている命令はありません。

・プロバティ
 あるものの状態を表します。
 たとえば Aさんがいまかぜをひいていたら
 「Aさん の 健康状態 = かぜ」 と言うことになります。

エクセルでプログラムを作る場合、
まずはメニューの「ツール→マクロ→Visual Basic Editor」を選択します。


完成したプログラム

緑色の文字 コメントと呼び、プログラムをわかりやすくするためにつけます。
      無くてもプログラムそのものには関係ありません。
青い文字  予約語と呼ばれます。はじめから決められている言葉です。
Dim GAMEMODE 'ゲームの状態を表します。 0=待機中 1=じゃんけん中 はじめは0です。
Private Sub CommandButton1_Click()
'「じゃんけんをする」ボタンが押されたときのプログラムが書かれています。
GAMEMODE = 1 '「じゃんけんをする」ボタンが押されたため、
' ゲームの状態を「じゃんけん中」に設定します。


CommandButton1.Enabled = False '「じゃんけんをする」ボタンを押せないようにします。

TextBox1 = "ジャーンケーン" '画面下部のボックスに、「ジャーンケーン」と表示します。
Beep '単純な電子音を鳴らします。

End Sub

Private Sub GamePlay(player)
'ここで、勝ち負けの判定を行います。
'「player」の中には、1か2か3のどれかが入ります。
'「player」が1ならプレイヤーは「グー」を出したことになります。
'「player」が2ならプレイヤーは「チョキ」を出したことになります。
'「player」が3ならプレイヤーは「パー」を出したことになります。


TextBox1 = "ポン" '画面下部のボックスに、「ポン」と表示します。
enemy = Int(3 * Rnd + 1) 'ここでは1から3までの目のついたさいころを振っています。
'上の命令により、「enemy」のなかには1か2か3のどれかが入ります。
'「enemy」が1なら敵は「グー」を出したことになります。
'「enemy」が2なら敵は「チョキ」を出したことになります。
'「enemy」が3なら敵は「パー」を出したことになります。


Beep '単純な電子音を鳴らします。

Image1.Visible = False
Image2.Visible = False
Image3.Visible = False
'ここで敵側の「グー」「チョキ」「パー」の絵を一時的に見えなくします。

If enemy = 1 Then Image1.Visible = True '敵が「グー」を出したときには「グー」の絵を見えるようにします。
If enemy = 2 Then Image2.Visible = True '敵が「チョキ」を出したときには「チョキ」の絵を見えるようにします。
If enemy = 3 Then Image3.Visible = True '敵が「パー」を出したときには「パー」の絵を見えるようにします。

Wait (0.5) 'ここで0.5秒間だけゲームをストップします。
'なぜなら「ポン」と表示してから、
'じゃんけんの結果を表示するまでに少し時間を取らないと
'なにをやっているのか解らなくなるからです。


If enemy = player Then 'ここではプレイヤーと敵の出した手が同じなら、
'つまり引き分けの時のプログラムが書かれています。
'このプログラムは引き分けであるかどうかを調べるものです。


TextBox1 = "あいこで" '画面下部のボックスに、「あいこで」と表示します。
Wait (0.5) 'ここで0.5秒間だけゲームをストップします。
'なぜなら「あいこで」と表示してから、
'もう一回じゃんけんするまでに少し時間を取らないと
'なにをやっているのか解らなくなるからです。


'引き分けの場合、次の文 Else と その先の文 End If までの間をとばします。

Else 'ここではプレイヤーと敵の出した手が違った場合、
'つまり引き分けではない時のプログラムが書かれています。


If enemy = 1 And player = 2 Then TextBox1 = "あなたの負けです。"
'敵が「グー」自分が「チョキ」を出しているならば「あなたの負けです。」と表示させます。

If enemy = 1 And player = 3 Then TextBox1 = "あなたの勝ちです。"
'敵が「グー」自分が「パー」を出しているならば「あなたの勝ちです。」と表示させます。

If enemy = 2 And player = 1 Then TextBox1 = "あなたの勝ちです。"
'敵が「チョキ」自分が「グー」を出しているならば「あなたの勝ちです。」と表示させます。

If enemy = 2 And player = 3 Then TextBox1 = "あなたの負けです。"
'敵が「チョチ」自分が「パー」を出しているならば「あなたの負けです。」と表示させます。

If enemy = 3 And player = 1 Then TextBox1 = "あなたの負けです。"
'敵が「パー」自分が「グー」を出しているならば「あなたの負けです。」と表示させます。

If enemy = 3 And player = 2 Then TextBox1 = "あなたの勝ちです。"
'敵が「パー」自分が「チョキ」を出しているならば「あなたの勝ちです。」と表示させます。

Wait (0.5) 'ここで0.5秒間だけゲームをストップします。
'なぜならじゃんけんの結果を表示してから、
'最初の状態に戻る前に少し時間を取らないと
'なにをやっているのか解らなくなるからです。


GAMEMODE = 0 'じゃんけんが終了して勝敗が決まったので、
'ゲームの状態を「待機中」に設定します。
CommandButton1.Enabled = True '「じゃんけんをする」ボタンが押せなくなっているので、
'再び押せるように設定します。

End If

Image1.Visible = True
Image2.Visible = True
Image3.Visible = True
Image4.Visible = True
Image5.Visible = True
Image6.Visible = True 'ここでは、敵と味方の「グー」「チョキ」「パー」の絵を
'全て見えるようにします。


End Sub

Private Sub Image4_Click()
'プレイヤー(あなた)が「グー」の絵を押したときにこのプログラムが動きます。

If GAMEMODE <> 1 Then Exit Sub 'もしも、ゲームの状態が「待機中」だったら、
'なにもしません。それを判断します。


Image5.Visible = False
Image6.Visible = False '「チョキ」と「パー」の絵を見えなくします。

GamePlay (1) '「GamePlay」というプログラムに、「プレイヤーがグーを出したよ」と教えます。
' 1は「グー」を表します。ここから上の方の「GamePlay」というところにワープします。


End Sub

Private Sub Image5_Click()
'プレイヤー(あなた)が「チョキ」の絵を押したときにこのプログラムが動きます。

If GAMEMODE <> 1 Then Exit Sub 'もしも、ゲームの状態が「待機中」だったら、
'なにもしません。それを判断します。

Image4.Visible = False
Image6.Visible = False '「グー」と「パー」の絵を見えなくします。

GamePlay (2) '「GamePlay」というプログラムに、「プレイヤーがチョキを出したよ」と教えます。
' 2は「チョキ」を表します。ここから上の方の「GamePlay」というところにワープします。
End Sub


Private Sub Image6_Click()
'プレイヤー(あなた)が「パー」の絵を押したときにこのプログラムが動きます。

If GAMEMODE <> 1 Then Exit Sub 'もしも、ゲームの状態が「待機中」だったら、
'なにもしません。それを判断します。

Image4.Visible = False
Image5.Visible = False '「グー」と「チョキ」の絵を見えなくします。

GamePlay (3) '「GamePlay」というプログラムに、「プレイヤーがパーを出したよ」と教えます。
' 3は「パー」を表します。ここから上の方の「GamePlay」というところにワープします。
End Sub


Private Sub Wait(PauseTime)
'ここでは指定された秒数、プログラムの実行を一時停止します。
'少しだけややこしいのでここの仕組みは解らなくてもいいです。


Start = Timer ' 中断の開始時刻を設定します。
Do While Timer < Start + PauseTime
DoEvents ' 他のプロセスに制御を渡します。
Loop
End Sub


おわり

ここでおわってしまってはわけわからないこととおもいます。
ホームページによっては親切丁寧に解説しているところもあるでしょう。
しかし、僕はあえてほとんどを謎のままにしておきます。
最後に完成したゲームをダウンロードし、
それをいじくりまくることでだんだんとその仕組みを理解していく
という方法が一番だと僕は思っています。
はじめは当然なにもわかりません。だからこそわかったときの喜びが大きく、
どんどんプログラムの世界にハマッテいくことになります。
ぜひ、完成したゲームをダウンロードして、
それを自分なりにいじってみましょう。

完成したゲームをダウンロード
(28.8KB 36.6Kbpsで約8秒)



公開日時:2000年 09月 09日
更新日時:2002年 07月 14日
 このコラムは内容を保証するものではありません。
 また、内容は公開日時の時点でのものであり、
 その後の修正内容は文章の推敲に過ぎません。

コラムページに戻る

トップページに戻る