將撞球比賽的抽籤與賽程安排做自動化及網頁化

前陣子朋友拉我進了一個地方的撞球社團,這個社團每個月都會舉辦固定的比賽,比賽前的前置作業,像是抽籤或是畫賽程圖這些實在滿浪費時間的。而且這比賽通常「滿早」就開始,所以如果抽籤結果可以前一天知道,不在第一輪的晚點到就好了?於是,我花了點時間寫出這套系統方便使用。

系統特點

  • 以2^n個選手的賽制為主,不足人數會自動補上空籤。
  • 人數理論上無上限,但為了不讓賽程表過於龐大,限制在128人,下限是4人。
  • 支援團體籤,團體人數在不超過半數時,人數最大的團體成員在第一輪的比賽絕對不會碰面。
  • 隨機抽籤,但絕對分布均勻。分布均勻的意思是若將籤表分成2^n等分,每個等分的選手數量最多差1位。
  • 視覺化的賽程圖設計,哪些場次可以開始比賽,哪些場次正在比賽,都可以看得很清楚。
  • 支援將比分紀錄於賽程圖上。
  • 輸入各場得局數後自動判定勝負,並將選手晉級到下一個位置。
  • 支援單敗與雙敗賽制,第一輪之後到敗部的選手會到籤表的另一邊。
  • 有寫紀錄檔,可以記錄或讀取每一輪比賽的最新結果。

系統首頁是給每個使用者(例如:劍客聯盟)各自專屬的頁面。首頁分成二個部份,分別是「建立一個全新的賽程」與「選擇一個已經存在的賽程」。使用者前的招呼語有數種國家的早安語亂數選擇,只是我的無聊當有趣。

在「建立一個全新的賽程」中,「選擇比賽球種」、「選擇比賽機制」和「輸入選手名單」為必填欄位,影響到下面黃底的賽事名稱與整個賽程的安排。例子中的選手姓名是亂數取的,若有雷同,純屬虛構。

輸入選手名單的規則為

一位選手列一行,姓名與局數以空格( )或半形逗點(,)分開,例如:

呂宗勳 6
呂宗勳       6
呂宗勳,7
        呂宗勳 6

選手姓名前如果有報名順序可以保留,但請以半形句點(.)分開,半形句點前的內容會被捨棄。有沒有照順序排也不重要,例如:

1. 呂宗勳 6
2 .呂宗勳,7
20            .呂宗勳 8

「自訂賽程文字」並非必填項目,僅用於潤飾賽程名稱。

第二部分是可以選擇過去已經建立的比賽,避免瀏覽器被關掉或是其他狀況,可以「讀取存檔」。

建立或讀取完賽程後就到賽程控制的頁面,上部分可以控制賽程,下部分是賽程圖,賽程圖會隨時更新,且支援點擊放大。

編輯場次的下拉式選單中,只會列出「可開始比賽」與「比賽進行中」的場次。

賽程圖中的藍色框是「可開始比賽」,選擇場次並安排桌號後,點擊「更新比賽資料」,狀態就會變成「比賽進行中」。

賽程圖中的紅色框是「比賽進行中」,將選手的得局數從下拉式選單中選取完後,會自動判斷勝負,並將選手晉級到下一個位置。賽程圖的右邊是勝部,左邊是敗部。

雙敗賽事中,掉到敗部的選手會到籤表的另一頭,這個例子是場次5的輸家到了場次12的5L的位置。

敗部冠軍會回到勝部跟勝部冠軍比賽。有些比賽會比到八強後改單敗,那其實就是打到勝部取四個,敗部取四個再另開一個八人單敗的新賽程就好。

當所有場次都結束後,就沒有場次可編輯,狀態變成「所有比賽結束」。

其他例子,16人單敗。

64人雙敗

64人雙敗的大表,太大了,一個視窗都塞不下。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端