Hàng xóm tốt bụng của bạn, Doctor Tree, vừa cho bạn ba sinh vật ma thuật gọi là Cod Pokémon. Có một giải đấu chiến đấu ở thị trấn Colorville gần đó. Bạn có phải là người tốt nhất, giống như chưa từng có ai?
Tổng quan
Đây là một giải đấu chiến đấu. Mỗi người chơi điều khiển một đội gồm ba quái vật, và mục tiêu là hạ gục (tiêu diệt) đội kia. Có 100 vòng, với số điểm được trao cho chiến thắng và quan hệ. Đội có nhiều điểm nhất thắng!
Quái vật
Một con mã là một sinh vật nhỏ phức tạp. Có năm loại (yếu tố) để lựa chọn, ba chỉ số và ba vị trí di chuyển trên mỗi loại.
Các loại
Mỗi bộ mã được gán một loại. Năm loại là Bình thường, Tâm linh, Lửa, Nước và Cỏ. Mỗi cái đều có điểm mạnh và điểm yếu. Thiệt hại dựa trên biểu đồ sau:
Các con số là bội số thiệt hại. Chẳng hạn, Lửa tấn công Nước có bộ điều biến 0,5 (một nửa sát thương), trong khi Lửa tấn công Cỏ được nhân đôi (2).
Số liệu thống kê
Mỗi quái vật có ba chỉ số xác định khả năng chiến đấu của nó. Tấn công làm tăng thiệt hại mà nó gây ra. Phòng thủ làm giảm thiệt hại cần thiết. Tốc độ cho phép nó di chuyển trước những người có Tốc độ thấp hơn.
Mỗi quái vật có giá trị bắt đầu là 50 cho mỗi chỉ số và tối đa là 100. Khi bạn tạo quái vật của mình, bạn sẽ có thể chỉ định thêm 80 điểm chỉ số (mỗi điểm). Hãy nhớ rằng không có chỉ số riêng lẻ nào có thể vượt quá 100. Vì vậy, bạn có thể có phân phối 100/80/50, 90/80/60 hoặc 65/65/100, nhưng 120/50/60 là bất hợp pháp. Bất kỳ đội nào có số liệu thống kê bất hợp pháp đều bị loại. Bạn không bắt buộc phải sử dụng tất cả 80 điểm, nhưng có lẽ bạn không nên đi với mức tối thiểu 50/50/50.
Bạn cũng có thể coi HP là một chỉ số, nhưng mỗi Cod Pokémon có 100 HP không thể sửa đổi. Khi HP giảm xuống 0, họ không thể tiếp tục chiến đấu. HP được nạp lại 100 trước mỗi trận chiến.
Di chuyển
Mỗi quái vật biết ba động tác chiến đấu. Ba lựa chọn phải khác biệt, do đó không có Punch / Punch / Punch.
Có 15 động tác, ba loại mỗi loại. Mỗi loại có một cuộc tấn công trực tiếp, một cuộc tấn công yếu hơn với một hiệu ứng và một hiệu ứng di chuyển duy nhất.
id name type power uses usable effect
0 Punch N 20 - NFWG
1 Heal N 0 3 NFWG Heals 50 HP
2 Slow N 10 5 NFWG Enemy speed x0.8
3 Pain P 20 - PFWG
4 Sleep P 0 3 PFWG No enemy action until wake
5 Weaken P 10 5 PFWG Enemy Atk x0.8
6 Fireball F 20 - NPFW
7 Burn F 0 3 NPFW Enemy -10 HP each turn
8 Sharpen F 10 5 NPFW Own Atk x1.25
9 Watergun W 20 - NPWG
10 Confuse W 0 3 NPWG Enemy may strike itself (10 power)
11 Shield W 10 5 NPWG Own Def x1.25
12 Vine G 20 - NPFG
13 Poison G 0 3 NPFG Enemy -5xTurns HP each turn
14 Sap G 10 5 NPFG Enemy Def x0.8
type
đề cập đến loại di chuyển. power
là sức mạnh nổi bật của nó. uses
cho biết số lần có thể được sử dụng cho mỗi trận chiến ( -
không giới hạn). usable
hiển thị loại nào có thể được sử dụng bởi (ví dụ, Punch không thể được cung cấp cho loại Tâm linh, vì không có loại nào P
). effect
cho thấy những tác động của các động tác có. Có 75% cơ hội cho mỗi hiệu ứng hoạt động, ngoại trừ Heal, luôn hoạt động.
Đối với các hiệu ứng thay đổi chỉ số của quái vật, các hiệu ứng có thể được xếp chồng lên nhau . Ví dụ: sử dụng Weaken hai lần có thể làm giảm hiệu quả tấn công của đối thủ xuống 0,64. Các hiệu ứng không thay đổi chỉ số của quái vật (Ngủ, Ghi, v.v.) không được xếp chồng lên nhau .
Giấc ngủ khiến đối thủ ngủ, với 60% cơ hội thức dậy vào đầu mỗi lượt. Không có hành động sẽ được thực hiện bởi quái vật ngủ.
Burn gây sát thương cho đối thủ 10 HP vào cuối mỗi lượt khi hoạt động . Poison hoạt động tương tự, nhưng mất một lượng ngày càng tăng mỗi lượt. Ở lượt đầu tiên, nó là 5 và tăng 5 điểm sau mỗi lượt. Vì vậy, đến lượt thứ tư, nó sẽ gây sát thương cho 20. Đây là những thiệt hại bằng phẳng, không bị ảnh hưởng bởi loại quái vật hoặc phải chịu tiền thưởng.
Sự nhầm lẫn có thể khiến một con quái vật tấn công chính nó thay vì làm những gì nó được bảo phải làm. Đòn tấn công này có sức mạnh 10 và có 30% cơ hội xảy ra ở một lượt cho trước.
Để rõ ràng, các hiệu ứng kéo dài cho đến khi kết thúc trận chiến (trừ Ngủ, như đã lưu ý ở trên).
Mov cũng nhận được 20% sức mạnh nếu được sử dụng bởi một quái vật thuộc loại tương ứng. Ví dụ, một quái vật Grass sử dụng Vine được tăng cường, trong khi sử dụng Punch thì không.
Chỉ số bí mật
Số liệu thống kê và loại (nhưng không di chuyển) của mỗi quái vật là kiến thức công khai. Đối thủ của bạn sẽ có thể thấy những gì họ đang chiến đấu, để chọn hành động tốt nhất. Tuy nhiên, cũng có những phần thưởng có sẵn được ẩn đi.
Cụ thể, cứ sau hai trận chiến, bạn sẽ được tặng một điểm "thưởng" cho mỗi quái vật trong đội của mình. Điểm được trao cho tất cả quái vật, sống hay chết, người chiến thắng hay kẻ thua cuộc. Bạn có thể chỉ định điều này cho bất kỳ số liệu thống kê nào bạn chọn. Bạn không thể xếp chúng trên một con quái vật; mỗi con quái vật được một lần. Những điểm này miễn dịch với giới hạn 100. Vì sẽ có 100 vòng chiến đấu, điều này có nghĩa là bạn có thể nhận được một chỉ số duy nhất lên tới 149 nếu bạn phân bổ tất cả tiền thưởng của mình cho nó. Một lần nữa, đối thủ sẽ chỉ nhìn thấy các chỉ số "cơ sở" của bạn, vì vậy bạn càng tham gia vào giải đấu, kiến thức của họ càng khác với sự thật.
Trận chiến
Trận chiến diễn ra giữa các đội gồm ba người, mỗi lần một người hoạt động. Khi bắt đầu, bạn sẽ được hiển thị đội của đối thủ và được yêu cầu chọn quái vật nào sẽ là người chơi "hoạt động" đầu tiên của bạn.
Sau đó, lần lượt diễn ra với các bước sau:
- Chuyển đổi: Công tắc quái vật bắt buộc diễn ra (nếu có)
- Chọn hành động chiến đấu
- Chuyển đổi: Bất kỳ chuyển đổi quái vật tùy chọn (được chọn làm hành động chiến đấu) diễn ra
- Kiểm tra giấc ngủ: Cơ hội để đánh thức giấc ngủ
- Tấn công 1: Nếu có thể, quái vật tốc độ hơn sử dụng chiêu thức đã chọn
- Tấn công 2: Nếu có thể, quái vật khác sử dụng chiêu thức đã chọn
- Hiệu ứng sát thương: Áp dụng sát thương bỏng / độc cho quái vật sống
"Speedier" có nghĩa là quái vật có tốc độ cao hơn. Nếu cả hai chỉ số tốc độ là như nhau, nó được chọn bởi PRNG coin lật mỗi lượt.
Vào cuối bất kỳ lượt nào mà quái vật hoạt động của bạn chết, bạn sẽ được yêu cầu chọn một hoạt động mới. Bạn cũng có thể chọn chuyển đổi quái vật hoạt động khi bạn di chuyển cho bất kỳ lượt nào (miễn là bạn có nhiều hơn một con còn sống). Một lần nữa, nếu bạn chuyển đổi khi bạn di chuyển, bạn sẽ không thực hiện một trận chiến di chuyển theo lượt đó.
Quái vật không được "xử lý" khi không hoạt động. Điều này có nghĩa là chúng không gây sát thương bỏng / độc, quầy độc không tích lũy, không đánh thức giấc ngủ, v.v. Không có hiệu ứng nào bị loại bỏ hoặc thay đổi khi chuyển đổi . Đây không phải là trò chơi chiến đấu quái vật khác . Nếu bạn tắt với đòn tấn công được nâng lên và đốt cháy, chúng sẽ vẫn ở đó khi bạn quay lại.
Hiệu ứng sát thương diễn ra cho dù bạn có giết chết đối thủ tích cực của mình hay không. Theo cách này, các thành viên của cả hai đội có thể chết trong một lượt.
Khi một đội hết quái vật có thể sử dụng, họ sẽ thua. Nếu cả hai đội chạy hết lượt, đó là hòa. Nếu trận chiến kéo dài 1000 lượt, đó là một trận hòa.
Công thức để xác định thiệt hại là:
floor((effAttack / effDefense) * movePower * typeMultiplier * moveBoost)
effAttack
và effDefense
là những chỉ số hiệu quả cho những con quái vật. Tấn công hiệu quả có được bằng cách thêm Tấn công và Thưởng Tấn công, sau đó nhân (bằng 0,8 hoặc 1,25) nếu có bất kỳ hiệu ứng nào làm thay đổi nó. Hãy nhớ rằng những hiệu ứng này có thể xếp chồng lên nhau.
Sát thương chỉ có thể là 0 khi công cụ sửa đổi loại là 0 (Bình thường <-> Tâm linh) hoặc Sức mạnh của di chuyển là 0 (Chữa lành, Đốt cháy, v.v.). Nếu không, mức tối thiểu được thi hành tại 1.
Giải đấu
Giải đấu kéo dài trong 100 vòng. Trong mỗi vòng, các đội được xáo trộn và ghép với nhau một cách ngẫu nhiên. Nếu có một số lượng lẻ các đội, phần còn lại sẽ nhận được một lời tạm biệt (điểm số là hòa). Chiến thắng một trận chiến kiếm được cho đội 2 điểm, các mối quan hệ có giá trị 1 , và không mất gì. Đội nào có nhiều điểm nhất vào cuối sẽ chiến thắng!
Nếu các đội bị trói, một giải đấu chỉ có các đội được buộc ở vị trí đầu tiên sẽ diễn ra để xác định thứ tự bẻ khóa.
Giao thức
Bộ điều khiển sẽ gửi chương trình của bạn một trong bốn lệnh. Ký tự đầu tiên xác định loại lệnh, với dữ liệu sau nếu cần.
Chương trình của bạn sẽ chấp nhận lệnh làm đối số và sẽ trả lời trên STDOUT trong vòng một giây . Đừng sống nghe STDIN, nó sẽ không ở đó. Mỗi lệnh sẽ sinh ra một quy trình mới.
Bạn có thể ghi dữ liệu / trạng thái vào đĩa. Đặt bất kỳ tệp nào trong thư mục con có cùng tên với nhóm của bạn. Không viết quá 32 kilobyte dữ liệu, nếu không bạn sẽ bị loại. Dữ liệu sẽ tồn tại giữa các vòng, nhưng sẽ bị xóa giữa các giải đấu.
Các lệnh
Dữ liệu nhóm
Điều này được gửi một lần khi bắt đầu giải đấu để đăng ký đội của bạn. Câu trả lời của bạn phải không đổi , không khác nhau cho mỗi giải đấu.
Truy vấn:
T
Phản ứng:
name|member0|member1|member2
name
là một chuỗi với tên nhóm của bạn. Vui lòng chỉ sử dụng chữ và số để dễ phân tích cú pháp. memberN
là một chuỗi thành viên, cung cấp các chi tiết của từng quái vật:
Chuỗi thành viên:
name:typeid:attack:defense:speed:moveid0:moveid1:moveid2
Một lần nữa, 'tên' là một chuỗi, lần này với tên của quái vật này. typeid
là loại của nó. Các id loại theo thứ tự được hiển thị trong biểu đồ ở trên, với Bình thường = 0 và Cỏ = 4.
Ba lĩnh vực tiếp theo là số liệu thống kê cơ sở của bạn. Hãy ghi nhớ các giới hạn được mô tả trong phần thống kê ở trên.
Ba cuối cùng là di chuyển quái vật của bạn. ID được hiển thị trong biểu đồ di chuyển ở trên.
Một ví dụ trả lời dữ liệu nhóm có thể trông như thế này:
DummyTeam|DummyA:0:50:60:70:0:1:2|DummyB:0:50:60:70:0:1:2|DummyC:0:50:60:70:0:1:2
Bất kỳ đội nào gửi lại rác, định dạng sai hoặc dữ liệu bất hợp pháp ở đây sẽ không tham gia cho đến khi nó được sửa.
Chọn hoạt động
Điều này được gửi vào đầu mỗi trận chiến, và khi một con quái vật chết và cần phải được chuyển đổi.
Truy vấn:
C#battleState
battleState
cho thấy tình trạng của trận chiến hiện tại Chịu đựng tôi ở đây, nó xấu xí:
yourTeamState#theirTeamState
Nơi XteamState
trông như:
name:activeSlot|member0state|member1state|member2state
activeSlot
cho thấy quái vật nào đang hoạt động (0-2). Các quốc gia thành viên có hai hương vị. Nếu đó là đội của bạn , nó sẽ cung cấp thêm thông tin. Vì thế,
Thành viên của bạn :
name:id:attack:defense:speed:hp:typeid:poisonedturns:moveCount0:moveCount1:moveCount2:bonusAttack:bonusDefense:bonusSpeed:effectid:effectid:effectid
Thành viên của họ :
name:id:attack:defense:speed:hp:typeid:poisonedturns:effectid:effectid:effectid
id
chỉ đơn giản là một định danh số nguyên bạn có thể sử dụng để theo dõi quái vật nếu bạn không thích sử dụng name
.
attack:defense:speed
là số liệu thống kê cơ sở của bạn .
poisonedturns
cho bạn biết bạn đã bị đầu độc bao nhiêu lần.
moveCountX
cho biết bạn còn lại bao nhiêu lần sử dụng cho mỗi lần di chuyển. Nếu 0, nó không thể được sử dụng. Đối với di chuyển không giới hạn, điều này sẽ là tiêu cực.
bonus(stat)
là số điểm thưởng bạn đã chỉ định cho mỗi chỉ số.
effectid
là một danh sách các hiệu ứng có kích thước thay đổi đã được áp dụng cho quái vật của bạn. Sẽ không có dấu vết :
trên chuỗi, cho dù có hiệu ứng hoạt động hay không. Nếu có các hiệu ứng xếp chồng lên nhau, chúng sẽ hiển thị dưới dạng nhiều hiệu ứng trong danh sách.
Các id hiệu ứng là:
0 NONE (should not appear, internal use)
1 POISON
2 CONFUSION
3 BURN
4 SLEEP
5 HEAL (should not appear, internal use)
6 ATTACK_UP
7 ATTACK_DOWN
8 DEFENSE_UP
9 DEFENSE_DOWN
10 SPEED_DOWN
Phản ứng:
memberSlot
Câu trả lời duy nhất cần có là một số 0,1,2, cho biết thành viên nào bạn muốn hoạt động. Đây phải là một thành viên có khả năng chiến đấu. Đừng gửi lại 1
nếu thành viên 1 đã chết.
Trận chiến
Mỗi lượt, bạn cần quyết định phải làm gì.
Truy vấn:
A#battleState
Ở battleState
đây chính xác như được mô tả ở trên.
Phản ứng:
Để sử dụng di chuyển, hãy gửi lại vị trí di chuyển. Ví dụ: nếu tôi đã gán Punch cho vị trí 0, việc gửi sẽ 0
thực hiện Punch.
Để chuyển sang thành viên khác, hãy gửi vị trí của thành viên cộng với mười . Vì vậy, để chuyển sang thành viên 2, gửi 12
.
Bất cứ điều gì không trong [0,1,2,10,11,12] đều được coi là không hợp lệ và sẽ không dẫn đến hành động nào trong lượt này.
Chỉ số tiền thưởng
Sau mỗi hai trận chiến, bạn nhận được một điểm thưởng bí mật cho mỗi thành viên trong đội.
Truy vấn:
B#yourTeamState
Trạng thái nhóm của bạn giống như được hiển thị ở trên, đừng bắt tôi lặp lại.
Phản ứng:
stat0:stat1:stat2
Phản hồi của bạn sẽ đại diện cho chỉ số nào sẽ tăng cho mỗi thành viên trong nhóm. Tấn công là 0, Phòng thủ là 1, Tốc độ là 2.
Vì vậy, để tăng tốc độ của thành viên, tấn công của thành viên hai và phòng thủ của thành viên ba, bạn sẽ trả lời:
2:0:1
Bộ điều khiển
Bộ điều khiển có thể được tìm thấy trên BitBucket: https: //Geobits@bitbucket.org/Geobits/codemon.git
Chỉ cần ném tất cả các tệp lớp đã gửi, đệ trình và player.conf vào một thư mục và chạy.
Lớp chính của bộ điều khiển được gọi Tournament
. Cách sử dụng là:
java Tournament [LOG_LEVEL]
Các cấp độ nhật ký từ 0-4 cung cấp thông tin ngày càng tăng. Cấp 0 điều hành giải đấu một cách âm thầm và chỉ đưa ra kết quả, trong đó cấp 3 đưa ra bình luận lần lượt. Cấp 4 là đầu ra gỡ lỗi.
Bạn có thể thêm các bài nộp vào giải đấu trong players.conf
Chỉ cần thêm chuỗi dòng lệnh cần thiết để chạy chương trình, mỗi dòng trên mỗi dòng. Dòng bắt đầu với #
ý kiến.
Trong bài viết của bạn, bao gồm lệnh tôi sẽ cần thêm vào của tôi players.conf
và bất kỳ bước biên dịch nào (nếu cần).
Bao gồm là một đội giả bao gồm tất cả các thành viên Bình thường với ba động tác Bình thường. Họ chọn di chuyển ngẫu nhiên và có chỉ số khủng. Hãy vui vẻ đánh bại họ.
Quy tắc linh tinh
Bạn không được đọc hoặc ghi vào bất kỳ tài nguyên bên ngoài nào (ngoại trừ trong thư mục con của riêng bạn, tối đa 32 kB như đã lưu ý ở trên).
Đội của bạn cần tham gia giải đấu "mù". Điều đó có nghĩa là bạn không thể phân tích nguồn của người khác để tìm ra một đội / quái vật cụ thể sẽ làm gì trong một tình huống nhất định. Bạn có thể phân tích di chuyển / chỉ số của đối thủ và theo dõi khi giải đấu diễn ra, nhưng không mã hóa thông tin này.
Không can thiệp vào các quá trình / đệ trình khác. Không gọi họ, sử dụng sự phản chiếu để lấy dữ liệu của họ, v.v. Đừng gây rối với máy tính của tôi. Đừng thử nó. Đây là theo ý của tôi. Những người vi phạm có thể bị cấm tham gia trong tương lai.
Thí sinh được giới hạn tối đa hai mục. Nếu bạn gửi nhiều hơn, tôi sẽ chỉ ghi được hai lần đầu tiên gửi. Nếu bạn muốn thu hồi nó, hãy xóa nó.
Các mục có thể không tồn tại chỉ để chống đỡ các mục khác. Ngoài ra, bạn không được cố gắng gián tiếp loại bỏ các thí sinh khác (ví dụ: sử dụng tên nhóm nhân vật 27M cho người chơi DQ cố gắng ghi điều này vào đĩa). Mỗi bài nộp nên chơi để giành chiến thắng trên giá trị riêng của nó.
Chương trình của bạn có thể sinh ra tối đa một quá trình con tại một thời điểm (tổng số con cháu, không trực tiếp). Cả quá trình chính và bất kỳ tiến trình con nào cũng phải kết thúc trực tiếp sau khi đưa ra đầu ra. Dù bằng cách nào, hãy đảm bảo bạn không vượt quá thời gian chờ.
Giải đấu sẽ được tổ chức trên máy tính của tôi chạy Ubuntu với bộ xử lý Intel i7 3770K.
Các kết quả
Đây là kết quả của những người chơi hiện tại. Nó rất gần giữa các ứng cử viên hàng đầu và tôi đang nghĩ về việc giảm số lượng vòng lên tới 500 (và điều chỉnh khoảng cách các điểm thưởng cho phù hợp). Bất kỳ phản đối, ý kiến?
------- Final Results -------
158 Happy3Campers
157 LittleKid
71 InsideYourHead
68 HardenedTrio
46 BitterRivals
Kết quả chơi đầy đủ trên Google Drive
bye
cho một số lượng đối thủ cạnh tranh không đồng đều và sẽ được đảm bảo rằng các cặp đối sánh được phân phối công bằng và đồng đều.
n^2
thay vì n
. Chỉ với 7 đối thủ và 100 vòng đấu hiện tại, đó là 2100 trận chiến (so với 300, và 1500 với 500 vòng). Nó chỉ trở nên tồi tệ hơn khi có nhiều mục nhập hơn. Tôi có thể thu nhỏ lại số vòng, nhưng tôi ngần ngại làm điều đó vì tính biến thiên vốn có (liên quan đến trạng thái đặc biệt) và có bội số 50 (cho điểm thưởng) dễ dàng hơn.