Presentation is loading. Please wait.

Presentation is loading. Please wait.

2010 程式設計比賽 Railroad Tycoon.

Similar presentations


Presentation on theme: "2010 程式設計比賽 Railroad Tycoon."— Presentation transcript:

1 2010 程式設計比賽 Railroad Tycoon

2 The Map

3 比賽規則 有三台火車(車速、載運量都不同) 總共 10 個都市各有特產 想辦法載貨到別的都市去賣, 載越遠賣越貴
火車燃料免費、貨物免費,但貨物賣價會隨著時間降低 總共 10 場,總積分最高者獲勝。計分方式如後面說明

4 火車 A -- TGV 速度 360KM / Hour 2 節車廂

5 火車 B -- AMD-103 速度 180KM / Hour 5 節車廂

6 火車 C -- Class E111 速度 120KM / Hour 10 節車廂

7 貨物運送價目表 (不可賣給產地) 收購價格/車 Birmingham 伯明罕(0) London 倫敦(1) Paris 巴黎(2)
Amsterdam 阿姆斯特丹(3) Frankfurt 法蘭克福(4) Berlin 柏林(5) Munich 慕尼黑(6) Vienna 維也納(7) Warsaw 華沙(8) Moscow 莫斯科(9) Coal(煤) 75 250 522 577 840 810 1020 1235 2030 Mail(郵件) 60 140 350 395 570 530 744 875 1485 Wine(葡萄酒) 200 180 220 375 670 1250 Tulip(鬱金香) 310 160 335 455 435 935 Computer(電腦) 464 396 374 120 262 960 Steel(鋼鐵) 672 575 241 720 Beer(啤酒) 560 480 457 108 235 126 283 785 Wood(木材) 740 477 436 236 218 144 603 Amber(琥珀) 980 805 660 440 370 315 Oil(石油) 2430 2230 1830 1456 1335 1008 1225 925 615

8 都市連結表 (大於零代表有路可通) 距離(KM) Birmingham 伯明罕(0) London 倫敦(1) Paris 巴黎(2)
Amsterdam 阿姆斯特丹(3) Frankfurt 法蘭克福(4) Berlin 柏林(5) Munich 慕尼黑(6) Vienna 維也納(7) Warsaw 華沙(8) Moscow 莫斯科(9) Birmingham -1 180 London 420 Paris 540 660 Amsterdam 600 Frankfurt 360 Berlin 720 Munich Vienna 480 Warsaw 1200 Moscow

9 貨物價格遞減設定 每經過兩小時,價格降低 5%
舉例來說,一車 Wine 送到 Moscow原本可得到 1,250。如果從貨物出現到送達總過花了5小時20分 (超過兩小時x2),收入剩下 1,250 x 90% = 1,125 同上例,如果花了 16小時40分送達 (超過兩小時x8),收入剩下1,250 x 60% = 750 超過 40小時貨物將完全不值錢

10 火車行為 起始三台火車A,B,C 可以選擇各放在不同的都市 系統為回合制,回合時間刻度為10分鐘。每回合每台火車可以決定要執行下列行為
Stall(1)  剛好停在都市的時候可以選擇本回合stall,此回合該火車不能再做其他事情 Move(2)  選擇從都市S 開到D,S 跟 D 必須相鄰,中間不能停下不能回頭,直到抵達為止 Sell(3)  剛好停在都市的時候可以選擇 Sell,賣出車上的貨物到此都市。可以跟 Load在同一回合執行 Load(4)  剛好停在都市的時候可以選擇 Load,從都市現有貨物倉庫中裝載貨物到火車上。可以跟 Sell在同一回合執行 每回合 Output 中火車 A,B,C 一定都要有動作

11 計分方式 10 場比賽,每場比賽最高分得到積分 10.00 分
假設某場最高金額 N (得到 10.00分), 其他人分別賺到 M2, M3, ….. M7, 則每組積分為 (M2 / N)*10.00, (M3 / N)*10.00, (M4 / N)*10.00, 依此類推 分數算到小數點以下兩位 10 場比賽總積分最高者獲勝

12 I/O 以及 錯誤處罰 總共有 Input01.txt .. Input10.txt
程式讀入 Input01.txt,產生 Output01.txt,依此類推 Checker程式讀入 (Input01.txt, Output01.txt),產生本場比賽分數(賺多少錢,算到小數點以下兩位),依此類推 發生任何系統錯誤,該場比賽 0 分 Checker debug log 放在 debug.txt

13 Railroad Tycoon Programming Guide

14 Input file format @T:DDD:HH:MM 每回合第一行,代表時間 @[0-9]:n,n,n,n,n
@E 每回合的最後一行,代表回合結束 @F 整個Input最後一行,代表Finish Sample @T:001:00:00 @4:1,1,1,1,1 @9:2,2,2 @E @T:001:00:10 @T:001:00:20 @2:3,3,3 @F

15 Output file format @I:T1,T2,T3 Sample 起始A,B,C三台火車各放在T1,T2,T3 @I:4,9,1
@T:DDD:HH:MM 每回合第一行,代表時間 @[A-C]:[1-4],p1,p2,p3… [A-C]為火車代號,[1-4]為action @A:1 (代表火車A此回合 Stall) @B:2,2,3 (代表火車B此回合從 London(2) Move to Paris(3)) @C:3,1,1,4 (代表火車C此回合賣出三車貨物, 貨物ID各為1,1,4) @C:4,6,6 (代表火車C此回合裝載兩車貨物, 貨物ID各為6,6) @E 每回合的最後一行,代表回合結束 Sample @I:4,9,1 @T:001:00:10 @A:4,1,1 @B:2,9,8 @C:1 @E @T:001:00:20 @A:2,4,2

16 Output 可能發生的主要錯誤 NONE_ACTION ILLEGAL_STALL ILLEGAL_MOVE ILLEGAL_SELL
每回合每台火車必須要從 Stall(1), Move(2), Sell(3), Load(4) 選擇事情來做 ILLEGAL_STALL 開車開到一半還沒到站卻選擇 Stall 本回合火車已經執行過其他 action, 卻又選擇 Stall ILLEGAL_MOVE 未指定 Source->Destination, 或是 S->D 沒路可以通 前回合已經指定執行從 S1->D1, 本回合卻另外指定 S2->D2 火車在車站已經執行過 Stall 或是 Load/Sell, 卻又選擇 Move ILLEGAL_SELL 指定賣出的貨物編號不存在 火車沒停在車站就想 Sell 火車在車站已經執行過 Stall 或 Move, 卻又選擇 Sell ILLEGAL_LOAD 指定裝載的貨物編號不存在, 或是火車已經滿了 火車沒停在車站就想 Load 火車在車站已經執行過 Stall 或 Move, 卻又選擇 Load

17 畫面顏色代表意義 黑 貨物出現 0 ~ 4小時 (剛剛出現) 紫 貨物出現 4 ~ 8 小時 靛 貨物出現 8 ~ 12 小時
黑 貨物出現 0 ~ 4小時 (剛剛出現) 紫 貨物出現 4 ~ 8 小時 靛 貨物出現 8 ~ 12 小時 淺藍 貨物出現 12 ~ 16 小時 淺綠 貨物出現 16 ~ 20 小時 黃 貨物出現 20 ~ 24 小時 橘黃 貨物出現 24 ~ 28 小時 橙 貨物出現 28 ~ 32 小時 紅 貨物出現 32 ~ 36 小時 (即將過期) 灰 貨物出現 36 ~ 40 小時 (即將過期)

18 黑心 tips 三種不同類型的火車是否該有三種完全不同的策略? 火車起始位置要如何安排,看一開始出現的貨物位置?
沒事做的火車是否預先開往等等會出現貨物的都市? 時間快到的時候找都市就近賣掉? 找等等會出貨物的都市當作目的地去賣東西? 三台火車協調避免互相搶貨物 走越遠賣越多錢,但是如果中間有都市可以賣出並且買入,是否可以賺更多 三個成員各寫一種策略,找最高分的結果交出 手工刻出 output.txt !! 讓別組的程式莫名消失 (Jonas 建議的)

19 Railroad Tycoon Sample Code

20 Strategy 每台車只固定負責運送特定城市的貨物到其它城市販售。
檢查所負責的城市是否有貨物產生,如果有,則前往該城市將貨物運至所指定的城市販售。 待貨物銷售完成後,檢查是否依舊有貨物要銷售。如果有貨物需要運送,則前往該城市載運貨物;如果沒有的話,則停留在該城市。

21 Program Flow 主程式 初始化相關環境 (InitMyTrainEnv)
輸出 Train 起始的城市位置 (OutTrainInitCity) 讀取每回合的 input 資訊 每回合一開始先將城市中不值錢的貨物移除 更新城市該回合所產生的貨物 輸出每回合的 train 的動作 (OutTrainAction) 截止

22 Program Flow OutTrainAction 依序進行 TrainA, TrainB, TrainC 動作輸出
依 Train 狀況來進行動作 (GetMyTrainAction) 是否移動中: Yes  持續保持移動 是否有特定城市需要前往:Yes  前往該城市,No  檢查是否有新貨物產生,如果有的話,則前往該城市載貨,否則則保持不動。 是否抵達該特定城市 : Yes  進行貨物的 Sell or Load,No  持續前往該目的地的城市 輸出該 Train 的動作

23 Common Function InitTrainStatus MoveTrain Income
int trainNo, int cityNo 初始化 Train 的位置及狀態 MoveTrain int trainNo, int source, int dest 移動列車 Income const char* sellTime, int sellCityNo, int sellCargoId 售販該貨物所獲得的錢

24 Common Function SellTrainCarriage GetCityCargo LoadTrainCarriage
int trainNo, int trainCarriageIndex 銷售列車上的貨物 GetCityCargo int cityNo 取得城市中的貨物 LoadTrainCarriage int trainNo, int cargoId, int carriageIndex 將貨物載入到列車中

25 Source File List main.c 主程式,讀取 input 檔案及城市貨物的更新 common.inl / common.h 常用的函數 sample.c 相關策略的主程式 global.h 遊戲相關的設定及全域變數

26 有任何疑問請找 Andric Phantom


Download ppt "2010 程式設計比賽 Railroad Tycoon."

Similar presentations


Ads by Google