ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΡΠ±ΠΎΡΠΊΠ΅ - build.md.
HyperNull - Π²ΠΎΡΡ ΠΎΠ΄ΡΡΠ°Ρ Π·Π²Π΅Π·Π΄Π° Π² ΠΌΠΈΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ²Π°Π»ΡΡ. ΠΠΎΡΡ ΡΠΎΠ±ΠΈΡΠ°ΡΡ hypernull-ΠΊΠΎΠΈΠ½Ρ (ΠΌΠΎΠ½Π΅ΡΡ), Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡΠΈ. Π‘ΠΏΡΠΎΡ Π½Π° HyperNull Π²ΡΡΠΎΠΊ, Π² ΠΌΠ°ΠΉΠ½ΠΈΠ½Π³Π΅ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ, Π½Π° ΠΊΠ°ΠΆΠ΄ΡΡ ΠΌΠΎΠ½Π΅ΡΡ ΠΏΡΠ΅ΡΠ΅Π½Π΄ΡΠ΅Ρ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ°ΠΉΠ½Π΅ΡΠΎΠ². Π ΡΠΈΡΡΠ΅ΠΌΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡΠΈ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°, ΡΡΠ»ΠΎΠΆΠ½ΡΡ Π·Π°Π΄Π°ΡΡ.
ΠΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΌΠ°ΠΉΠ½ΠΈΡΡ hypernull-ΠΊΠΎΠΈΠ½Ρ: ΡΠΎΠ±Π΅ΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΠΎΠ½Π΅Ρ Π·Π° ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΡΠ½Π΄ΠΎΠ². ΠΠΎΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠΎ ΡΡΠ΅ΠΉΠΊΠ°ΠΌ Π΄Π²ΡΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΊΠ°ΡΡΡ. ΠΠ° ΠΎΠ΄ΠΈΠ½ Ρ ΠΎΠ΄ (ΠΈΠ»ΠΈ ΡΠ°ΡΠ½Π΄) ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΡΠΎΡΠ΅Π΄Π½ΡΡ ΡΡΠ΅ΠΉΠΊΡ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ, Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ ΠΈΠ»ΠΈ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π°. ΠΠ΅Π²Π°Ρ Π½ΠΈΠΆΠ½ΡΡ ΡΡΠ΅ΠΉΠΊΠ° ΠΊΠ°ΡΡΡ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ (0, 0). ΠΠ°ΡΡΡ Π·Π°ΠΌΠΊΠ½ΡΡΡ ΠΏΠΎ ΡΠΈΡΠΈΠ½Π΅ ΠΈ Π²ΡΡΠΎΡΠ΅. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π±ΠΎΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΏΡΠ°Π²ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΠΏΡΠ°Π²ΠΎ, ΠΎΠ½ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² ΠΊΡΠ°ΠΉΠ½ΡΡ Π»Π΅Π²ΡΡ ΡΡΠ΅ΠΉΠΊΡ (ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· Π³ΡΠ°Π½ΠΈΡΡ). ΠΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π²Π΄ΠΎΠ»Ρ Π²ΡΠ΅Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΠΈ ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ΅ΠΉΠΊΠ°ΠΌΠΈ.
ΠΠΎΠ½Π΅ΡΡ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π½Π° ΠΊΠ°ΡΡΠ΅ Π² ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡΡ . ΠΠ°ΠΆΠ΄Π°Ρ ΠΌΠΎΠ½Π΅ΡΠ° Π΄ΠΎΡΡΠ°Π΅ΡΡΡ Π±ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΊ Π½Π΅ΠΉ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΡΡ. ΠΡΠΎΠΌΠ΅ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΠΈ Π·Π° ΠΌΠΎΠ½Π΅ΡΡ, ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠ°ΠΉΠ½ΠΈΠ½Π³Π° ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ Π±ΠΎΡ Π½Π΅ Π·Π½Π°Π΅Ρ ΠΏΠΎΠ»Π½ΡΡ ΡΡ Π΅ΠΌΡ ΠΊΠ°ΡΡΡ: ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· ΡΡΠ΅Π΅ΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Ρ ΠΈ Π³Π΄Π΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π²ΡΠ΅ Π±ΠΎΡΡ ΠΈ ΠΌΠΎΠ½Π΅ΡΡ. ΠΠ°ΠΆΠ΄ΡΠΉ Π±ΠΎΡ "Π²ΠΈΠ΄ΠΈΡ" ΠΊΠ°ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΡΠ°Π΄ΠΈΡΡΠ° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΠΎΠΊΡΡΠ³ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ.
β οΈ DEATHMATCH β οΈ
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±ΠΎΡΡ Π΄ΡΡΠΆΠ΅Π»ΡΠ±Π½Ρ ΠΈ ΡΠΎΡΠ΅Π²Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΡΡΡ. ΠΠΎ Π΄Π»Ρ ΠΆΠ΅Π»Π°ΡΡΠΈΡ
ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΠΉ Π½Π°ΠΆΠΈΠ²Ρ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΌΠ°ΠΉΠ½ΠΈΠ½Π³ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ DEATHMATCH
. Π ΡΡΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π±ΠΎΡΡ ΠΌΠΎΠ³ΡΡ Π½Π°ΠΏΠ°Π΄Π°ΡΡ Π΄ΡΡΠ³ Π½Π° Π΄ΡΡΠ³Π° ΠΈ ΠΎΡΠ½ΠΈΠΌΠ°ΡΡ Π²ΡΠ΅ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ ΠΌΠΎΠ½Π΅ΡΡ.
ΠΠ°ΠΉΠ½ΠΈΠ½Π³ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΡΠ΅ΠΉ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅. ΠΠΎΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡΡ Π·Π°ΡΠ²ΠΊΡ Π½Π° ΡΡΠ°ΡΡΠΈ Π² ΠΌΠ°ΡΡΠ΅. Π Π·Π°ΡΠ²ΠΊΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±ΠΎΡΠ° ΠΈ ΡΠ΅ΠΆΠΈΠΌ ΠΌΠ°ΡΡΠ°: FRIENDLY
ΠΈΠ»ΠΈ DEATHMATCH
.
Π‘Π΅ΡΠ²Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π°ΡΠ²ΠΊΡ, Π³ΠΎΡΠΎΠ²ΠΈΡ ΠΊΠ°ΡΡΡ, ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΌΠ°ΡΡ. ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°ΡΠ½Π΄Π΅ Π±ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ°ΡΡΠ΅ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ.
ΠΠ°ΡΡ Π΄Π»ΠΈΡΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠ°ΡΠ½Π΄ΠΎΠ². ΠΡΠ»ΠΈ Π±ΠΎΡ ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°Π΅Ρ Π² ΡΡ
Π²Π°ΡΠΊΠ΅ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ DEATHMATCH
, ΠΎΠ½ ΠΏΠΎΠΊΠΈΠ΄Π°Π΅Ρ ΠΌΠ°ΡΡ Π΄ΠΎ Π΅Π³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ.
+-----+ +---------+
| bot | | server |
+-----+ +---------+
| |
| ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π° |
|----------------------------- |
| | |
|<---------------------------- |
| |
| ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ server:port |
|---------------------------------->|
| |
| hello |
|<----------------------------------|
| |
| register |
|---------------------------------->|
| | ------------------------\
| |-| ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΠ° |
| | | ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² |
| | |-----------------------|
| match_started |
|<----------------------------------|
| | ------------------------------------\
| |-| ΠΎΠ±ΠΌΠ΅Π½ update/move Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°ΡΠ½Π΄Π΅ |
| | |-----------------------------------|
| update |
|<----------------------------------|
-----------------\ | |
| Π°Π»Π³ΠΎΡΠΈΡΠΌ Π±ΠΎΡΠ° |-| |
| ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π·Π΄Π΅ΡΡ | | |
|----------------| | |
| move |
|---------------------------------->|
| | -------------------------\
| |-| ΠΌΠ°ΡΡ Π΄Π»Ρ Π±ΠΎΡΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½ |
| | |------------------------|
| match_over |
|<----------------------------------|
| |
- ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π±ΠΎΡ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΏΡΡΡ ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ.
- ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
hello
. - ΠΠΎΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π½Π° ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ
register
, ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΌΠ°ΡΡΠ° ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°Ρ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡ ΡΡΠ°ΡΡΠΈΡ Π² ΠΌΠ°ΡΡΠ΅. - Π‘Π΅ΡΠ²Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ° ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΌΠ°ΡΡ. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ Π΄ΡΡΠ³ΠΈΡ Π±ΠΎΡΠΎΠ².
- ΠΠΎΠ³Π΄Π° ΡΠΎΡΡΠ°Π² ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΠΌΠ°ΡΡΠ° ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½, ΡΠ΅ΡΠ²Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΌΠ°ΡΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΠ΅ΠΌ Π±ΠΎΡΠ°ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
match_started
. - ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°ΡΠ½Π΄Π΅ ΠΌΠ°ΡΡΠ° ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
update
c ΡΠ΅ΠΊΡΡΠΈΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ Π²ΡΠ΅ΠΌ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ Π±ΠΎΡΠ°ΠΌ. - Π‘Π΅ΡΠ²Π΅Ρ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
move
ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Ρ ΠΎΠ΄Π° ΠΎΡ Π²ΡΠ΅Ρ Π°ΠΊΡΠΈΠ²Π½ΡΡ Π±ΠΎΡΠΎΠ² ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ°ΡΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΡΠ»ΠΈ Π±ΠΎΡ Π½Π΅ ΡΡΠΏΠ΅Π²Π°Π΅Ρ ΠΏΡΠΈΡΠ»Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π° ΠΎΡΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΎΠ½ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅Ρ Ρ ΠΎΠ΄. - ΠΡΠ»ΠΈ Π±ΠΎΡ Π²ΡΠ±ΡΠ²Π°Π΅Ρ ΠΈΠ· ΠΌΠ°ΡΡΠ°, ΡΠ΅ΡΠ²Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ Π΅Π³ΠΎ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π°ΠΊΡΠΈΠ²Π½ΡΡ
ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠΎΠΌΡ Π±ΠΎΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
match_over
. - ΠΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ Π»ΠΈΠΌΠΈΡΠ° ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠ°ΡΠ½Π΄ΠΎΠ² ΠΌΠ°ΡΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ. ΠΡΠ΅ΠΌ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ Π±ΠΎΡΠ°ΠΌ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
match_over
.
Π’Π΅ΠΊΡΡΠ°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°: 1
ΠΠΎΡ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅.
command
param1 param1_value1 param1_value2 ... param1_valueN
param2 param2_value1 param2_value2 ... param2_valueN
...
paramN paramN_value1 paramN_value2 ... paramN_valueN
end
ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Π±ΠΎΡΠ°. Π ΠΎΡΠ²Π΅Ρ Π±ΠΎΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ register
.
hello
protocol_version {PROTOCOL_VERSION}
end
PROTOCOL_VERSION
ΡΠ΅ΠΊΡΡΠ°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° (ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ)
ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π±ΠΎΡΠΎΠΌ ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ.
register
bot_name {BOT_NAME}
bot_secret {BOT_SECRET}
mode {MATCH_MODE}
end
BOT_NAME
Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±ΠΎΡΠ°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°BOT_SECRET
Π΅ΡΠ»ΠΈBOT_NAME
Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠΆΠ΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½, Π΄ΠΎΠΏΡΡΠΊ ΠΊ ΠΌΠ°ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΡΠ°Π½Π΅Π΅BOT_SECRET
MATCH_MODE
ΡΠ΅ΠΆΠΈΠΌ ΠΌΠ°ΡΡΠ°: ΡΡΡΠΎΠΊΠ°FRIENDLY
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) ΠΈΠ»ΠΈDEATHMATCH
ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΌΠ°ΡΡΠ°.
match_started
match_id {MATCH_ID}
num_rounds {NUM_ROUNDS}
mode {MATCH_MODE}
map_size {MAP_WIDTH} {MAP_HEIGHT}
num_bots {NUM_BOTS}
your_id {YOUR_ID}
view_radius {VIEW_RADIUS}
mining_radius {MINING_RADIUS}
attack_radius {ATTACK_RADIUS}
move_time_limit {MOVE_TIME_LIMIT}
end
MATCH_ID
ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΌΠ°ΡΡΠ°NUM_ROUNDS
ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΡΠ½Π΄ΠΎΠ² Π² ΠΌΠ°ΡΡΠ΅MATCH_MODE
ΡΡΡΠΎΠΊΠ°FRIENDLY
ΠΈΠ»ΠΈDEATHMATCH
MAP_WIDTH
ΡΠΈΡΠΈΠ½Π° ΠΊΠ°ΡΡΡ [1, 32767]MAP_HEIGHT
Π²ΡΡΠΎΡΠ° ΠΊΠ°ΡΡΡ [1, 32767]NUM_BOTS
ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΎΡΠΎΠ² Π² ΠΌΠ°ΡΡΠ΅ [1, 64]YOUR_ID
ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ/ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π±ΠΎΡΠ° [0,NUM_BOTS
)VIEW_RADIUS
ΡΠ°Π΄ΠΈΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ [1, 32767]MINING_RADIUS
ΡΠ°Π΄ΠΈΡΡ ΠΌΠ°ΠΉΠ½ΠΈΠ½Π³Π° ΠΌΠΎΠ½Π΅Ρ <=VIEW_RADIUS
ATTACK_RADIUS
ΡΠ°Π΄ΠΈΡΡ Π°ΡΠ°ΠΊΠΈ (Π΄Π»Ρ ΡΠ΅ΠΆΠΈΠΌΠ°DEATHMATCH
) <=VIEW_RADIUS
MOVE_TIME_LIMIT
Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ ΠΎΠ΄Π° Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ >= 500
ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π² Π½Π°ΡΠ°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΡΠ½Π΄Π° ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ°ΡΡΠ΅ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΡΠ°Π΄ΠΈΡΡΠ° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π±ΠΎΡΠ°. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½Π΅ΠΏΡΡΡΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ bot
(Π±ΠΎΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΈΠ³ΡΠΎΠΊ), block
(ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅) ΠΈΠ»ΠΈ coin
(ΠΌΠΎΠ½Π΅ΡΠ°), ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ Π΅Π΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ.
update
round {ROUND_NUMBER}
bot {X} {Y} {NUM_BOT_COINS} {BOT_ID}
block {X} {Y}
coin {X} {Y}
end
ROUND_NUMBER
Π½ΠΎΠΌΠ΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ°ΡΠ½Π΄Π°, Π½Π°ΡΠΈΠ½Π°Ρ Ρ 1NUM_BOT_COINS
ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠΎΠ½Π΅Ρ, ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ Π±ΠΎΡΠΎΠΌBOT_ID
ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π±ΠΎΡΠ°
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΌ Π±ΠΎΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² match_started
Π±ΠΎΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ 1
match_started
your_id 1
...
end
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ update
ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Ρ Π±ΠΎΡΠ° 24 ΠΌΠΎΠ½Π΅ΡΡ, ΠΎΠ½ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠ΅ΠΉΠΊΠ΅ (7, 106) ΠΈ Π² Π·ΠΎΠ½Π΅ Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π±ΠΎΡ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ 0, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π° ΠΎΠ΄Π½Ρ ΠΌΠΎΠ½Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅
update
bot 14 99 25 0
bot 7 106 24 1
...
end
ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π±ΠΎΡΠΎΠΌ Π΄Π»Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΠΈΡ Ρ
ΠΎΠ΄Π° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°ΡΠ½Π΄Π΅. ΠΠ° ΡΠ°ΡΠ½Π΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ move
. Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π° Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°ΡΠ½Π΄Π΅, ΠΎ Π½Π°ΡΠ°Π»Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ update
.
move
offset {DX} {DY}
end
DX
ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΡΠ° ΠΏΠΎ X: -1, 0, 1DY
ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΡΠ° ΠΏΠΎ Y: -1, 0, 1
ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΌΠ°ΡΡΠ° Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π±ΠΎΡΠ°.
match_over
end
π₯· ΠΠ°Π½Π·Π°ΠΉ!
ΠΠ΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°.
- Π‘Π»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΈΠ»ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΡΡΠ°.
- ΠΠΎΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅ ΡΡΠ°ΡΡΠΎΠ²ΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ.
- ΠΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ Π²Π΅Ρ (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ ΠΌΠΎΠ½Π΅Ρ) ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π²Π½ΡΠΌ 0.
- ΠΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½Π°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΌΠΎΠ½Π΅Ρ Π½Π° ΠΊΠ°ΡΡΠ΅.
ΠΠΎΠ·ΠΈΡΠΈΠΈ Π±ΠΎΡΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ
Ρ
ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ Π½Π° Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΡΠ΅Π»Π΅Π²ΡΡ ΡΡΠ΅ΠΉΠΊΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π°. ΠΡΠ»ΠΈ ΡΡΠ΅ΠΉΠΊΠ° Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π°, Π±ΠΎΡ ΠΎΡΡΠ°Π΅ΡΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΠΎΠ³Π΄Π° Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ FRIENDLY
ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΡΡΠ΅ΠΉΠΊΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π»Π΅Π²ΠΎΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΎΡΠΎΠ², ΠΎΠ½ΠΈ ΠΎΡΡΠ°ΡΡΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
ΠΡΠ»ΠΈ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΎΡΠ°ΠΌΠΈ ΡΠΎΠΊΡΠ°ΡΠ°Π΅ΡΡΡ Π΄ΠΎ ATTACK_RADIUS
, ΠΎΠ½ΠΈ Π°ΡΠ°ΠΊΡΡΡ Π΄ΡΡΠ³-Π΄ΡΡΠ³Π°. Π‘ΡΠ΅Π΄ΠΈ Π²ΡΠ΅Ρ
Π°ΡΠ°ΠΊΡΡΡΠΈΡ
Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Π±ΠΎΡ Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ
ΠΌΠΎΠ½Π΅Ρ. ΠΠΎΡΡ Π² Π·ΠΎΠ½Π΅ Π΅Π³ΠΎ Π°ΡΠ°ΠΊΠΈ ΡΡΠΈΡΠ°ΡΡΡΡ ΠΏΠΎΠ±Π΅ΠΆΠ΄Π΅Π½Π½ΡΠΌΠΈ, Π²ΡΠ΅ ΠΈΡ
ΠΌΠΎΠ½Π΅ΡΡ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΡΡ Π°ΡΠ°ΠΊΡΡΡΠ΅ΠΌΡ. ΠΠΎΠ±Π΅ΠΆΠ΄Π΅Π½Π½ΡΠ΅ Π±ΠΎΡΡ Π²ΡΠ±ΡΠ²Π°ΡΡ ΠΈΠ· ΠΌΠ°ΡΡΠ°. ΠΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ Π΄Π»Ρ Π°ΠΊΡΠΈΠ²Π½ΡΡ
Π±ΠΎΡΠΎΠ², Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ
ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π°ΡΠ°ΠΊΠΈ.
ΠΡΠ»ΠΈ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ Π±ΠΎΡΠ° ΠΈ ΠΌΠΎΠ½Π΅ΡΠΎΠΉ ΡΠΎΠΊΡΠ°ΡΠ°Π΅ΡΡΡ Π΄ΠΎ MINING_RADIUS
, Π±ΠΎΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ +1 ΠΊ Π²Π΅ΡΡ (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ
ΠΌΠΎΠ½Π΅Ρ), Π° ΠΌΠΎΠ½Π΅ΡΠ° ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ Ρ ΠΊΠ°ΡΡΡ. ΠΡΠ»ΠΈ ΠΏΡΠ΅ΡΠ΅Π½Π΄Π΅Π½ΡΠΎΠ² Π½Π° ΠΌΠΎΠ½Π΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ, ΠΎΠ½Π° Π΄ΠΎΡΡΠ°Π΅ΡΡΡ Π±ΠΎΡΡ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ Π²Π΅ΡΠΎΠΌ ΠΈΠ»ΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠΌΡ Π±ΠΎΡΡ, Π΅ΡΠ»ΠΈ Π²Π΅Ρ Π²ΡΠ΅Ρ
ΠΏΡΠ΅ΡΠ΅Π½Π΄Π΅Π½ΡΠΎΠ² ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ.
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠ° Π΅ΡΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°: ΠΏΠ΅ΡΠΈΠΎΠ΄ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ½Π΅Ρ COIN_SPAWN_PERIOD
ΠΈ ΠΎΠ±ΡΠ΅ΠΌ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π·Π° ΠΎΠ΄ΠΈΠ½ ΡΠ°ΡΠ½Π΄ COIN_SPAWN_VOLUME
. ΠΠ΅ΡΠΈΠΎΠ΄ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ°ΡΠ½Π΄Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠΎΠ½Π΅ΡΡ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π½Π° ΠΊΠ°ΡΡΠ΅. ΠΡΠ»ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΠ°ΡΠ½Π΄Π° ΠΊΡΠ°ΡΠ΅Π½ COIN_SPAWN_PERIOD
, Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ
ΡΡΠ΅ΠΉΠΊΠ°Ρ
ΠΊΠ°ΡΡΡ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ COIN_SPAWN_VOLUME
Π½ΠΎΠ²ΡΡ
ΠΌΠΎΠ½Π΅Ρ. ΠΠΎΠ·ΠΈΡΠΈΠΈ Π²ΡΠ±ΠΈΡΠ°ΡΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ, Π½ΠΎ ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ°ΡΡΠΎΠ²ΡΡ
ΠΏΠΎΠ·ΠΈΡΠΈΠΉ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ². ΠΠ΅ΡΠ΅Π΄ ΡΡΠ°ΡΡΠΎΠΌ ΠΌΠ°ΡΡΠ° Π΄ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Ρ
ΠΎΠ΄Π° ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½Π°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ.
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΡΡΡ Π·Π°ΠΌΠΊΠ½ΡΡΡ ΠΏΠΎ ΡΠΈΡΠΈΠ½Π΅ ΠΈ Π²ΡΡΠΎΡΠ΅, ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π²Π΄ΠΎΠ»Ρ ΠΎΡΠΈ "ΡΠ΅ΡΠ΅Π· Π³ΡΠ°Π½ΠΈΡΡ" ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ "Π²Π½ΡΡΡΠΈ" ΠΊΠ°ΡΡΡ. ΠΠ° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΎΡΠΌΡΠ»Ρ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ.
ΠΠ»Ρ Π΄Π²ΡΡ
ΠΏΠΎΠ·ΠΈΡΠΈΠΉ p1 = (x1, y1)
ΠΈ p2 = (x2, y2)
dx = min(|x1 - x2|, MAP_WIDTH - |x1 - x2|)
dy = min(|y1 - y2|, MAP_HEIGHT - |y1 - y2|)
ΠΠ²Π°Π΄ΡΠ°Ρ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡΠΌΠΈ
d^2 = dx^2 + dy^2
Π‘ΡΠΈΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠ΅ΠΉΠΊΠΈ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΡΠ°Π΄ΠΈΡΡΠ° R
, Π΅ΡΠ»ΠΈ
d^2 <= R^2
Π’Π΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ .map
, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ±ΠΎ Π²ΡΠ΅Ρ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ
ΠΊΠ°ΡΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ "ΠΊΠ»ΡΡ"-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠ΄Π΅:
map_size
ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ°ΡΡΡ, Π² ΠΊΠ»Π΅ΡΠΊΠ°Ρview_radius
ΡΠ°Π΄ΠΈΡΡ ΠΎΠ±Π·ΠΎΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±ΠΎΡΠ°, Π² ΠΊΠ»Π΅ΡΠΊΠ°Ρattack_radius
ΡΠ°Π΄ΠΈΡΡ Π°ΡΠ°ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±ΠΎΡΠ°, Π² ΠΊΠ»Π΅ΡΠΊΠ°Ρ . ΠΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅view_radius
mining_radius
ΡΠ°Π΄ΠΈΡΡ ΡΠ±ΠΎΡΠ° ΠΌΠΎΠ½Π΅Ρ, Π² ΠΊΠ»Π΅ΡΠΊΠ°Ρ . ΠΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅attack_radius
block
ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅ Π½Π° ΠΊΠ°ΡΡΠ΅spawn_position
ΡΠΎΡΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π±ΠΎΡ. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΊΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΎΡΠΎΠ², Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ°ΡΡΡΠΈΡΠ°Π½Π° ΠΊΠ°ΡΡΠ°.
map_size {MAP_WIDTH} {MAP_HEIGHT}
view_radius {VIEW_RADIUS}
mining_radius {MINING_RADIUS}
attack_radius {ATTACK_RADIUS}
block {X} {Y}
block {X} {Y}
...
spawn_position {X} {Y}
spawn_position {X} {Y}
...
Π’Π΅ΠΊΡΡΠΎΡΠ²ΡΠΉ ΡΠ°ΠΉΠ» Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ .log
.
match
match_id {MATCH_ID}
num_bots {NUM_BOTS}
##MatchConfig
mode {MATCH_MODE}
num_rounds {NUM_ROUNDS}
random_seed {RANDOM_SEED}
move_time_limit {MOVE_TIME_LIMIT}
coin_spawn_period {COIN_SPAWN_PERIOD}
coin_spawn_volume {COIN_SPAWN_VOLUME}
##MapConfig
map_size {MAP_WIDTH} {MAP_HEIGHT}
view_radius {VIEW_RADIUS}
mining_radius {MINING_RADIUS}
attack_radius {ATTACK_RADIUS}
block {X} {Y}
##BotsAndCoinsInfo
bot_name {BOT_ID} {BOT_NAME}
bot {BOT_ID} {X} {Y}
bot_coins {BOT_ID} {NUM_COINS}
coin {X} {Y}
round {ROUND}
bot {BOT_ID} {X} {Y}
bot_coins {BOT_ID} {NUM_COINS}
attack {BOT_1_ID} {BOT_2_ID}
coin_collected {X} {Y} {BOT_ID}
coin {X} {Y}
match_over {BOT_ID}