1. CODEVS4.0
1.M ctiêuc a game:ụ ủ
Mục tiêu của game này là điều khiển quân của mình tấn công, hạ gục thành trì của đối
phương. Bạn cần tạo lập một chương trình (AI) quyết định chiến thuật sinh quân, di chuyển
quân mình trong game một cách hợp lý để giành chiến thắng.
2. Cácthu t ng c s d ngtronggameậ ữ đượ ử ụ
2.1. Bản đồ
Bản đồ là một lưới ô vuông 100x100. Ô trên cùng có tọa độ (x,y) = (0,0). Trục ngang là trục X,
trục dọc là trục Y.
Các ô trong bản đồ được quy định 2 trạng thái như sau:
+ Ô đồng bằng: Là ô bình thường, không có tác dụng gì đặc biệt. Bạn có thể thao tác tự do đối
với những ô này.
+ Ô tài nguyên: Được bố trí ở các vị trí khác nhau trên bản đồ. Khi một worker đi vào ô tài
nguyên, số lượng tài nguyên của quân mình sẽ được tăng lên. Không có việc cạn kiệt tài
nguyên ở ô tài nguyên (ô tài nguyên không biến mất trong suốt quá trình game diễn ra).
2.2. Các nhân vật
- Worker: Có khả năng di chuyển. Nhiệm vụ: thu thập tài nguyên, xây dựng căn cứ quân đội,
xây dựng làng.
- Knight, Fighter, Assassin: Là 3 loại quân dùng để chiến đấu trong game, có khả năng di
chuyển. Đặc tính cụ thể của mỗi loại quân như sau:
+ Knight: mạnh khi đối đầu với Assassin, yếu khi đối đầu với Fighter
+ Fighter: Mạnh khi đối đầu với Knight, yếu khi đối đầu với Assassin
+ Assassin: Mạnh khi đối đầu với Fighter, yếu khi đối đầu với Knight
2.3. Các kiến trúc
- Castle (Lâu đài)
Mỗi bên sẽ có một lâu đài được đặt ở 2 phía trên bản đồ (cụ thể về vị trí đặt lâu đài được giải
thích ở phần sau). Người chơi giành chiến thắng là người chơi phá hủy được lâu đài của đối
phương. Lâu đài cũng là nơi sản sinh ra worker (mỗi lần sinh một worker sẽ tốn một lượng tài
nguyên nhất định).
- Village (làng)
Nơi sản sinh worker
2. - Base (căn cứ)
Nơi sản sinh ra các loại quân phục vụ chiến đâu: Knight, Fighter, Assassin
2.4. Unit
Mỗi một nhân vật hoặc một kiến trúc trong game được xem như 1 unit.
3. Gameflow
Người chơi sẽ sử dụng AI của mình để chiến đấu với AI của đối phương (Enemy AI). Một game
sẽ có 24 stage. Có 8 loại Enemy AI được chuẩn bị. Người chơi sẽ phải chiến đấu với mỗi
Enemy AI, theo thứ tự ngẫu nhiên, mỗi Enemy AI chiến đấu 3 lần.
3.1. Stage
Mỗi stage được tiến hành theo các turn. Một stage có tối đa 1000 turn. Việc chuyển đến stage
tiếp theo không phụ thuộc vào kết quả của stage trước.
3.2. Turn
1 turn sẽ các Phase như sau:
- Phase chỉ thị
- Phase di chuyển và sinh quân
- Phase chiến đấu
- Phase loại bỏ unit
- Phase thu thập tài nguyên
- Phase kết thúc
3.3. Giải thích về các Phase
3.3.1. Phase chỉ thị
Các unit sẽ nhận chỉ thị hành đồng từ player. Trong lúc chờ đợi chỉ thị có tác dụng thì game sẽ
chuyển sang phase tiếp theo. Cụ thể về input format sẽ được giải thích ở phía dưới.
3.3.2. Phase di chuyển và sinh sản
Mỗi unit thì có 3 loại hành động dưới đây:
1. Di chuyển
2. Sinh quân
3. Không làm gì cả
Mỗi loại unit sẽ có quy định về quyền hạn thực hiện hành động. (Bảng 1)
3. Di chuyển:
Các nhân vật có thể di chuyển theo hướng trên dưới trái phải. Khoảng cách cho mỗi lần di
chuyển là 1 ô trên bản đồ. Nhân vật không thể di chuyển ra ngoài bản đồ. Nếu nhân vật nhận
được lệnh di chuyển đến khu vực ở ngoài bản đồ thì lệnh đó không được thực hiên và nhân vật
giữ nguyên vị trí hiện tại.
Sinh quân:
Tùy vào mỗi loại unit mà có khả năng sinh ra các unit khác. Unit vừa được sinh ra không thể di
chuyển ngay trong turn tiếp theo. Cụ thể được mô tả ở phần 4.2
Không làm gì cả:
Trong trường hợp player không chỉ thị hành động cho unit, thì unit đó không thực hiện hành
động gì cả mà chỉ đứng im tại vị trí hiện tại.
Bảng 1: Khả năng hành động của các unit
Unit Kh năng di chuy nả ể Kh năng sinh quânả
Worker ○ ○ (Làng, căn cứ quân sự)
Knight ○ x
Fighter ○ x
Assasin ○ x
Lâu đài x ○ (Worker)
Làng x ○ (Worker)
Căn cứ x ○ (Knight, Fighter, Assassin)
3.3.3. Phase chiến đấu
Khi quân của mình và quân của đối phương đi vào khu vực giao chiến thì cuộc chiến được tự
động thực hiện. Mỗi unit sẽ được quy định một mức HP. Cách tính toán damage được mô tả ở
mục 4.4. Ngoài ra, những unit được sinh ra tại phase di chuyển và sinh quân cũng có thể
tham gia chiến đấu.
3.3.4. Phase loại bỏ unit
Tất cả những unit sau khi tham chiến sẽ được đánh giá xem có bị loại bỏ hay không. Những
unit có HP < 0 sẽ bị loại bỏ ra khỏi bản đồ.
4. 3.3.5. Phase thu thập tài nguyên
Việc thu thập tài nguyên được diễn ra ở phase này. Chi tiết về thu thập tài nguyên mời các
bạn tham khảo ở mục 4.5.
3.3.6. Phase kết thúc
Sau khi tất cả các xử lí được hoàn thành thì sẽ xem xét thực hiện phase kết thúc. Điều kiện để
kết thúc được ghi chi tiết ở phần sau. Nếu không đủ điều kiện để kết thúc thì sẽ chuyển sang
turn tiếp theo, bắt đầu thực hiện lại từ phase chỉ thị.
3.4. Điều kiện kết thúc
Tại phase kết thúc, nếu 1 trong 2 điều kiện dưới đây thỏa mãn thì stage sẽ kết thúc
• HP của lâu đài về 0, lâu đài bị remove khỏi bản đồ tại phase loại bỏ unit.
•Số lượng turn vượt MAX turn cho phép.
3.5. Phân định thắng thua
Người chơi sẽ được phân định thắng, thua hoặc hòa dựa vào các điều kiện như sau:
Thắng:
• HP lâu đài của đối phương về 0
Thua:
• HP lâu đài của mình về 0
Draw:
• HP lâu đài của mình và đối phương đều > 1 nhưng stage đã vượt quá 1000 turn
• HP lâu đài của mình và đối phương về 0 trong cùng 1 turn
4. Chiti t n i dungGameế ộ
4.1 Trạng thái đầu tiên của game
Khi bắt đầu mỗi màn chơi, mỗi người chơi sẽ có 1 lâu đài và 5 worker. Lâu đài của bên mình
sẽ được sinh ở một vị trí ngẫu nhiên trong khoảng 40 x 40 tính từ gốc bản đồ vị trí (0, 0). Lâu
đài của Enemy AI cũng sẽ được sinh ra ở một vị trí ngẫu nhiên trong khoảng 40 x 40 tính từ vị
trí (99, 99).
Các ô tài nguyên cũng sẽ được sinh ra ở các vị trí ngẫu nhiên. Chia nửa bản đồ thì mỗi bên
sẽ có 10 ô tài nguyên. Với những ô tài nguyên thì không được đăt thêm unit nào vào đó (xem
hình vẽ bên dưới).
5. 4.2 Sinh Unit
Khi muốn sinh unit thì phải chỉ ra unit muốn sinh thuộc loai nào. Vị trí của unit mới sinh sẽ
trùng với vị trí của unit sinh ra unit đó. Trong 1 turn thì chỉ được sinh 1 unit (làng, quân,
worker ....)., không giới han địa điểm sinh unit và trong cùng 1 ô có thể sinh nhiều unit (trừ ô
tài nguyên không được sinh unit vào đó). Và đặc biệt phải chú ý là vì kiến trúc (làng, căn cứ
quân sự, lâu đài) cũng là 1 unit nên 1 ô có thể sinh được nhiều kiến trúc. Ngoài ra, trong 1 ô
có thể đặt đươc cả kiến trúc của mình và của AI (Làng và căn cứ quân sự vẫn có thể xin được
worker, quân như bình thường).
Việc sinh unit sẽ tốn tài nguyên. Nếu tài nguyên không đủ thì viêc sinh unit sẽ thất bại. Lượng
tài nguyên sử dụng để sinh unit hiển thị trong bảng số 2. Unit đã đươc sinh ở turn trước vẫn có
thể sinh được ở turn sau (2 turn liên tiếp có thể sinh cùng loại unit). Trong 1 stage, với mỗi
unit được sinh ra (không phân biệt là của bên mình hay AI) sẽ được đánh số tuần tự từ 1 đến
20000 và gán là id của unit đó.
6. 4.3 Chỉ số của unit
Mỗi một unit sẽ có các chỉ số sau: máu (HP), attack range (tầm tấn công), vision range (tầm
nhìn) và attack damage (khả năng tấn công)
4.3.1 HP (máu)
Mỗi khi bị tần công thì máu của unit sẽ giảm xuống. Khi mà máu của unit về 0 thì phase loại
bỏ unit sẽ diễn ra và unit đó sẽ bị xóa khỏi bản đồ. Lượng máu tối đa cũng mỗi unit cũng khác
nhau và được hiển thị trong bảng 2 dưới đây. Unit sẽ đầy máu ở thời điểm mới sinh ra và khi
bắt đầu trận đấu. Khi mà unit bị mất máu thì không thể phục hồi HP được.
4.3.2 Attack range (tầm tấn công)
Các unit sẽ tự động đánh unit của đối phương nếu trong tầm tần công của nó. Tầm tấn công
của các unit được hiển thị trong bảng 2.
4.3.3 Visible range (tầm nhìn)
Giống như trong đế chế (ko mở bản đồ) thì vị trí của quân địch cũng như vị trí của các mỏ tài
nguyên sẽ không được hiển thị, chúng chỉ được nhìn thấy nếu như trong tầm nhìn của unit
bên mình. Dù chiếm được ô tài nguyên thì cũng không có tầm nhìn của vùng xung quanh ô tài
nguyên đó. Tầm nhìn của các unit được hiện thị trong bảng 2 dưới đây.
Bảng 2: Visible range của các unit
HP
Worker 2000 2 4 40
Knight 5000 2 4 20
Fighter 5000 2 4 40
5000 2 4 60
Castle 50000 2 4 0
Village 20000 2 10 100
Base 20000 2 4 500
Loại unit Attack Range (ô) Visible Range (ô) Tài nguyên cần để xin
Assasin
Attack range
Visible range
7. 4.3.4 Attack damage
Attack damage sẽ trừ vào máu đối phương. Attack damage của từng unit được hiển thị ở bảng
sau
Bảng 3: Attack damage
4.4 Hướng dẫn về tấn công
Lượng damage gây ra và damage nhận vào khi tấn công và bị tấn công các loại unit khác
nhau sẽ khác nhau và được hiển thị ở bảng 3 . Ngoài ra lượng damage gây ra còn phụ thuộc
vào số lượng unit địch trong phạm vi tấn công. Ví dụ damage của unit a tác động lên unit đối
phương b là m, và trong phạm vi tấn công của unit a có k unit của đối phương thì damage mà
a tác động lên b sẽ là m/k. Tuy nhiên nếu tồn tại một ô mà có số lượng unit đôi phương trong ô
đó lớn hơn 10 thì sẽ chỉ tính là 10 unit đối phương trong ô đô.
Ví dụ trong trường hợp 1 vs 1:
1. Worker tấn công Fighter thì Fighter nhận 100 damage
2. Fighter tấn công Worker thì Worker nhận 500 damage
Ví cho đoan code cho phase tấn công và phase xóa lính khỏi bản đồ đó
#Phase tấn công
foreach (toàn bộ unit trên bản đồ)
k = 0
foreach( ô trong phạm vi tấn công của unit đó)
k += min(10, số unit đối phương trong ô)
foreach ( unit đối phương trong pham vi tấn công)
HP của unit đối phương -= (damage gây ra theo bảng 3) / k
#Phase xóa lính
foreach (toàn bộ unit trên bản đồ)
if HP <= 0
#code để xóa unit khỏi bản đồ
Unit nhận damage
Worker Knight Fighter Assasin Castle Village Base
Worker 100 100 100 100 100 100 100
Knight 100 500 200 200 200 200 200
Fighter 500 1600 500 200 200 200 200
Assasin 1000 500 1000 500 200 200 200
Castle 100 100 100 100 100 100 100
Village 100 100 100 100 100 100 100
Base 100 100 100 100 100 100 100
Unit gây
Damage
8. 4.5 Khai thác tài nguyên
Vị trí của các ô tài nguyên sẽ được set random khi bắt dầu trận đấu. Và giống như AOE thì
nếu không có tầm nhìn của ô tài nguyên thì sẽ không có thông tin về ô tài nguyên đó.
Khi mà trong ô tài nguyên có Worker của bên mình đi vào ô tài nguyên thì trong mỗi 1 Phase
khai thác tài nguyên 1 Worker sẽ khai thác được 1 tài nguyên. Tuy nhiên trong 1 turn chơi thì
1 ô tài nguyên chỉ khai thác được tối đa 5 tài nguyên. Dù trong ô tài nguyên đó có 6 worker thì
1 turn cũng chỉ khai thác được 5 tài nguyên từ ô tài nguyên đó.
Ngoài số lượng tài nguyên khai thác được từ Worker thì ở mỗi turn, người chơi sẽ được +10 tài
nguyên vào kho.
5. Formatxu t vành p d li uấ ậ ữ ệ
5.1 Nhập dữ liệu
Mỗi turn thì dữ liệu nhập vào có dạng như sau
[Thời gian còn lại (ms)]
[Stage hiện tại (0 - indexed) ]
[Turn hiện tại (0 -indexed)]
[Số lượng tài nguyên]
[Số lượng unit của mình]
(Tiếp theo sẽ là các dòng như format dưới đây sẽ hiển thị thông tin quân bên minh)
[Id của unit] [tọa độ y] [tọa độ x] [lượng HP] [Loại Unit]
[Số lượng unit đối phương trong tầm nhìn bên mình]
(Tiếp theo sẽ là các dòng như format dưới đây sẽ hiển thị thông tin quân bên địch trong tầm
nhìn)
[Id của unit] [tọa độ y] [tọa độ x] [lượng HP] [Loại Unit]
[Số lượng tài nguyên trong tầm nhìn]
(Tiếp theo sẽ là các dòng như format dưới đây sẽ hiển thị thông tin vị trí ô tài nguyên)
[Tọa độ y] [Tọa độ x]
End
Loại Unit tham khảo trong bảng 4 dưới đây
Bảng 4: Loại unit
Unit
Worker 0
Knight 1
Fighter 2
3
Castle 4
Village 5
Base 6
Loại unit
Assasin
9. Ví dụ về input:
3598517
0
27
29
13
0 7 16 50000 4
1 16 23 2000 0
2 16 23 2000 0
3 16 23 2000 0
4 7 43 2000 0
5 16 23 2000 0
12 20 9 2000 0
14 16 23 2000 0
16 13 24 2000 0
18 16 17 2000 0
20 5 12 2000 0
22 9 17 2000 0
24 7 16 2000 0
0
1
16 23
END
5.2 Xuất dữ liệu
Dòng đầu tiên của output bắt buộc phải là tên người chơi. Tên này không cần phải giống tên
đăng nhập. Tên của player là chữ số tiếng anh, kí tự đặc biệt thì chỉ chấp nhận các kí tự [ - ],
[ _ ], [ @ ]. Sau khi đã nhận được dữ liệu đầu vào tư client thì sẽ dữ liệu đầu ra có format như
sau
[Số lượng mệnh lệnh cho unit]
(Tiếp theo sẽ là các dòng như format dưới đây để ra lệnh cho unit)
[Unit ID] [Mệnh lệnh]
10. Mệnh lệnh có 2 loại gồm di chuyển và sinh unit. Mệnh lệnh di chuyển thì sử dụng các chứ cái
tùy theo hướng di chuyển bao gồm: U (up), D (down), L (left), R (right). Mệnh lệnh sinh unit thì
phải chỉ rõ loại unit được sinh ra là gì. Cụ thể về các mệnh lệnh cũng như khả năng thực hiện
mệnh lệnh của mõi unit được thể hiện trong bảng 5.
Nếu trong 1 forrmat xuất mệnh lệnh mà 1 unit nhận được nhiều mệnh lệnh thì mệnh lệnh đầu
tiên sẽ được thực hiện.Nếu format mệnh lệnh bị sai hoặc unit đó không thể thực hiện được
mệnh lệnh được giao, thì mệnh lệnh đó sẽ không thể thực hiện. Ngoài ra, không nhất thiết
phải giao mệnh lệnh cho tất cả các unit.
Bảng 5
Ví dụ output
testAI
14
12 R
16 R
22 D
24 R
25 R
27 R
29 D
32 D
20 D
30 R
34 R
35 R
37 D
0 0
Khả năng thực hiện mênh lệnh
Mệnh lệnh Kết quả Worker Knight Fighter Assasin Castle Village Base
U Di chuyển lên trên O O O O X X X
D Di chuyển xuống dưới O O O O X X X
L DI chuyển sang trái O O O O X X X
R Di chuyển sang phải O O O O X X X
0 Xin Worker X X X X O O x
1 Xin Knight X X X X X X O
2 Xin Fighter X X X X X X O
3 Xin Assasin X X X X X X O
5 Xin Village O X X X X X X
6 Xin Base O X X X X X X
11. 6. T ch c cu c thiổ ứ ộ
6.1 Tham gia và cách thức thi
Thành viên đăng kí sẽ nhận được 1 client từ Web của cuộc thi, sau đó sẽ thiết kế AI, nộp kết
quả mà AI xử lý lên server.
Client sử dụng name và token được phát để đăng nhập vào server. Sau khi đăng nhập thì phải
nhập đoạn code để chạy AI trên client. Và khi bắt đầu cuộc thi thì phải chạy đoạn code đã
nhập. AI sẽ nhận được thông tin đầu vào của game theo như format. Sau đó AI xử lý thông tin,
đưa ra mệnh lệnh theo như format ở bên trên.
Trong thời gian tham gia cuộc thi thì có thể chơi game với số lần tùy thích. Sẽ có 1 chương
trình chạy trên server để kiểm tra kết quả đã nộp là đúng hay sai. Chương trình này sẽ kiểm
tra tất cả các hành động như là sửa param, thay đổi kết quả hoặc các hành động bất chính
khác. Nếu chương trình kiểm tra kết quả đúng và không có cheat, kết quả nhận được sẽ được
đánh giá và xếp hạng.
6.2. Ngôn ngữ, môi trường
Không có giới hạn về ngôn ngữ được sử dụng.