Skip to content
/ hypernull Public

Croc Code Java School 2021 Project

Notifications You must be signed in to change notification settings

nypi/hypernull

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

45 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

HyperNull

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΏΠΎ сборкС - 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

hello

ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ΡΡ сСрвСром ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π±ΠΎΡ‚Π°. Π’ ΠΎΡ‚Π²Π΅Ρ‚ Π±ΠΎΡ‚ отправляСт Π½Π° сСрвСр сообщСниС register.

hello
protocol_version {PROTOCOL_VERSION}
end
  • PROTOCOL_VERSION тСкущая вСрсия ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° (Ρ†Π΅Π»ΠΎΠ΅ число)

register

ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ΡΡ Π±ΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ сСрвСру.

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_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

update

ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ΡΡ сСрвСром Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°ΡƒΠ½Π΄Π° ΠΈ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠ°Ρ€Ρ‚Π΅ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… радиуса видимости Π±ΠΎΡ‚Π°. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ нСпустой ячСйки Π² сообщСниС Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ bot (Π±ΠΎΡ‚, Π² Ρ‚ΠΎΠΌ числС Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΈΠ³Ρ€ΠΎΠΊ), block (прСпятствиС) ΠΈΠ»ΠΈ coin (ΠΌΠΎΠ½Π΅Ρ‚Π°), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π΅Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹.

update
round {ROUND_NUMBER}
bot {X} {Y} {NUM_BOT_COINS} {BOT_ID}
block {X} {Y}
coin {X} {Y}
end
  • ROUND_NUMBER Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°ΡƒΠ½Π΄Π°, начиная с 1
  • NUM_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

ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ΡΡ Π±ΠΎΡ‚ΠΎΠΌ для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ…ΠΎΠ΄Π° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π°ΡƒΠ½Π΄Π΅. Π—Π° Ρ€Π°ΡƒΠ½Π΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ move. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°ΡƒΠ½Π΄Π΅, ΠΎ Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сСрвСр сигнализируСт сообщСниСм update.

move
offset {DX} {DY}
end
  • DX ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π±ΠΎΡ‚Π° ΠΏΠΎ X: -1, 0, 1
  • DY ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π±ΠΎΡ‚Π° ΠΏΠΎ Y: -1, 0, 1

match_over

ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ΡΡ сСрвСром ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΌΠ°Ρ‚Ρ‡Π° для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π±ΠΎΡ‚Π°.

match_over
end

πŸ₯· Π‘Π°Π½Π·Π°ΠΉ!


ΠœΠ΅Ρ…Π°Π½ΠΈΠΊΠ°

Π”Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСрвСра.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΌΠ°Ρ‚Ρ‡Π°

  • Π‘Π»ΡƒΡ‡Π°ΠΉΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ выбираСтся ΠΈΠ»ΠΈ гСнСрируСтся ΠΊΠ°Ρ€Ρ‚Π°.
  • Π‘ΠΎΡ‚Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² случайныС стартовыС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.
  • ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ вСс (количСство собранных ΠΌΠΎΠ½Π΅Ρ‚) участников устанавливаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ 0.
  • ΠŸΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ пСрвичная гСнСрация ΠΌΠΎΠ½Π΅Ρ‚ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅.

ИзмСнСниС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π±ΠΎΡ‚ΠΎΠ²

ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΈ Π±ΠΎΡ‚ΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² соотвСтствии с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ…ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΈ ограничСниями Π½Π° Π΄ΠΈΡΡ‚Π°Π½Ρ†ΠΈΡŽ пСрСмСщСния. Π‘ΠΎΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ ячСйку, Ссли ΠΎΠ½Π° свободна. Если ячСйка Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π°, Π±ΠΎΡ‚ остаСтся Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Когда Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ FRIENDLY ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ячСйку ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π² качСствС Ρ†Π΅Π»Π΅Π²ΠΎΠΉ нСсколько Π±ΠΎΡ‚ΠΎΠ², ΠΎΠ½ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Атака (DEATHMATCH)

Если расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π±ΠΎΡ‚Π°ΠΌΠΈ сокращаСтся Π΄ΠΎ 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}