プロ野球の公式戦の試合形式は、
毎年のようにいろいろ変えてるんだけど、
それに応じて、ゲームの方も対応していかないといけない。
しかし、以下に関しては、
・総試合数、
・延長戦の回数、
・再試合の有無
既に対応してあるので、どういう風に変更されても、ビクともしないが、
今回の交流戦に関しては、どこをどう直していいか、頭に出てこない。
というより、プログラムそのものを忘れているので、
思い出さなきゃならないけど、面倒だーーーー。。。
で、これを改良しないといけないが、
こういう改良点の内容をどこかに書いておかないと、
また次にとんでもない変更が決められると、
またプログラム変更するのに大変なことになる。
今までは、書いておくにも、ソースに長たらしく書けないし、
別に専用の設計書を書くなんてとても凹むし。
ということで、どこをどう直したかを、これからはブログに書いておこう。
これは、いい考えですね。^^)
ということで、ちょっとプログラムを眺めてみた感じでは、
【管理試合数の変更】
ポイントは、6チームのリーグ戦は、
管理上、「15」という数値を直接プログラムに記載して管理している。
プログラム上は、こういう直値を書くのは、改良する上で問題なので、
今回は、この直値部分を変数に変更する必要ありですね。^^)
この15という値は、
横浜戦は、5戦、中日戦は既に管理している横浜戦を除いて、4戦、
。。。。というように、6チームから2チームを抜き出す組合せの
数であり全部で15戦のためである。
これが交流戦だと、この15戦に、
セの各チームがパの各チームとホーム・ビジターで3戦ずつを戦うので、
結局、36戦が新しい組合せとして必要。
なので、交流戦では、15戦+36=51戦を管理しなくてはいけない。
ということで、セリーグのチーム数=Cとし、パリーグのチーム数=P
とすると、以下の式で求められる。
非交流戦モード時:
管理戦数=C*(C−1)/2
交流戦モード時:
管理戦数=C*(C−1)/2 + C*P
ということで、交流戦/非交流戦という区別は、Pの値で決めることに。
すなわち、P=0なら非交流戦とすればいい。
そこで、いろいろな変数をいじらないようにするために、
まずHTMLの一番最初で、
ゲーム対象リーグとゲーム非対象リーグの
チーム名1文字配列:MyLeageとnonMyLeageを定義してもらい、
これを元に、今回の変更を行う。
例えば、セリーグのペナント競争なら、チームIDを
交流戦モードなら、MyLeage="YDGSCT",nonMyLeage="hlfwmr"
非交流戦モードなら、MyLeage="YDGSCT",nonMyLeage=""
とすれば、上記管理戦数のC,Pは、その文字数を求めればよい。
ということで、管理戦数を変数=ALLgameNoとする。
したがって、いままで、15と書いてあったところをALLgameNoに置換する。
また、この管理戦数(対戦試合数)のカウントに際して、
このインデックス値として予め対戦相手が決められ、
これを文字変数のcnvvs変数で管理している。
そのため、このcnvvs変数を交流戦用に追加必要だが、
いちいち入力していてはバカらしいので、プログラムでデータ値設定する。
また、管理変数のteamcntは、1日に最大試合数で管理する。
さらにteamidも12球団管理するが、
これもMyLeageとnonMyLeageからプログラムで値を設定する。
【交流戦の場合の勝敗結果】
●勝敗の結果は、対象リーグの参加チームの結果のみを
集計すればいいので、
交流戦の場合には、相手方のチームの勝敗は、無視すればよい。
これは、teamcnt[]で当日の対戦相手をチームIDで管理している。
setSiaiData()関数で、対象試合日の対戦相手のチームIDをセットし、
その試合結果をupdateSiaidata()関数で対応する変数にセットしているので、
この関数を変更すればいいみたい。
これは、、siai,make,kati等の変数で制御しているが、
これがMyLeageの球団数で管理しているので、その値を変えればよい。
【交流戦時の試合表示】
ああーーーー、そうだ、
●交流戦時の試合数は、なんと6試合あるんですね。
今までは、6チームなので、3試合分だった。
画面表示も、3試合でしか考えてなかった。
というか、3試合しか表示は出来ないよね。
いや待て、スクロールしない状態では、3試合分しか表示できないが
スクロールしてしまえば、何試合でも表示可能かな。。。
でも、それだと、やっぱ不便だよね。
接戦の時は、やはり相手の経過が知りたい。
で、考えるより、実際に3試合分増やしてみようとプログラム見たら、
ループ回数を4→7に変えるだけで簡単に増やせそうだ。
ということで、増やして表示させたら、
出来ました!!特にスクロールする必要もない ^^)
ただし、下側に表示領域が増えたので、リンクボタンに勝敗表が
被ってしまったので、重ならないようにIEの場合はCSSを修正してOK。
あとは、ここにちゃんと表示させられるかだ。。
●この4、7という数字は、(3試合+1)、(6試合+1)なんだけど、
これも交流戦の有無で決まる直値なので、これも変数に変えないとね。
さらに、将来、球団数が6チームが7チームとか8チームになって
対応可能なようにしとかないと、また同じこと繰り返すので。。。。
ということで、1日の最大試合数を求める関数を作り、それで上記値を
求めることにした。
●交流戦の場合の予備日については、カッコ付であれば、
雨等で流れた試合の予備日としたが、これが実際に試合が必要な日か
それとも必要でない日かを判断しているが、
この判断のやり方を交流戦の場合は、変えなくちゃいけない。
すなわち、交流戦の各チームとの試合数は決まっていて、
もし雨等で流れれば、再度試合を行うので、
この判断は、MyLeageのチームとの試合数と別に判断する必要有り。
●最後にメインの試合が終了時に、その他球場の試合が終わってないと
強制的に終了させているが、ここはendFlag[]で管理しているが、
これもOnedayMaxGameNoに対応させないとね。
ということで、ペナント競争(2005年版)がやっと出来た。