忍者ブログ
[606] [607] [609] [608] [610] [611] [240] [241] [243] [242] [245]

 プロ野球の公式戦の試合形式は、
毎年のようにいろいろ変えてるんだけど、
それに応じて、ゲームの方も対応していかないといけない。

しかし、以下に関しては、

     ・総試合数、
     ・延長戦の回数、
     ・再試合の有無

既に対応してあるので、どういう風に変更されても、ビクともしないが、

今回の交流戦に関しては、どこをどう直していいか、頭に出てこない。
というより、プログラムそのものを忘れているので、
思い出さなきゃならないけど、面倒だーーーー。。。

で、これを改良しないといけないが、
こういう改良点の内容をどこかに書いておかないと、
また次にとんでもない変更が決められると、
またプログラム変更するのに大変なことになる。

今までは、書いておくにも、ソースに長たらしく書けないし、
別に専用の設計書を書くなんてとても凹むし。

ということで、どこをどう直したかを、これからはブログに書いておこう。
これは、いい考えですね。^^)

ということで、ちょっとプログラムを眺めてみた感じでは、

【管理試合数の変更】

ポイントは、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年版)がやっと出来た。

拍手[0回]

PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


トラックバック
この記事にトラックバックする:
忍者ブログ [PR]
カレンダー
03 2024/04 05
S M T W T F S
1
8 9 10 12
16 20
21 22 23 24 25 26 27
28 29 30
フリーエリア
[-]最新トラックバック
プロフィール
HN:
7maru
性別:
非公開
自己紹介:

バーコード
ブログ内検索
[+]アーカイブ
アクセス解析