3594536 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

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

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

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
2018年07月25日
XML
​​​【Excelプログラミング講座】第6回です。

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

Dynamic Baseball

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

過去記事をまとめたサイト↓
▼​エクセルプログラミング講座


前回は、「条件分岐のプログラミングは、IF構文を使うという話をしました。

もし A なら → こうする

もし B なら → こうする

もし、AでもBでもないなら → こうする

もし の話は、おわり!

というような構文のことです。

プログラミングではいろんなところで登場するこういった記述法。
プログラミング初心者の方は、ぜひ、慣れてくださいね!

今回は、前回のつづき。
「投球プログラム」の後に、打球が飛んだ後の処理をする「飛球判定」のプログラム、その中身です。

実現すべき内容は、以下の通りでしたね。

========================
  (2)バッターが球を打った場合、フェアー判定をする。

     サイコロを2つふれ。
     打球ダイス(ダイス2個)

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

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

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

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

では、エクセルの「ダイナミックベースボール」のプログラム実物を開ける方は、次のようにクリックしてください。

Module1 → Declarations → 飛球判定





以下、飛球判定プログラムの中身の前半です。
前回同様、本質的でないところは、飛ばします。

==========================
Sub 飛球判定()
     
Select Case BN(0) '0=偶数、1=奇数、3=飛球判定のスキップ

’Select Caseというのを今度は使っていますね。
 IF構文と同じようなことができますが、
 こちらのほうが人によっては分かりやすいかもしれません。

 BN(0)という変数は、このプログラムに来るまでに、2つのダイスの目を足して2で割ったあまりが入るようになっています。つまり、0ならダイスの目の和が偶数、1ならダイスの目の和が奇数と言えます。
 
Case 0
ダイスの目の和が偶数の場合の条件分岐。ぞろ目の場合は和は必ず偶数になるので、このケースに当てはまります。

    If Dice1 = Dice2 Then    'ぞろ目のとき
           
            If Dice1 <= Range("I8") Then
​’Range("I8")は、そのセル番地を見てもらうと分かりますが、何が入っていますか?
 バッターの「ちから」ですね。
 力持ちのバッターほど、ホームランの確率が上がるように、ぞろ目のときのダイスの目とバッターの「ちから」の数値を比べています。

                Range("E12") = "H"
                Range("G12") = "O"
                Range("I12") = "M"
                Range("K12") = "E"
                Range("M12") = "R"
                Range("O12") = "U"
                Range("Q12") = "N"
                Range("S12") = "!"
’こちらのエクセルのセルの番地は、表示される文字を全部追っていくと・・・
 「HOMERUN!」になりますね!


さて、以降は、ホームランを打った場合にしなければならない処理が続きます。
一言で「ホームランを打った」と言っても、いろいろな状況が考えられるわけです。

さて、プログラム処理的に、何をしないといけないでしょうか?


                Score1 = Score1 + 1
点数は最低でも1点入るはずですので、まずは1点を内部的に持ちます。

                HitIn
ヒット扱いですので、ヒットを打ったときの処理もします。
HitInは、チームのトータルヒットカウントの表示を増やすプログラム。

                Call SeisekiB(Range("H6"), 14)
                Call SeisekiB(Range("H6"), 16)
                Call SeisekiB(Range("H6"), 20)
                Call SeisekiP(Range("O6"), 20)
打者成績への反映。(4つめのみ、投手成績への反映。)
 チームデータファイルから該当選手名を探し出し、
 その後、14番目とか16番目といった数字の列の数字を1つ増やします。
 つまり、チームデータファイルの14番目はN列の「本塁打数」。
 同じく16番目はP列の
「打点数」ということになります。



            
                If R3 > 0 Then
R3は3塁走者の走力なので、これが0より上ということは、つまり走者がいた場合、となります。
​ランナーの処理は、3塁ランナーから順番に処理していきます。​


                    Score1 = Score1 + 1: R3 = 0
                    Range("N10:N11").Value = "" '3塁走者消す
                    MsgBox "3塁ランナーホームイン!!", , "ホームラン!"
                    Call SeisekiB(Range("H6"), 16)
                    Call SeisekiP(Range("O6"), 20)
                    ScoreIn

3塁走者が帰ってきたことにより、得点はさらに+1。
 打点などの成績反映も追加されます。
                   
                End If

以下、2塁走者、1塁走者がいた場合も、同様に順に処理します。         
 
                If R2 > 0 Then
                    Score1 = Score1 + 1: R2 = 0
                    Range("O9:O10").Value = "" '2塁走者消す
                    MsgBox "2塁ランナーホームイン!!", , "ホームラン!"
                    Call SeisekiB(Range("H6"), 16)
                    Call SeisekiP(Range("O6"), 20)
                    ScoreIn
                End If
               
                If R1 > 0 Then
                    Score1 = Score1 + 1: R1 = 0
                    Range("P10:P11").Value = "" '1塁走者消す
                    MsgBox "1塁ランナーホームイン!!", , "ホームラン!"
                    Call SeisekiB(Range("H6"), 16)
                    Call SeisekiP(Range("O6"), 20)
                    ScoreIn
                End If
               
                Call ScoreIn
​ScoreInが何度も出てきます。別の箇所に書いてある得点処理プログラムです。
 ​​得点処理プログラム「ScoreIn」​​は、サヨナラの場合にはゲームが終わってしまうので、
 ゲーム終了までに必要な処理がすべて終わっているのかが重要です。
 (実はここに、今でも取り切れていないバグがまだ潜んでいます・・・。)​

               
                Range("E12:S12") = "" 'ホームランと書いた文字を消す。
               
            ElseIf Dice1 = 6 Then
    <以下、次回!>
==========================

長くなるので、次回に続きます。

ホームランかどうかが野球ドラマでは一番大事ですので、一番最初にそれが書いてありました。(笑)
ホームランを打ったときのランナーの有無が、得点に関係します。
得点が変われば、打者成績の打点数も変わってきますし、投手の自責点も変わってきます。
そういうわけで、単純に「ホームラン!」と表示させるだけではなく、それに付随するプログラムがいろいろとくっついてくるのです。

今回、メインプログラムのエクセルファイルとは違う、選手データのエクセルファイルをさわるプログラムが書いてありました。こんなふうに、実行ファイルとは違うエクセルファイルの中身を参照したり、数値を変更させたりすることができます。これこそ、エクセル野球シミュレーション「ダイナミックベースボール」の醍醐味です。

これを応用すると、いろいろなプログラムが作れそうですね。




【今日のまとめ】 ホームランの時のプログラムは

​​​走者数に応じて得点処理をする​

​「得点処理」の詳細は今回参照していませんが、少し書いたように、得点処理プログラムの際に、もしそれがサヨナラであればそこでゲームが終了するというイレギュラーなことが待っている可能性があります。実は「飛球判定プログラム」を書いた際にこれがちゃんと想定し切れていなかったので、今でも残っているバグがあるのです。

前回から「条件分岐」についてふれていますが、分岐が増えれば増えるほど、いろいろなケースが生じてくるため、想定し切れていないケースでエラーを起こすということがあります。プログラムは長くなればなるほど、分岐が分岐を呼び、エラーを起こしやすくなるのです。そのため、デバッグしやすい(エラー箇所を見つけやすい)プログラムを書く、ということも重要になってきます。

(※現在残っているバグはゲームが止まるほどの重大なものではありません。普通に遊ぶ分にはほぼ問題ありません。)

最後に、前回同様、他の方が作られた「Excel VBA 入門講座」にリンクを張らせていただきます。
今回は前回の続きに書かれている、「Select Case~ステートメント」です。

Select Case~ステートメント(Excel VBA 入門講座)

では、次回はバッターの「ちから」数値が低くてホームランにならなかったとき以降の、「飛球判定」プログラムの続きを参照します。​





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

最終更新日  2018年07月25日 21時00分13秒
コメント(0) | コメントを書く
[エクセルでのプログラミング] カテゴリの最新記事


■コメント

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


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


PR

プロフィール

にかとま

にかとま

カテゴリ

キーワードサーチ

▼キーワード検索

サイド自由欄

カレンダー

バックナンバー

お気に入りブログ

種を買う 2024.04.1… New! 森3087さん

コメント新着


© Rakuten Group, Inc.