2007 程式設計比賽 Openfind 大海戰 Openfind Naval Battle 比賽規則 比賽地圖大小暫定為 51x51,地圖無邊界 (從地圖右邊 出去可以從左邊進來) 每個參賽隊伍有 2,000 元的經費 可以買 1 ~ 5 艘船,裝備武器/雷達後,放到地圖上 每艘船每回合可以 攻擊/前進/轉彎/加速/煞車 比賽採用回合制,每個隊伍輪過一次才換下回合
Download ReportTranscript 2007 程式設計比賽 Openfind 大海戰 Openfind Naval Battle 比賽規則 比賽地圖大小暫定為 51x51,地圖無邊界 (從地圖右邊 出去可以從左邊進來) 每個參賽隊伍有 2,000 元的經費 可以買 1 ~ 5 艘船,裝備武器/雷達後,放到地圖上 每艘船每回合可以 攻擊/前進/轉彎/加速/煞車 比賽採用回合制,每個隊伍輪過一次才換下回合
Slide 1
2007 程式設計比賽
Openfind 大海戰
Slide 2
Openfind Naval Battle
比賽規則
比賽地圖大小暫定為 51x51,地圖無邊界 (從地圖右邊
出去可以從左邊進來)
每個參賽隊伍有 2,000 元的經費
可以買 1 ~ 5 艘船,裝備武器/雷達後,放到地圖上
每艘船每回合可以 攻擊/前進/轉彎/加速/煞車
比賽採用回合制,每個隊伍輪過一次才換下回合
比賽一次採用 30 回合,30 回合結束以後算分數
比賽總共打兩次,兩次總分數最高者獲勝
2
Copyright 2006 Openfind Information Technology, Inc.
Slide 3
Openfind Naval Battle
船艦資料
3
大船
(Large)
中船
(Medium)
小船
(Small)
Price
500
300
100
Mobility
4
5
6
Armor
800
500
100
Max Speed 5
7
9
Weapon
全部可使用
砲位
可裝9個武器
16” 砲不能用 16”砲不能用
12”砲不能用
可裝6個武器 可裝3個武器
Copyright 2006 Openfind Information Technology, Inc.
Slide 4
Openfind Naval Battle
Mobility
每艘船每回合有 mobility 可以使用。大船
mobility=4, 中船 mobility=5, 小船 mobility=6
加速每次花費 mobility 1
煞車每次花費 mobility 1
每門砲開火花費 mobility 1
轉彎花費 mobility ceil(current speed/2) ceil
無條件進位。所以船速越高轉彎越困難
Mobility 花完,該回合這艘船將不能再 加速/煞車/轉
彎/開砲
4
Copyright 2006 Openfind Information Technology, Inc.
Slide 5
Openfind Naval Battle
Current Speed
一開始每艘船的速度為 0
速度決定你這次可以往前移動幾格,當然也可以不用移動。
舉例來說,假設目前 current speed=5,船艦可以移
動 0格、1格、2格、3格、4格、5格。
Current speed 越高,轉彎 (45 度)所需要的
mobility 越高。
Current speed 越高,敵人對你的命中率越低。詳見後
面的命中率章節。
加速一次 current speed 加 1
煞車一次 current speed 減 2
5
Copyright 2006 Openfind Information Technology, Inc.
Slide 6
Openfind Naval Battle
移動方向
7
8
4
1
6
9
6
2
3
1. 方向表示使用鍵盤數字
鍵的九宮格
2. 橫的走、直的走、斜著
走通通算一格
3. 轉彎一次轉 45 度。以
左圖為例,目前方向
=4,右轉的話方向=7,
左轉的話方向=1
Copyright 2006 Openfind Information Technology, Inc.
Slide 7
Openfind Naval Battle
雷達
一開始每艘船送 RADAR_3,以自己目前的位置為中心
可以看到 7x7 的地圖範圍
RADAR_5 需要 50 元,可以看到以自己為中心
11x11 的地圖範圍
RADAR_7 需要 100 元,可以看到以自己為中心
15x15 的地圖範圍
RADAR_9 需要 200 元,可以看到以自己為中心
19x19 的地圖範圍
每回合 client 可以從 server 得到整張 map,但是視
野範圍以外的位置通通都是空白的,只能看到自己艦隊所
有雷達可見範圍內的資訊
7
Copyright 2006 Openfind Information Technology, Inc.
Slide 8
Openfind Naval Battle
Armor
當每艘船的 Armor <= 0,這艘船就被擊沉
每艘船購買的時候會送 Armor。大船 800,中船 500,
小船 100
可以花錢買額外 Armor,每點 Armor 花費 0.8 元
可以把原本送的 Armor 賣掉拿錢去買其他裝備,每點
Armor 可以賣 0.8 元
8
Copyright 2006 Openfind Information Technology, Inc.
Slide 9
Openfind Naval Battle
Weapon
價格
9
射程
傷害
武器
命中率
Machine 30
Gun
5” 砲
70
3
30
100%
4
60
90%
8” 砲
120
4
100
80%
12” 砲
180
5
140
70%
16” 砲
250
7
200
55%
Copyright 2006 Openfind Information Technology, Inc.
Slide 10
Openfind Naval Battle
命中率計算
A = 開火的火炮命中率
B = 目標的 current speed
命中率為 A x (30 – B) / 30
*** 每回合每門砲只能開火一次
*** 不能攻擊自己的船艦
假設用 8” 砲打一艘 current speed 為 9 的小船。
80% x (30-9) / 30 = 56%
10
Copyright 2006 Openfind Information Technology, Inc.
Slide 11
Openfind Naval Battle
大船砲位
0
1
1. 大船最多可以安裝九門砲,
如左圖
2
5
3
6
4
7
2. 大船可以使用所有的武器
8
11
Copyright 2006 Openfind Information Technology, Inc.
Slide 12
Openfind Naval Battle
中船砲位
0
1. 中船最多可以安裝六門砲,
如左圖
2
5
3
6
2. 中船不可以使用 16” 砲
8
12
Copyright 2006 Openfind Information Technology, Inc.
Slide 13
Openfind Naval Battle
小船砲位
0
2
1. 小船最多可以安裝三門砲,
如左圖
5
2. 小船不可以使用 16” 砲
3. 小船不可以使用 12” 砲
13
Copyright 2006 Openfind Information Technology, Inc.
Slide 14
Openfind Naval Battle
遊戲起始
一開始由 Client 把船艦資訊以及配置資訊上傳到
Server 端。
每個隊伍必須將自己的艦隊放在一個 5x5 大小的區域中
首先 Server 會 random 將每支隊伍平均放在地圖上
Server 等所有隊伍連上後開始運作
14
Copyright 2006 Openfind Information Technology, Inc.
Slide 15
Openfind Naval Battle
分數計算
攻擊得分為 1.5 倍。假設攻擊命中打掉對方 100 點
Armor,將可以得到 150 分
擊沉得分
– 擊沉大船額外 +500分
– 擊沉中船額外 +300分
– 擊沉小船額外 +100分
30 回合到的時候,將會把目前倖存船艦換回錢,武器/
雷達直接換算,Armor * 0.8 換算。這些錢也是分數
一開始沒有花掉的錢,也算成分數
兩次比賽總分數最高者獲勝
15
Copyright 2006 Openfind Information Technology, Inc.
Slide 16
2007 程式設計比賽
Openfind 大海戰
Programming Guide
Slide 17
Openfind Naval Battle
Programs you get
Server
1. bin/Open Naval Battle.exe Server
program
2. bin/server.conf You must set IP/port
3. hdebug.conf * means all the programs
will print out debug logs
17
Copyright 2006 Openfind Information Technology, Inc.
Slide 18
Openfind Naval Battle
Programs you get
Common
1. The common library for both server and
client。Supposedly, you should NOT modify
those existing programs
18
Copyright 2006 Openfind Information Technology, Inc.
Slide 19
Openfind Naval Battle
Programs you get
Client
1. A MFC project (Client.dsw)
2. In Client.cpp,
1.
2.
3.
4.
5.
6.
7.
19
BuildFleet Initialize your 5x5 blocks
Affordable Check your budget
GetServerConf Read server IP/port from stdin
InitClient Use your team name to get corresponding team
ID and the map size
GameStart Wait for the OP_code from server, and act
according to the OP_code
InitTurn For each turn, you can re-download map from
server
TakeAction Your move
Copyright 2006 Openfind Information Technology, Inc.
Slide 20
Openfind Naval Battle
Action validation
Client has some validation functions to
check your moves.
If a move is illegal, those validation
functions should return FALSE. Please
check debug log for error.
If an illegal move is sent to the server,
your team will be kicked out. All your ships
will disappear, and your score will be 0.
20
Copyright 2006 Openfind Information Technology, Inc.
Slide 21
Openfind Naval Battle
Important structure
Please check /common/gameset.h
SHIP_INFO A ship
INIT_BLOCK For initial 5x5 block
CELL_INFO The world map
21
Copyright 2006 Openfind Information Technology, Inc.
Slide 22
Openfind Naval Battle
Program download
demo.rar
OpenNavalBattle.rar
If there is any bug, please report to
Hector/Phantom (ext 364)
22
Copyright 2006 Openfind Information Technology, Inc.
Slide 23
Openfind Naval Battle
Q&A
作者
Hector Chou
Sam Liu
Phantom Weng
顧問
Andric Yeh
23
Copyright 2006 Openfind Information Technology, Inc.
2007 程式設計比賽
Openfind 大海戰
Slide 2
Openfind Naval Battle
比賽規則
比賽地圖大小暫定為 51x51,地圖無邊界 (從地圖右邊
出去可以從左邊進來)
每個參賽隊伍有 2,000 元的經費
可以買 1 ~ 5 艘船,裝備武器/雷達後,放到地圖上
每艘船每回合可以 攻擊/前進/轉彎/加速/煞車
比賽採用回合制,每個隊伍輪過一次才換下回合
比賽一次採用 30 回合,30 回合結束以後算分數
比賽總共打兩次,兩次總分數最高者獲勝
2
Copyright 2006 Openfind Information Technology, Inc.
Slide 3
Openfind Naval Battle
船艦資料
3
大船
(Large)
中船
(Medium)
小船
(Small)
Price
500
300
100
Mobility
4
5
6
Armor
800
500
100
Max Speed 5
7
9
Weapon
全部可使用
砲位
可裝9個武器
16” 砲不能用 16”砲不能用
12”砲不能用
可裝6個武器 可裝3個武器
Copyright 2006 Openfind Information Technology, Inc.
Slide 4
Openfind Naval Battle
Mobility
每艘船每回合有 mobility 可以使用。大船
mobility=4, 中船 mobility=5, 小船 mobility=6
加速每次花費 mobility 1
煞車每次花費 mobility 1
每門砲開火花費 mobility 1
轉彎花費 mobility ceil(current speed/2) ceil
無條件進位。所以船速越高轉彎越困難
Mobility 花完,該回合這艘船將不能再 加速/煞車/轉
彎/開砲
4
Copyright 2006 Openfind Information Technology, Inc.
Slide 5
Openfind Naval Battle
Current Speed
一開始每艘船的速度為 0
速度決定你這次可以往前移動幾格,當然也可以不用移動。
舉例來說,假設目前 current speed=5,船艦可以移
動 0格、1格、2格、3格、4格、5格。
Current speed 越高,轉彎 (45 度)所需要的
mobility 越高。
Current speed 越高,敵人對你的命中率越低。詳見後
面的命中率章節。
加速一次 current speed 加 1
煞車一次 current speed 減 2
5
Copyright 2006 Openfind Information Technology, Inc.
Slide 6
Openfind Naval Battle
移動方向
7
8
4
1
6
9
6
2
3
1. 方向表示使用鍵盤數字
鍵的九宮格
2. 橫的走、直的走、斜著
走通通算一格
3. 轉彎一次轉 45 度。以
左圖為例,目前方向
=4,右轉的話方向=7,
左轉的話方向=1
Copyright 2006 Openfind Information Technology, Inc.
Slide 7
Openfind Naval Battle
雷達
一開始每艘船送 RADAR_3,以自己目前的位置為中心
可以看到 7x7 的地圖範圍
RADAR_5 需要 50 元,可以看到以自己為中心
11x11 的地圖範圍
RADAR_7 需要 100 元,可以看到以自己為中心
15x15 的地圖範圍
RADAR_9 需要 200 元,可以看到以自己為中心
19x19 的地圖範圍
每回合 client 可以從 server 得到整張 map,但是視
野範圍以外的位置通通都是空白的,只能看到自己艦隊所
有雷達可見範圍內的資訊
7
Copyright 2006 Openfind Information Technology, Inc.
Slide 8
Openfind Naval Battle
Armor
當每艘船的 Armor <= 0,這艘船就被擊沉
每艘船購買的時候會送 Armor。大船 800,中船 500,
小船 100
可以花錢買額外 Armor,每點 Armor 花費 0.8 元
可以把原本送的 Armor 賣掉拿錢去買其他裝備,每點
Armor 可以賣 0.8 元
8
Copyright 2006 Openfind Information Technology, Inc.
Slide 9
Openfind Naval Battle
Weapon
價格
9
射程
傷害
武器
命中率
Machine 30
Gun
5” 砲
70
3
30
100%
4
60
90%
8” 砲
120
4
100
80%
12” 砲
180
5
140
70%
16” 砲
250
7
200
55%
Copyright 2006 Openfind Information Technology, Inc.
Slide 10
Openfind Naval Battle
命中率計算
A = 開火的火炮命中率
B = 目標的 current speed
命中率為 A x (30 – B) / 30
*** 每回合每門砲只能開火一次
*** 不能攻擊自己的船艦
假設用 8” 砲打一艘 current speed 為 9 的小船。
80% x (30-9) / 30 = 56%
10
Copyright 2006 Openfind Information Technology, Inc.
Slide 11
Openfind Naval Battle
大船砲位
0
1
1. 大船最多可以安裝九門砲,
如左圖
2
5
3
6
4
7
2. 大船可以使用所有的武器
8
11
Copyright 2006 Openfind Information Technology, Inc.
Slide 12
Openfind Naval Battle
中船砲位
0
1. 中船最多可以安裝六門砲,
如左圖
2
5
3
6
2. 中船不可以使用 16” 砲
8
12
Copyright 2006 Openfind Information Technology, Inc.
Slide 13
Openfind Naval Battle
小船砲位
0
2
1. 小船最多可以安裝三門砲,
如左圖
5
2. 小船不可以使用 16” 砲
3. 小船不可以使用 12” 砲
13
Copyright 2006 Openfind Information Technology, Inc.
Slide 14
Openfind Naval Battle
遊戲起始
一開始由 Client 把船艦資訊以及配置資訊上傳到
Server 端。
每個隊伍必須將自己的艦隊放在一個 5x5 大小的區域中
首先 Server 會 random 將每支隊伍平均放在地圖上
Server 等所有隊伍連上後開始運作
14
Copyright 2006 Openfind Information Technology, Inc.
Slide 15
Openfind Naval Battle
分數計算
攻擊得分為 1.5 倍。假設攻擊命中打掉對方 100 點
Armor,將可以得到 150 分
擊沉得分
– 擊沉大船額外 +500分
– 擊沉中船額外 +300分
– 擊沉小船額外 +100分
30 回合到的時候,將會把目前倖存船艦換回錢,武器/
雷達直接換算,Armor * 0.8 換算。這些錢也是分數
一開始沒有花掉的錢,也算成分數
兩次比賽總分數最高者獲勝
15
Copyright 2006 Openfind Information Technology, Inc.
Slide 16
2007 程式設計比賽
Openfind 大海戰
Programming Guide
Slide 17
Openfind Naval Battle
Programs you get
Server
1. bin/Open Naval Battle.exe Server
program
2. bin/server.conf You must set IP/port
3. hdebug.conf * means all the programs
will print out debug logs
17
Copyright 2006 Openfind Information Technology, Inc.
Slide 18
Openfind Naval Battle
Programs you get
Common
1. The common library for both server and
client。Supposedly, you should NOT modify
those existing programs
18
Copyright 2006 Openfind Information Technology, Inc.
Slide 19
Openfind Naval Battle
Programs you get
Client
1. A MFC project (Client.dsw)
2. In Client.cpp,
1.
2.
3.
4.
5.
6.
7.
19
BuildFleet Initialize your 5x5 blocks
Affordable Check your budget
GetServerConf Read server IP/port from stdin
InitClient Use your team name to get corresponding team
ID and the map size
GameStart Wait for the OP_code from server, and act
according to the OP_code
InitTurn For each turn, you can re-download map from
server
TakeAction Your move
Copyright 2006 Openfind Information Technology, Inc.
Slide 20
Openfind Naval Battle
Action validation
Client has some validation functions to
check your moves.
If a move is illegal, those validation
functions should return FALSE. Please
check debug log for error.
If an illegal move is sent to the server,
your team will be kicked out. All your ships
will disappear, and your score will be 0.
20
Copyright 2006 Openfind Information Technology, Inc.
Slide 21
Openfind Naval Battle
Important structure
Please check /common/gameset.h
SHIP_INFO A ship
INIT_BLOCK For initial 5x5 block
CELL_INFO The world map
21
Copyright 2006 Openfind Information Technology, Inc.
Slide 22
Openfind Naval Battle
Program download
demo.rar
OpenNavalBattle.rar
If there is any bug, please report to
Hector/Phantom (ext 364)
22
Copyright 2006 Openfind Information Technology, Inc.
Slide 23
Openfind Naval Battle
Q&A
作者
Hector Chou
Sam Liu
Phantom Weng
顧問
Andric Yeh
23
Copyright 2006 Openfind Information Technology, Inc.