新しく発言する EXIT インデックスへ
野球シュミレーション

  野球シュミレーション TDC 2006/10/25 23:41:11 
  <続き> TDC 2006/10/25 23:42:11 
  バンド戦略を追加 TDC 2006/11/11 13:50:34 
   ├<続き> TDC 2006/11/11 13:51:58 
   └<続きの続き> TDC 2006/11/11 13:52:59 
    └ランナー初期化がまちがっています。 山中和義 2006/12/06 14:23:55 

  野球シュミレーション TDC 2006/10/25 23:41:11  ツリーへ

野球シュミレーション 返事を書く
TDC 2006/10/25 23:41:11
まだたくさん修正箇所がありますが、作りましたので
発表します。

! 野球の試合シュミレーション
! ○打率 当る当らない
! ○累打 1塁打 2塁打 3塁打 本塁打
! ×足の速さ(盗塁、進塁率、長打率)
! ×戦略(バンド)
! ×ピッチャー防御率係数
! ×サヨナラの処理

! 2006年のチーム打率 中日 0.270 日本ハム 0.269

!---------初期設定0------------------
RANDOMIZE
OPTION BASE 0
DIM RUNER(7) !ランナーを1塁〜7塁(仮想)までならべる
LET WT=0.05 ! 待ち時間

!---------初期設定1------------------
LET SENCO$="日本ハム" !先攻チーム名
LET COCO$="中日" !後攻チーム名

!---------メインルーチン---------------
PRINT "■■■■■■■■■■■■■■■■■■■■"
PRINT "■■■■■プレイボール !!■■■■■■"
PRINT "■■■■■■■■■■■■■■■■■■■■"
PRINT ""

FOR LLL=1 TO 12 ! 延長12回まで
LET OMO_URA=0
LET Bat_AVG=0.269 !日本ハムファイターズ
CALL INING

IF LLL=>9 AND TEN_A<TEN_B THEN EXIT FOR ! 9回を超えて、後攻チームが勝っている場合は、EXITする

LET OMO_URA=1
LET Bat_AVG=0.270 !中日ドラゴンズ
CALL INING
IF LLL=>9 AND TEN_A<>TEN_B THEN EXIT FOR ! 9回を超えて、勝敗のある場合は、EXITする
NEXT LLL

CALL Ending ! エンディング処理


!-----------------------以下、サブルーチン-------------------------
SUB Ending
PRINT "---------試合終了----------"
PRINT "先攻=";TEN_A;"点 ";"後攻=";TEN_B;"点 ";
IF TEN_A>TEN_B THEN
PRINT "先攻";SENCO$;"の勝ち"
ELSEIF TEN_A<TEN_B THEN
PRINT "後攻";COCO$;"の勝ち"
ELSEIF TEN_A=TEN_B THEN
PRINT "引分け"
END IF
END SUB



SUB PRT_STATUS !状態の表示
PRINT ""
IF OUT=0 THEN PRINT "ノーアウト 1塁/2塁/3塁=";RUNER(1);"/";RUNER(2);"/";RUNER(3);" ";TEN_A;"点";TEN_B;"点"
IF OUT>0 THEN PRINT OUT;"アウト 1塁/2塁/3塁=";RUNER(1);"/";RUNER(2);"/";RUNER(3);" ";TEN_A;"点";TEN_B;"点"
IF RUNER(1)+RUNER(2)+RUNER(3)=3 THEN PRINT "満塁!!"
PRINT ""
WAIT DELAY WT
END SUB

SUB RUIDA ! 塁打ルーチン
LET RUI_RN=MOD(RND*100000,100)
IF RUI_RN<55 THEN
LET RUI_DA=1
PRINT "ヒット! ☆"
ELSEIF RUI_RN=>55 AND RUI_RN<85 THEN
LET RUI_DA=2
PRINT "2塁打! ☆☆"
ELSEIF RUI_RN=>85 AND RUI_RN<88 THEN
LET RUI_DA=3
PRINT "3塁打! ☆☆☆"
ELSEIF RUI_RN=>88 THEN
LET RUI_DA=4
PRINT "ホームラン!☆☆☆☆"
END IF
END SUB

  <続き> TDC 2006/10/25 23:42:11  ツリーへ

Re: 野球シュミレーション 返事を書く
TDC 2006/10/25 23:42:11
<続き>

SUB HIT_STATUS ! ヒットルーチン
PRINT " 打ちました ";
CALL RUIDA
LET RUNER(0)=1
FOR K=3 TO 0 STEP -1
LET RUNER(K+RUI_DA)=RUNER(K)
LET RUNER(K)=0
NEXT K
IF RUNER(4)+RUNER(5)+RUNER(6)+RUNER(7)>0 THEN PRINT RUNER(4)+RUNER(5)+RUNER(6)+RUNER(7);"点追加"
IF OMO_URA=0 THEN
LET TEN_A=TEN_A+RUNER(4)+RUNER(5)+RUNER(6)+RUNER(7)
ELSEIF OMO_URA=1 THEN
LET TEN_B=TEN_B+RUNER(4)+RUNER(5)+RUNER(6)+RUNER(7)
END IF
LET RUNER(4)=0
LET RUNER(5)=0
LET RUNER(6)=0
LET RUNER(7)=0
END SUB

SUB OUT_KIND ! アウトルーチン
PRINT "残念!";
LET KIND_OUT=MOD(INT(RND*1000),7)
IF KIND_OUT=0 THEN PRINT "ピッチャーゴロ ";
IF KIND_OUT=1 THEN PRINT "ファーストゴロ ";
IF KIND_OUT=2 THEN PRINT "ショートゴロ ";
IF KIND_OUT=3 THEN PRINT "センターフライ ";
IF KIND_OUT=4 THEN PRINT "レフトフライ ";
IF KIND_OUT=5 THEN PRINT "ライトライナー ";
IF KIND_OUT=6 THEN PRINT "三振 ";
PRINT "アウト!"
END SUB

SUB INING !■■■■■■ イニングルーチン■■■■■■

IF OMO_URA=0 THEN
PRINT "■■■■■■■■■■■■■■■■■■■■"
PRINT "■■■■■■■■ ";LLL;"回表■■■■■■■■"
PRINT "■■■■■■■■■■■■■■■■■■■■"
PRINT SENCO$;"の攻撃"

ELSEIF OMO_URA=1 THEN
PRINT "■■■■■■■■■■■■■■■■■■■■"
PRINT "■■■■■■■■ ";LLL;"回裏■■■■■■■■"
PRINT "■■■■■■■■■■■■■■■■■■■■"
PRINT COCO$;"の攻撃"

END IF

LET OUT=0
DO
!バッターが打席に入る
! 打つか打たないか
WAIT DELAY WT
CALL PRT_STATUS
PRINT "---バッター打席に入りました---"

WAIT DELAY WT
IF RND<Bat_AVG THEN
LET HIT=1
ELSE
LET HIT=0
END IF

IF HIT=1 THEN ! 打った場合は、ヒットルーチンで処理
CALL HIT_STATUS
END IF

IF HIT=0 THEN ! 打てなかった場合は、アウトルーチンで処理
LET OUT=OUT+1
CALL OUT_KIND
END IF
LOOP UNTIL OUT=3
PRINT " 3アウトチェンジ!!"
IF RUNER(1)+RUNER(2)+RUNER(3)>0 THEN PRINT RUNER(1)+RUNER(2)+RUNER(3);"人残塁"
PRINT ""
CALL ini_Ining
END SUB

SUB ini_Ining !ランナー初期化
LET RUNER(0)=0
LET RUNER(1)=0
LET RUNER(2)=0
LET RUNER(3)=0
END SUB

END

  バンド戦略を追加 TDC 2006/11/11 13:50:34  ツリーへ

Re: 野球シュミレーション 返事を書く
TDC 2006/11/11 13:50:34
バンド戦略を追加
! 野球の試合結果
! ○打率 当る当らない
! ○累打 1塁打 2塁打 3塁打 本塁打
! ×足の速さ(盗塁、進塁率、長打率)
! △戦略(バンド) ノーアウト ランナー 1塁のとき
! ×ピッチャー防御率係数
! ×サヨナラの処理

! 2006年のチーム打率 中日 0.270 日本ハム 0.269

!---------初期設定0------------------
RANDOMIZE
OPTION BASE 0
DIM RUNER(7) !ランナーを1塁〜7塁(仮想)までならべる
LET WT=0.0001 ! 待ち時間

!---------初期設定1------------------
LET SENCO$="日本ハム" !先攻チーム名
LET COCO$="中日" !後攻チーム名

FOR JJJ=1 TO 1000
!---------メインルーチン---------------
PRINT "■■■■■■■■■■■■■■■■■■■■"
PRINT "■■■■■プレイボール !!■■■■■■"
PRINT "■■■■■■■■■■■■■■■■■■■■"
PRINT ""

CALL Main
CALL Ending ! エンディング処理

PRINT ""
PRINT "■■■■■■■■■■■■■■■■■■■■■■■■■■■"
PRINT "全試合数=";JJJ;"試合"
PRINT "先攻勝数(バント有)=";WIN_A
PRINT "後攻勝数(バント無)=";WIN_B
PRINT "引分け数=";WIN_AB
PRINT ""
LET TEN_SUB=TEN_SUB+TEN_A+TEN_B
PRINT "総得点数=";TEN_SUB;"点"
PRINT "平均得点数=";ROUND(TEN_SUB/JJJ/2,2);"点"
PRINT "■■■■■■■■■■■■■■■■■■■■■■■■■■■"
WAIT DELAY 5
LET TEN_A=0
LET TEN_B=0
NEXT JJJ


!-----------------------以下、サブルーチン-------------------------
SUB main
FOR LLL=1 TO 12 ! 延長12回まで

LET OMO_URA=0
LET Bat_AVG=0.269 !日本ハムファイターズ
CALL INING

IF LLL=>9 AND TEN_A<TEN_B THEN EXIT FOR ! 9回を超えて、後攻チームが勝っている場合は、EXITする

LET OMO_URA=1
LET Bat_AVG=0.270 !中日ドラゴンズ
CALL INING

IF LLL=>9 AND TEN_A<>TEN_B THEN EXIT FOR ! 9回を超えて、勝敗のある場合は、EXITする

NEXT LLL
END SUB

SUB Ending
PRINT "---------試合終了----------"
PRINT "先攻=";TEN_A;"点 ";"後攻=";TEN_B;"点 ";
IF TEN_A>TEN_B THEN
PRINT "先攻";SENCO$;"の勝ち"
LET WIN_A=WIN_A+1
ELSEIF TEN_A<TEN_B THEN
PRINT "後攻";COCO$;"の勝ち"
LET WIN_B=WIN_B+1
ELSEIF TEN_A=TEN_B THEN
PRINT "引分け"
LET WIN_AB=WIN_AB+1
END IF
END SUB

   ├<続き> TDC 2006/11/11 13:51:58  ツリーへ

Re: バンド戦略を追加 返事を書く
TDC 2006/11/11 13:51:58
<続き>
SUB PRT_STATUS !状態の表示
PRINT ""
IF OUT=0 THEN PRINT "ノーアウト 1塁/2塁/3塁=";RUNER(1);"/";RUNER(2);"/";RUNER(3);" ";TEN_A;"点";TEN_B;"点"
IF OUT>0 THEN PRINT OUT;"アウト 1塁/2塁/3塁=";RUNER(1);"/";RUNER(2);"/";RUNER(3);" ";TEN_A;"点";TEN_B;"点"
IF RUNER(1)+RUNER(2)+RUNER(3)=3 THEN PRINT "満塁!!"
PRINT ""
WAIT DELAY WT
END SUB

SUB RUIDA ! 塁打ルーチン
LET RUI_RN=MOD(RND*100000,100)
IF RUI_RN<55 THEN
LET RUI_DA=1
PRINT "ヒット! ☆"
ELSEIF RUI_RN=>55 AND RUI_RN<85 THEN
LET RUI_DA=2
PRINT "2塁打! ☆☆"
ELSEIF RUI_RN=>85 AND RUI_RN<88 THEN
LET RUI_DA=3
PRINT "3塁打! ☆☆☆"
ELSEIF RUI_RN=>88 THEN
LET RUI_DA=4
PRINT "ホームラン!☆☆☆☆"
END IF
END SUB

SUB HIT_STATUS ! ヒットルーチン
PRINT " 打ちました ";
CALL RUIDA
LET RUNER(0)=1
FOR K=3 TO 0 STEP -1
LET RUNER(K+RUI_DA)=RUNER(K)
LET RUNER(K)=0
NEXT K
IF RUNER(4)+RUNER(5)+RUNER(6)+RUNER(7)>0 THEN PRINT RUNER(4)+RUNER(5)+RUNER(6)+RUNER(7);"点追加"
IF OMO_URA=0 THEN
LET TEN_A=TEN_A+RUNER(4)+RUNER(5)+RUNER(6)+RUNER(7)
ELSEIF OMO_URA=1 THEN
LET TEN_B=TEN_B+RUNER(4)+RUNER(5)+RUNER(6)+RUNER(7)
END IF
LET RUNER(4)=0
LET RUNER(5)=0
LET RUNER(6)=0
LET RUNER(7)=0
END SUB

SUB OUT_KIND ! アウトルーチン
PRINT "残念!";
LET KIND_OUT=MOD(INT(RND*1000),7)
IF KIND_OUT=0 THEN PRINT "ピッチャーゴロ ";
IF KIND_OUT=1 THEN PRINT "ファーストゴロ ";
IF KIND_OUT=2 THEN PRINT "ショートゴロ ";
IF KIND_OUT=3 THEN PRINT "センターフライ ";
IF KIND_OUT=4 THEN PRINT "レフトフライ ";
IF KIND_OUT=5 THEN PRINT "ライトライナー ";
IF KIND_OUT=6 THEN PRINT "三振 ";
PRINT "アウト!"
END SUB

   └<続きの続き> TDC 2006/11/11 13:52:59  ツリーへ

Re: バンド戦略を追加 返事を書く
TDC 2006/11/11 13:52:59
<続きの続き>
SUB INING !■■■■■■ イニングルーチン■■■■■■

IF OMO_URA=0 THEN
PRINT "■■■■■■■■■■■■■■■■■■■■"
PRINT "■■■■■■■■ ";LLL;"回表■■■■■■■■"
PRINT "■■■■■■■■■■■■■■■■■■■■"
PRINT SENCO$;"の攻撃"

ELSEIF OMO_URA=1 THEN
PRINT "■■■■■■■■■■■■■■■■■■■■"
PRINT "■■■■■■■■ ";LLL;"回裏■■■■■■■■"
PRINT "■■■■■■■■■■■■■■■■■■■■"
PRINT COCO$;"の攻撃"

END IF

LET OUT=0
DO
!バッターが打席に入る
! 打つか打たないか
WAIT DELAY WT
CALL PRT_STATUS
PRINT "---バッター打席に入りました---"

WAIT DELAY WT

IF RUNER(1)=1 AND RUNER(2)+RUNER(3)=0 AND OUT=0 AND OMO_URA=0 THEN
CALL YES_BANT ! バンド戦略ありの場合
ELSE
CALL NO_BANT ! バンド戦略なき場合
END IF

LOOP UNTIL OUT=3

PRINT " 3アウトチェンジ!!"
IF RUNER(1)+RUNER(2)+RUNER(3)>0 THEN PRINT RUNER(1)+RUNER(2)+RUNER(3);"人残塁"
PRINT ""
CALL ini_Ining
END SUB

SUB ini_Ining !ランナー初期化
FOR I=0 TO 7
LET RUNER(0)=0
NEXT I
END SUB

SUB NO_BANT ! バンド戦略なき場合
IF RND<Bat_AVG THEN
LET HIT=1
ELSE
LET HIT=0
END IF

IF HIT=1 THEN ! 打った場合は、ヒットルーチンで処理
CALL HIT_STATUS
END IF

IF HIT=0 THEN ! 打てなかった場合は、アウトルーチンで処理
LET OUT=OUT+1
CALL OUT_KIND
END IF
END SUB

SUB YES_BANT ! バンド戦略ある場合
PRINT "BBBBBBBBBBBBBBBBBB バントした BBBBBBBBBBBBBBBBBBBBBB"
LET RUNER(1)=0
LET RUNER(2)=1
LET OUT=OUT+1
END SUB



END

    └ランナー初期化がまちがっています。 山中和義 2006/12/06 14:23:55  ツリーへ

Re: <続きの続き> 返事を書く
山中和義 2006/12/06 14:23:55
ランナー初期化がまちがっています。

SUB ini_Ining !ランナー初期化
FOR I=0 TO 7
LET RUNER(I)=0
NEXT I
END SUB


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。