きょういく ユースフル! ~ 僕は触媒になりたい ~

全て | カテゴリ未分類 | 生活をよくする | 本の紹介 | 共に生き、共に育つ | たのしいべんきょう | 個人的な日記 | 体育 | 音楽♪ | 道徳 等 | 問題解決 | 考え方 | 話し合い・話す・聞く | 特別支援教育 | 小学校 | 阪神間 地域情報 | PC・デジタル関係 | 教材・教具 | 食育(自立生活・家庭科)・園芸 | 仕事術 | 旅行(温泉含む) | 英語学習 | 環境保護・エコ | 作文・書くこと・漢字 | よのなか(社会) | いのち | 人間関係・コミュニケーション | 子育て | 地震・防災 | 算数 | 心理・カウンセリング・セラピー | 読む・音読・朗読 | エクセルでのプログラミング | 北播丹波 地域情報 | 教員免許 | 教育改革 | 休校期間お役立ち情報 | 映画 等 | 創造性をはぐくむ | プレゼン | 通級 | 健康 | ゲーム
2018.07.18
XML
​​​​​​ 【Excelプログラミング講座】第5回です。

この講座では、 エクセル野球シミュレーション「ダイナミックベースボール」 のプログラム実物を材料として、エクセルでのプログラミングを初心者向けに解説していきます。

Dynamic Baseball

ダイナミック・ベースボールのページ


過去記事をまとめたサイト↓
▼​ エクセルプログラミング講座 ​(ダイナミックベースボールのページ内)


前回は、 焦点を当てた部分に特化する」 という話をしました。

「あれもしたい、これもしたい」 では、ゲーム自体がなかなか完成しない。
プログラミング内容も複雑になり、結局途中であきらめて 「もうやらない」 ということに・・・。
ですからまず、一番やりたいことに絞って、そのプログラムを完成させ、実行させましょう。
「思い通りに動いた!」という感動が、きっとあなたのエネルギーになりますよ。


ではいよいよ、「野球ゲーム」としてのコアプログラムの実際に迫っていきます。

前回、野球ゲームとしての本質部分は 「打てるか、打てないか」 にある、と書きました。

単純に言うと、「Aか?Bか?」の条件分岐がこのプログラムの本質、と見なせるかと思います。
では、その「Aか?Bか?」の条件分岐を具体的にどう実現していくのでしょうか?

その部分、コンピュータゲーム化する前の、サイコロをふるアナログゲームでは、次のようなルールにしていました。



(1)バッターが球を打ったか、それとも三振かの判定をする。

   サイコロを1つふれ。

投球ダイス (ダイス1個)
    →  1~4なら 三振
打力が投手能力よりも大きければもう一度ダイスをふれる
5・6なら打った → フェアー判定へ

  (2)バッターが球を打った場合、フェアー判定をする。
     サイコロを2つふれ。

打球ダイス (ダイス2個)

  ・ ゾロ目 (両方同じ数)  ホームラン判定

  ・ 和が偶数 (たしたら偶数)   とった アウト!

・和が奇数 (たしたら奇数)   うったヒット!

出典:​ ダイスでできるスリリングな野球ゲーム「ダイサブル・ベースボール」
========================

上のリンク先の 「ダイサブル・ベースボール」 は、 ゲームプログラムの根幹 ですので、今後も随時参照していきます。できればそのページを印刷して手元に置いておき、実際のプログラムと見比べていってください。なお、今後は 「ダイサブル・ベースボール」 を「 ダイス版 」と略記します。

さあ、このダイス版の条件処理をエクセルプログラムで表すと、どうなるか?

実物のプログラムより簡略化して提示していきます。

========================
Sub 投球()
’Subはプログラムにつける名前。「投球プログラム」ということですね。
このプログラムは投球とその直後に発生する分岐のみ担当します。

        WavePath = ActiveWorkbook.Path & "\pitch.wav"
        PlaySound WavePath, 0, SND_SYNC

’wavファイルは音ファイルです。効果音を鳴らします。投げる音。けっこう大事。

        MsgBox Range("O6") & " 投げた!", , "投げた!"

MsgBox はメッセージボックスを出す命令。
Range("O6")は投手名が入っているセルの番地です。
こんな風に、セルの番地を参照すれば、各セルに表示されているデータを引っ張ってこれます。
"O6"は昔の番地指定のやり方なので、今は変わっていると思います。
ただ、僕は昔の慣れている指定方法の方がいいので、ずっと、これでした。


    Dice1 = Int(6 * Rnd) + 1
    Range("J12") = Dice1

’出ました。「Dice1」。これが「投球ダイス」ですね。
ランダム変数です。Int(6 * Rnd) + 1と書くと、「1~6」の整数をランダムで返します。

ランダム値が何を返してきたかをデバッグのときに知りたいので、
一応エクセルのセル上にも隠し表示として表示させるようにしています。

​If Dice1 < 5 Then ​​
            WavePath = ActiveWorkbook.Path & "\strike2.wav"
            PlaySound WavePath, 0, SND_SYNC
        MsgBox " ストライク!", , "打てない!"
        S = S + 1

’ダイス版の「1~4なら 三振 ​(ただし、打力が投手能力よりも大きければもう一度ダイスをふれる)」​の部分。
ここは、プログラミングにあたり、さらに細かく分解しています。
とにかくストライクなので、最初に「ストライク」を表示。
三振かどうかは、その次に判定します。
    ​


        If S = 2 Or Range("G8") <= Range("N8")  Then
            WavePath = ActiveWorkbook.Path & "\strikeout.wav"
            PlaySound WavePath, 0, SND_SYNC
            MsgBox "バッターアウト!", , "三振!"
            Out = Out + 1
            Cells(5, 11 + Out) = "●"

            S = 0
’三振になったらすぐにストライクカウントを0に戻します。前の数値が次の打者に持ち越されてしまうとエラーの元なので、忘れないうちにすぐ内部数値をリセットしておきます。

        Else
            Exit Sub

’「Else」で、IFの条件に当てはまらないときの処理を書きます。ここでは、三振に当てはまらない場合は、プログラムを終了させています。ストライクだけとられて、まだ次の投球にチャンスがあるよ、という状況の場合ですね。

        End If

​Else ​​

’こっちのElseは、投球ダイスが1~4ではない場合の分岐。
IFが入れ子構造になっているので分かりにくいですが、
こういう構造をこのゲームはよく使っています。


        WavePath = ActiveWorkbook.Path & "\hit.wav"
        PlaySound WavePath, 0, SND_SYNC

’とりあえず、ヒットを打ったときの音を再生。

           S = 0

            Dice1 = Int(6 * Rnd) + 1
            Range("J12") = Dice1
            Dice2 = Int(6 * Rnd) + 1
            Range("L12") = Dice2
            BN(0) = (Dice1 + Dice2) Mod 2 'ダイス合計が偶数か奇数か(0か1を持つ)

’サイコロを2つ振ったところ。
BN(0) は、分かりにくいですが、ダイス合計が偶数か奇数かのみを示す受け渡し変数です。


            MsgBox Range("H6") & " 打った!", , "当たった!"

            Call 飛球判定

’「打った!/当たった!」とだけ表示させて、肝心の結果は、「飛球判定」へと続きます。

        End If
        Exit Sub
End If

End Sub
========================

次回は、「飛球判定」のプログラムを参照します。

これでもだいぶ抜粋して載せたのですが、ついてこれましたか?

エクセルのプログラムを初めて目にする人は、目が回っちゃったんじゃないか、と思います。

大丈夫。今は、なんとなく理解できるだけで、OKです。


【今日のまとめ】 Aか?Bか?の条件分岐は

IF(もしも)を使う

ほかのやり方もあると思います。僕はBASICや英語で「 IF ~~ then ~~ else ~~ 」になじんでいたので、ずっとこの書き方を使っていますが、多分、今のプログラミング的には、ほかの書き方の方が、スリムだと思います。ま、それはそれ、これはこれ、ということで。大笑い

なお、今回のプログラム実物は、 ​「IF~~(もし~~なら)」​ が分からないと、さっぱり分からなかったと思います。他の方が作られた「Excel VBA 入門講座」にリンクを張らせていただきますので、基本的な構造を知るために、見てみるのもいいかと思います。

If~ElseIfステートメント( Excel VBA 入門講座)

※今回、更新予定時刻の21時よりも更新が15分ほど遅くなってしまいました。
 21時をねらって見にきてくださった方には大変申し訳ありませんでした。
​​​





お気に入りの記事を「いいね!」で応援しよう

Last updated  2018.07.18 21:15:07
コメント(0) | コメントを書く


■コメント

お名前
タイトル
メッセージ
画像認証
上の画像で表示されている数字を入力して下さい。


利用規約 に同意してコメントを
※コメントに関するよくある質問は、 こちら をご確認ください。


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

PR

Profile

にかとま

にかとま

Keyword Search

▼キーワード検索

Calendar

Archives

2025.11

Favorite Blog

アクセル数 New! 大(だい)さん

Comments


© Rakuten Group, Inc.

Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: