We’ll show you how to join CodeCraft in a few minutes.
Of course, you need to register. We kindly ask all participants to provide accurate and complete information about yourself.
Download the package for your favorite programming language from the language packs page. Unzip the archive and open an existing project or create a new one from scratch. You may need to configure some paths.
The app gives you the opportunity to run and test games locally on your computer. Read more about it here.
The official and complete rules are published in the Rules section, please read them. Some organizational aspects you can find in the descriptions of the Sandbox and stages of the championship (Round 1, Round 2, Finals).
You can submit you strategy here. Before the system will accept your strategy, it will be compiled and tested in a few short games. If everything is OK, your strategy will automatically start to participate in regular qualifying games in Sandbox. Carefully read the section “What you should pay attention to” for various aspects due to which your strategy can get the “Verification error” verdict. The total number of submissions are not restricted, however there are restrictions on too frequent submitting. Any attempt to destabilize the system will result in disqualification. You can write your strategy in an arbitrary number of files, you will only need to pack everything into a ZIP archive and send it.
Here is a simple strategy in Python programming language. It is gathering resources, buys units separately for each type and sends them to the opposite map corner with auto attack. Simple strategies for C++, Java, C#, Python and Rust are available in language packages.
from model import *
class MyStrategy:
def get_action(self, player_view, debug_interface):
result = Action({})
my_id = player_view.my_id
for entity in player_view.entities:
if entity.player_id != my_id:
continue
properties = player_view.entity_properties[entity.entity_type]
move_action = None
build_action = None
if properties.can_move:
move_action = MoveAction(
Vec2Int(player_view.map_size - 1,
player_view.map_size - 1),
True,
True)
elif properties.build is not None:
entity_type = properties.build.options[0]
current_units = 0
for other_entity in player_view.entities:
if my_id == other_entity.player_id and other_entity.entity_type == entity_type:
current_units += 1
if (current_units + 1) * player_view.entity_properties[entity_type].population_use <= properties.population_provide:
build_action = BuildAction(
entity_type,
Vec2Int(entity.position.x + properties.size, entity.position.y + properties.size - 1))
result.entity_actions[entity.id] = EntityAction(
move_action,
build_action,
AttackAction(None, AutoAttack(properties.sight_range, [
EntityType.RESOURCE] if entity.entity_type == EntityType.BUILDER_UNIT else [])),
None
)
return result
def debug_update(self, player_view, debug_interface):
debug_interface.send(DebugCommand.Clear())
debug_interface.get_state()
СКБ Контур
В “Простой стратегии” кажется неправильно проверяется доступность юнита для постройки (либо я неправильно понял). Как будто мы должны сравнивать суммарный population_provide по всем активным зданиям с суммарным population_use всех юнитов. А здесь сравнивается использование еды только юнитами того типа, которое здание производит, с производством еды конкретно этим зданием???
В “Простой стратегии” кажется неправильно проверяется доступность юнита для постройки (либо я неправильно понял). Как будто мы должны сравнивать суммарный population_provide по всем активным зданиям с суммарным population_use всех юнитов. А здесь сравнивается использование еды только юнитами того типа, которое здание производит, с производством еды конкретно этим зданием???
Как я понимаю, это сделано для того, чтобы не спамить дешевых юнитов. Каждое производство поддерживает то число юнитов, которое само же и обеспечивает. Это не ограничение системы, а сознательная стратегия производства.
Moscow
Как я понимаю, это сделано для того, чтобы не спамить дешевых юнитов. Каждое производство поддерживает то число юнитов, которое само же и обеспечивает. Это не ограничение системы, а сознательная стратегия производства.
Тогда зачем нужен простой дом, дающий +5 еды, но не производящий никаких юнитов?
Pskov
Тогда зачем нужен простой дом, дающий +5 еды, но не производящий никаких юнитов?
Именно для увеличения лимита юнитов. Данная стратегия делает такую проверку, только потому, что она так хочет. Ничего не мешает построить больше лучников на всю еду или других юнитов.
Moscow
Всем привет.
Я делаю на C#. И не как не могу понять как строить юнитов и/или здания.
Делаю так: 1.Юниты-строители добывают ресурсы. Их становится больше 100. 2.Даю зданию EntityType.BuilderBase команду построить BuildAction build = new BuildAction(EntityType.BuilderUnit, ПОЗИЦИЯ_ЗДАНИЯ_МИНУС_1_ПО_Х); <int, Model.EntityAction> = <ИД_ЗДАНИЯ, new EntityAction(null, build, null, null)>; 3.Но ничего не происходит.
Что я делаю не так?
Всем привет. Я делаю на C#. И не как не могу понять как строить юнитов и/или здания. Делаю так: 1.Юниты-строители добывают ресурсы. Их становится больше 100. 2.Даю зданию EntityType.BuilderBase команду построить BuildAction build = new BuildAction(EntityType.BuilderUnit, ПОЗИЦИЯ_ЗДАНИЯ_МИНУС_1_ПО_Х); <int, Model.EntityAction> = <ИД_ЗДАНИЯ, new EntityAction(null, build, null, null)>; 3.Но ничего не происходит. …
Нужно указывать место рядом с базой, а не место ее самой.
Всем привет. Я делаю на C#. И не как не могу понять как строить юнитов и/или здания. Делаю так: 1.Юниты-строители добывают ресурсы. Их становится больше 100. 2.Даю зданию EntityType.BuilderBase команду построить BuildAction build = new BuildAction(EntityType.BuilderUnit, ПОЗИЦИЯ_ЗДАНИЯ_МИНУС_1_ПО_Х); <int, Model.EntityAction> = <ИД_ЗДАНИЯ, new EntityAction(null, build, null, null)>; 3.Но ничего не происходит. …
… и это место должно быть свободно
Krasnoyarsk
Всем привет. Может кто-нибудь поделиться примером использования EntityAction и Action на с++? Я что-то совсем не понимаю как установить действие для юнита и потом выполнить его (
NekBrainLab
Простая стратегия на Kotlin (не обессудте Kotlin освоил за 1 день - вчера): import model.* import java.text.FieldPosition import kotlin.math.sqrt
class MyStrategy { var resurs: MutableList = mutableListOf() var enemies: MutableList = mutableListOf() var countBuU: Int = 0 var countRaU: Int = 0 var validTarget: Array<model.EntityType> = arrayOf(model.EntityType.RANGED_UNIT, model.EntityType.BUILDER_UNIT, model.EntityType.MELEE_UNIT, model.EntityType.RESOURCE)
private fun findNear(position: Vec2Int, arrVec2Int: MutableList<Vec2Int>): Vec2Int {
var coorResmin: Vec2Int = position
var minLen = 1000000
var len = 0
for (coorRes in arrVec2Int) {
len = (position.x - coorRes.x)*(position.x - coorRes.x) + (position.y - coorRes.y)*(position.y - coorRes.y)
if (len < minLen) {
minLen = len
coorResmin = coorRes
}
if (len < 4) {
break
}
}
return coorResmin
}
fun getAction(playerView: PlayerView, debugInterface: DebugInterface?): Action {
var entityActions: MutableMap<Int, model.EntityAction> = mutableMapOf()
var myId = playerView.myId
var tick = playerView.currentTick
var j = 1
if (tick%2 == 0) {
j = -1
}
var maxSize = playerView.mapSize
var i = 1
if (countBuU > countRaU) {
i = -1
}
//println("Build= $countBuU Ran= $countRaU i= $i")
var res = 0
for (player in playerView.players) {
if (player.id == myId) {
res = player.resource
}
}
var entityProperties = playerView.entityProperties
resurs = mutableListOf()
enemies = mutableListOf()
for (entity in playerView.entities) {
if (entity.entityType == model.EntityType.RESOURCE) {
resurs?.add(entity.position)
} else if (entity.playerId != null) {
if (entity.playerId != myId) {
enemies?.add(entity.position)
}
}
}
countBuU = 0
countRaU = 0
for (entity in playerView.entities) {
if (entity.playerId == myId) {
val entityAction = model.EntityAction()
var properties = playerView.entityProperties[entity.entityType]
val moveAction = model.MoveAction()
val buildAction = model.BuildAction()
val attackAction = model.AttackAction()
val repairAction = model.RepairAction()
if (entity.entityType == model.EntityType.BUILDER_UNIT) {
countBuU += 1
moveAction.target = findNear(entity.position, resurs)
moveAction.breakThrough = true
moveAction.findClosestPosition = true
entityAction.moveAction = moveAction
entityActions.put(entity.id, entityAction)
} else if (entity.entityType == model.EntityType.MELEE_UNIT || entity.entityType == model.EntityType.RANGED_UNIT) {
countRaU += 1
//if (j == 1) {
moveAction.target = findNear(entity.position, enemies)
moveAction.breakThrough = true
moveAction.findClosestPosition = true
entityAction.moveAction = moveAction
entityActions.put(entity.id, entityAction)
//} else {
attackAction.target = null
var autoAt = model.AutoAttack()
autoAt.pathfindRange = maxSize
autoAt.validTargets = validTarget
attackAction.autoAttack = autoAt
entityAction.attackAction = attackAction
entityActions.put(entity.id, entityAction)
//}
} else if (entity.entityType == model.EntityType.BUILDER_BASE) {
if (i == 1) {
buildAction.entityType = model.EntityType.BUILDER_UNIT
if (properties != null) {
buildAction.position =
Vec2Int(entity.position.x + properties.size, entity.position.y + properties.size - 1)
}
entityAction.buildAction = buildAction
} else {
entityAction.buildAction = null
}
entityActions.put(entity.id, entityAction)
} else if (entity.entityType == model.EntityType.RANGED_BASE) {
if (i == -1) {
buildAction.entityType = model.EntityType.RANGED_UNIT
if (properties != null) {
buildAction.position =
Vec2Int(entity.position.x + properties.size, entity.position.y + properties.size - 1)
}
entityAction.buildAction = buildAction
} else {
entityAction.buildAction = null
}
entityActions.put(entity.id, entityAction)
}
}
}
return Action(entityActions)
}
fun debugUpdate(playerView: PlayerView, debugInterface: DebugInterface) {
debugInterface.send(model.DebugCommand.Clear())
debugInterface.getState()
}
}
Ребят, пытаюсь на JS отослать .zip со стратегией, внутри только my-strategy.js + мои доп файлы, получаю: https://ibb.co/t34mq6W
Есть иди что он хочет? :) Или кто-то на JS поделитесь успешным опытом
Ребят, пытаюсь на JS отослать .zip со стратегией, внутри только my-strategy.js + мои доп файлы, получаю: https://ibb.co/t34mq6W Есть иди что он хочет? :) Или кто-то на JS поделитесь успешным опытом
При отправке архивом нужно прикладывать все файлы, тк вы можете менять все что есть в исходном пакете
Stavropol
Могли бы хотя бы комментарии написать, чтобы было проще разобраться
При отправке архивом нужно прикладывать все файлы, тк вы можете менять все что есть в исходном пакете
Оу, Спасибо - помогло!
Saint Petersburg
стратегия georg_karr_spb без изменений на c#, только для старта, если кому надо будет.
public class MyStrategy
{
private int _countBuU;
private int _countRaU;
private List<Vec2Int> _enemies;
private List<Vec2Int> _resource;
private readonly EntityType[] _validTargets = { EntityType.RangedUnit, EntityType.BuilderUnit, EntityType.MeleeUnit, EntityType.Resource };
private Vec2Int findNear(Vec2Int position, List<Vec2Int> arrVec2Int)
{
Vec2Int coorResMin = position;
int minLen = 1000000;
foreach (Vec2Int coorRes in arrVec2Int)
{
int len = (position.X - coorRes.X) * (position.X - coorRes.X) + (position.Y - coorRes.Y) * (position.Y - coorRes.Y);
if (len < minLen)
{
minLen = len;
coorResMin = coorRes;
}
if (len < 4)
{
break;
}
}
return coorResMin;
}
public Action GetAction(PlayerView playerView, DebugInterface debugInterface)
{
Dictionary<int, EntityAction> entityActions = new Dictionary<int, EntityAction>();
var myId = playerView.MyId;
var tick = playerView.CurrentTick;
/*var j = 1;
if (tick % 2 == 0)
{
j = -1;
}*/
var maxSize = playerView.MapSize;
var i = 1;
if (_countBuU > _countRaU)
{
i = -1;
}
//println("Build= $countBuU Ran= $countRaU i= $i")
/*var res = 0;
foreach (var player in playerView.Players)
{
if (player.Id == myId)
{
res = player.Resource;
}
}
var entityProperties = playerView.EntityProperties;
*/
_resource = new List<Vec2Int>();
_enemies = new List<Vec2Int>();
foreach (var entity in playerView.Entities)
{
if (entity.EntityType == EntityType.Resource)
{
_resource?.Add(entity.Position);
}
else if (entity.PlayerId != null)
{
if (entity.PlayerId != myId)
{
_enemies?.Add(entity.Position);
}
}
}
_countBuU = 0;
_countRaU = 0;
foreach (var entity in playerView.Entities)
{
if (entity.PlayerId == myId)
{
var entityAction = new EntityAction();
var properties = playerView.EntityProperties[entity.EntityType];
var moveAction = new MoveAction();
var buildAction = new BuildAction();
var attackAction = new AttackAction();
// var repairAction = new RepairAction();
if (entity.EntityType == EntityType.BuilderUnit)
{
_countBuU += 1;
moveAction.Target = findNear(entity.Position, _resource);
moveAction.BreakThrough = true;
moveAction.FindClosestPosition = true;
entityAction.MoveAction = moveAction;
entityActions[entity.Id] = entityAction;
}
else if (entity.EntityType == EntityType.MeleeUnit || entity.EntityType == EntityType.RangedUnit)
{
_countRaU += 1;
//if (j == 1) {
moveAction.Target = findNear(entity.Position, _enemies);
moveAction.BreakThrough = true;
moveAction.FindClosestPosition = true;
entityAction.MoveAction = moveAction;
entityActions.Add(entity.Id, entityAction);
//} else {
attackAction.Target = null;
var autoAt = new AutoAttack();
autoAt.PathfindRange = maxSize;
autoAt.ValidTargets = _validTargets;
attackAction.AutoAttack = autoAt;
entityAction.AttackAction = attackAction;
entityActions[entity.Id] = entityAction;
//}
}
else if (entity.EntityType == EntityType.BuilderBase)
{
if (i == 1)
{
buildAction.EntityType = EntityType.BuilderUnit;
// if (properties != null)
{
buildAction.Position = new Vec2Int(entity.Position.X + properties.Size, entity.Position.Y + properties.Size - 1);
}
entityAction.BuildAction = buildAction;
}
else
{
entityAction.BuildAction = null;
}
entityActions[entity.Id] = entityAction;
}
else if (entity.EntityType == EntityType.RangedBase)
{
if (i == -1)
{
buildAction.EntityType = EntityType.RangedUnit;
// if (properties != null)
{
buildAction.Position = new Vec2Int(entity.Position.X + properties.Size, entity.Position.Y + properties.Size - 1);
}
entityAction.BuildAction = buildAction;
}
else
{
entityAction.BuildAction = null;
}
entityActions[entity.Id] = entityAction;
}
}
}
return new Action(entityActions);
}
public void DebugUpdate(PlayerView playerView, DebugInterface debugInterface)
{
debugInterface.Send(new DebugCommand.Clear());
debugInterface.GetState();
}
}
???
Всем привет! Подскажите, плиз, что может означать такое при отправке стратегии на питоне?
stdout:
stderr:
+ cd /output
+ python ./main.py gameserver 31001 f321179371b560cb0dd77458afe4f3a5daee16ce_0
Exit code:137
Memory used: 17MB
Consumed time: 40672
TIME LIMIT EXCEEDED
Player crashed: IO error: Resource temporarily unavailable (os error 11)
Всем привет! Подскажите, плиз, что может означать такое при отправке стратегии на питоне? stdout:
stderr: + cd /output + python ./main.py gameserver 31001 f321179371b560cb0dd77458afe4f3a5daee16ce_0 Exit code:137 Memory used: 17MB Consumed time: 40672 TIME LIMIT EXCEEDED Player crashed: IO error: Resource temporarily unavailable (os error 11)
И да, процессов не создаю, родные файлы не трогал. В stdout и на диск ничего не пишу
Всем привет! Подскажите, плиз, что может означать такое при отправке стратегии на питоне? stdout:
stderr: + cd /output + python ./main.py gameserver 31001 f321179371b560cb0dd77458afe4f3a5daee16ce_0 Exit code:137 Memory used: 17MB Consumed time: 40672 TIME LIMIT EXCEEDED Player crashed: IO error: Resource temporarily unavailable (os error 11)
Случалось подобное, когда стратегия пыталась строить за пределами поля или гнала туда юнита.
stderr: + cd /output + python ./main.py gameserver 31001 f321179371b560cb0dd77458afe4f3a5daee16ce_0 Exit code:137 Memory used: 17MB Consumed time: 40672 TIME LIMIT EXCEEDED Player crashed: IO error: Resource temporarily unavailable (os error 11) Случалось подобное, когда стратегия пыталась строить за пределами поля или гнала туда юнита.
Хм, строить умеет только рабочих, а юнитов гонит только к ресурсам. По идее если ресурс есть - значит он в пределе карты. Спасибо за наводку, ума не приложу как такое локально проверить, но попробую)
Всем привет! Подскажите, плиз, что может означать такое при отправке стратегии на питоне? stdout:
stderr: + cd /output + python ./main.py gameserver 31001 f321179371b560cb0dd77458afe4f3a5daee16ce_0 Exit code:137 Memory used: 17MB Consumed time: 40672 TIME LIMIT EXCEEDED Player crashed: IO error: Resource temporarily unavailable (os error 11)
TIME LIMIT EXCEEDED?
Стратегию в режиме второго раунда или финала проверяли?
itv group
Коллеги, я строю дома House, они строятся но почему то лимит юнитов не увеличивается. В чем секрет?
itv group
Коллеги, я строю дома House, они строятся но почему то лимит юнитов не увеличивается. В чем секрет?
Дома отстраиваются но постоянно 15 из 15 юнитов. Стратегия на C#.
Может баг какой?
Nizhny Novgorod
Дома отстраиваются но постоянно 15 из 15 юнитов. Стратегия на C#. Может баг какой?
Дома появляются с неполным “здоровьем”. Пока <100%, не работает.
NekBrainLab
Коллеги, я строю дома House, они строятся но почему то лимит юнитов не увеличивается. В чем секрет?
Отремонтируй до здоровья 100%
РГППУ
stdout:
stderr: + cd /output + dotnet ./aicup2020.dll gameserver 31004 be1bc927763649a2420b09e4eaaedd1b5ad0fbf6_3 Unhandled exception. System.IO.EndOfStreamException: Unable to read beyond the end of the stream. at System.IO.BinaryReader.InternalRead(Int32 numBytes) at System.IO.BinaryReader.ReadInt32() at Aicup2020.Model.ServerMessage.ReadFrom(BinaryReader reader) in /project/Model/ServerMessage.cs:line 17 at Aicup2020.Runner.Run() in /project/Runner.cs:line 29 at Aicup2020.Runner.Main(String[] args) in /project/Runner.cs:line 56 run.sh: line 4: 8 Aborted (core dumped) dotnet ./aicup2020.dll “$@” Exit code:134 Memory used: 18MB Consumed time: 539
Локально работает, при отправке ошибка!! Куда копать?
stdout: stderr: + cd /output + dotnet ./aicup2020.dll gameserver 31004 be1bc927763649a2420b09e4eaaedd1b5ad0fbf6_3 Unhandled exception. System.IO.EndOfStreamException: Unable to read beyond the end of the stream. at System.IO.BinaryReader.InternalRead(Int32 numBytes) at System.IO.BinaryReader.ReadInt32() at Aicup2020.Model.ServerMessage.ReadFrom(BinaryReader reader) in /project/Model/ServerMessage.cs:line 17 at Aicup2020.Runner.Run() in /project/Runner.cs:line 29 at Aicup2020.Runner.Main(String[] args) in /project/Runner.cs:line 56 run.sh: line 4: 8 Aborted (core dumped) dotnet ./aicup2020.dll “$@” Exit code:134 Memory used: 18MB Consumed time: 539 …
Точно такая же ошибка :( Как-нибудь решилось?
Артем
Не пойму чо за прикол. Говорю строителю строй туррель а он не строит: buildaction = model.BuildAction(EntityType.TURRET, positionforbuild) entity_action = model.EntityAction(None, buildaction, None, None) actions[builderunit.id] = entity_action Стоит и все. И ничего не происходит. Ресурсов хвататет. Подвел к ячейке рядом.
itv group
Сегодня юниты перестали собирать ресуры, что изменили в эмуляции с апдейтом?
itv group
moveAction.Target = findNear(playerView.Entities[Ind].Position, resurs);
moveAction.BreakThrough = true;
moveAction.FindClosestPosition = false;
entityAction.MoveAction = moveAction;
entityActions.Add(playerView.Entities[Ind].Id, entityAction);
Больше не работает, строитель стоит и не добывает ресурс, попробовать атаковать ресурс по ID - тоже ничего не происходит….
Moscow
Точно такая же ошибка :( Как-нибудь решилось?
Была тоже такая ошибка. У меня была связана с тем, что я Runner.cs релизовой версии случайно подменил отладочным, в котором были правки, помогающие мне отлаживаться - запуск сторонних экзешников, запись в файлы и т.д.
Moscow
moveAction.Target = findNear(playerView.Entities[Ind].Position, resurs); moveAction.BreakThrough = true; moveAction.FindClosestPosition = false; entityAction.MoveAction = moveAction; entityActions.Add(playerView.Entities[Ind].Id, entityAction);
…
1 числа был апдейт в котором починили “баг”, который выглядел скорее как фича - если не указать коллекцию целей для автоатаки, то юнит атакует всех. Теперь пустая коллекция означает что юнит не будет атаковать вообще никого. Может проблема в этом?
Артем
moveAction.Target = findNear(playerView.Entities[Ind].Position, resurs); moveAction.BreakThrough = true; moveAction.FindClosestPosition = false; entityAction.MoveAction = moveAction; entityActions.Add(playerView.Entities[Ind].Id, entityAction);
…
У меня такое же в тестовых играх на сайте. В приложении все ок.
Точно такая же ошибка :( Как-нибудь решилось?
Решилось, баг на моей стороне, вышел за пределы карты при указании точки перемещения/строительства/атаки
КФУ им. В.И. Вернадского
Сам немного прифигел, когда увидел, что у меня по нулям счёт в нескольких последних играх. Короче теперь билдерам нельзя указывать MoveAction с breakThrough, теперь можно использовать только AttackAction с автоатакой, типа вот так:
attackAction.Target = next.Id;
var autoAt = new AutoAttack();
autoAt.PathfindRange = playerView.MapSize;
autoAt.ValidTargets = new EntityType[] { EntityType.Resource };
attackAction.AutoAttack = autoAt;
СКБ Контур
Всем привет! Кто юзает python, случаем не ловили ошибку при отправке игры?
Traceback (most recent call last):
File "/output/./main.py", line 45, in <module>
Runner(host, port, token).run()
File "/output/./main.py", line 26, in run
message = model.ServerMessage.read_from(self.reader)
File "/output/model/server_message.py", line 4, in read_from
tag = stream.read_int()
File "/output/stream_wrapper.py", line 26, in read_int
return self.INT_FORMAT_STRUCT.unpack(self.stream.read(4))[0]
struct.error: unpack requires a buffer of 4 bytes
Артем
Всем привет! Кто юзает python, случаем не ловили ошибку при отправке игры? Traceback (most recent call last): File “/output/./main.py”, line 45, in Runner(host, port, token).run() File “/output/./main.py”, line 26, in run message = model.ServerMessage.read_from(self.reader) File “/output/model/server_message.py”, line 4, in read_from tag = stream.read_int() File “/output/stream_wrapper.py”, line 26, in read_int return self.INT_FORMAT_STRUCT.unpack(self.stream.read(4))[0] struct.error: unpack requires a buffer of 4 bytes
Что-то было похожее. Где-то ошибка моя была. То ли не словарь передавал в Action, то ли где-то в объекты действий не ожидаемый тип писал.
Shatura
Привет! На что ругается валидатор? stdout:
stderr: + cd /output + java -Xmx250m -jar ./aicup2020-jar-with-dependencies.jar gameserver 31003 93464b80d7c862f727904da391eefbe37822c0a8_2 Exception in thread “main” java.io.IOException: Unexpected EOF at util.StreamUtil.readBytes(StreamUtil.java:23) at util.StreamUtil.readInt(StreamUtil.java:33) at model.ServerMessage.readFrom(ServerMessage.java:8) at Runner.run(Runner.java:29) at Runner.main(Runner.java:51) Exit code:1 Memory used: 40MB Consumed time: 2578
А скиньте кто-нибудь началку на Питоне, плиз, по-братски) Чет сходу так трудно разобраться.
СКБ Контур
Что-то было похожее. Где-то ошибка моя была. То ли не словарь передавал в Action, то ли где-то в объекты действий не ожидаемый тип писал.
Спасибо, буду чинить)
Артем
Что означает такое сообщение при отправке на сайт?
stdout:
stderr: + cd /output + python ./main.py gameserver 31001 6de77eb79dafdcab67bfd4bdd6ce1185b5aefe0c_0 Exit code:137 Memory used: 8MB Consumed time: 40152 TIME LIMIT EXCEEDED Player crashed: IO error: failed to fill whole buffer
Что означает такое сообщение при отправке на сайт? stdout: stderr: + cd /output + python ./main.py gameserver 31001 6de77eb79dafdcab67bfd4bdd6ce1185b5aefe0c_0 Exit code:137 Memory used: 8MB Consumed time: 40152 TIME LIMIT EXCEEDED Player crashed: IO error: failed to fill whole buffer
Превышено отведённое ограничение по времени (40 секунд)
Minsk
Всем привет, говорили, что скинут простую стратегию для разных ЯП. Может Я куда-то не туда смотрю, но для python не вижу. Может кто-то может поделиться с чего начать. Это мой первый опыт в подобных соревнованиях, заранее благодарю
Всем привет, говорили, что скинут простую стратегию для разных ЯП. Может Я куда-то не туда смотрю, но для python не вижу. Может кто-то может поделиться с чего начать. Это мой первый опыт в подобных соревнованиях, заранее благодарю
для примера двигаться так: moveAction = model.MoveAction(ResourseForAtack.position, True, True) entity_action = model.EntityAction(moveAction, None, None, None) actions[builderunit.id] = entity_action
Артем
Кто на Питоне? Я все скурил, не могу понять почему не строит. Места полно. Юнит стоит рядом вплотную. Ресурсов хватат. buildaction = model.BuildAction(EntityType.HOUSE,positionforbuild) entity_action = model.EntityAction(None, buildaction, None, None) actions[builderunit.id] = entity_action и нифига
Кто на Питоне? Я все скурил, не могу понять почему не строит. Места полно. Юнит стоит рядом вплотную. Ресурсов хватат. buildaction = model.BuildAction(EntityType.HOUSE,positionforbuild) entity_action = model.EntityAction(None, buildaction, None, None) actions[builderunit.id] = entity_action и нифига
Сам долго курил, как эти дома строить. Как наберется дофига ресов, выдели одного главного строителя, и двигай его скажем по оси Y, и пытайся строить дом на клеточку вправо от строителя. Где свободное место будет, там построится.
Сам долго курил, как эти дома строить. Как наберется дофига ресов, выдели одного главного строителя, и двигай его скажем по оси Y, и пытайся строить дом на клеточку вправо от строителя. Где свободное место будет, там построится.
Спасибо, дружище. Ты навел меня на мысль. Я то целый алгоритм построил. Он мне удасное место находит и я подгоняю туда строителя. Но я его ставил на соседнюю клетку по-диагонали. А сейчас опробовал не по диагонали, а через стенку. И о чудо! Считаю это недоработкой приложения.
Подскажите, пожалуйста, вот у меня есть какая-то стратегия. Я скачал приложение, для того, чтобы проверить у себя, как мне эту стратегию подключить? Python
Подскажите, пожалуйста, вот у меня есть какая-то стратегия. Я скачал приложение, для того, чтобы проверить у себя, как мне эту стратегию подключить? Python
Запускай сначала приложение, потом выбери одного из игроков “TCP”. Затем запусти свой файл со стратегией. Если все нормально, в приложении будет написано, что ты подключен.
Всем привет, говорили, что скинут простую стратегию для разных ЯП. Может Я куда-то не туда смотрю, но для python не вижу. Может кто-то может поделиться с чего начать. Это мой первый опыт в подобных соревнованиях, заранее благодарю
ПЛЮСУЮ
ПЛЮСУЮ
В тексте приведена Простая стратегия на Питоне: “Далее приведена простая стратегия на языке Python. Она собирает ресурсы, покупает юнитов отдельно для каждого типа и посылает их в атаку в противоположный угол карты. Простые стратегии для C++, Java, C#, Python и Rust доступны в языковых пакетах.”
Харьковский НУ им. Каразина
Кто-то может подстказать нужно ли приходить к месту постройки здания, а потом строить или указав координаты стройки рабочему я уже направляю его в нужно место?
Ещё Кто-то сталкивался с тем что С++ не копилится (стартовая версия) ? 1>CMakeCXXCompilerId.obj : error LNK2005: _main already defined in main.obj 1>CMakeCCompilerId.obj : error LNK2005: _main already defined in main.obj 1>Debug\main.obj : warning LNK4042: object specified more than once; extras ignored 1>MSVCRTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 1>C:\Users\srlis\Downloads\aicup-Cpp (2)\Debug\AiCup.exe : fatal error LNK1120: 1 unresolved externals
Всем привет, говорили, что скинут простую стратегию для разных ЯП. Может Я куда-то не туда смотрю, но для python не вижу. Может кто-то может поделиться с чего начать. Это мой первый опыт в подобных соревнованиях, заранее благодарю
https://github.com/MailRuChamps/raic-2020/blob/main/clients/Python/my_strategy.py
VMedia
Здрасьти! Отправляю C# Получаю ошибку верификации - NRE при обращении к static классу. Локально всё оттестировано, работает. Как локально сэмулировать боевую сборку?
СМПК
Здравствуйте! Пытаюсь закупить юнитов, кидаю action, дамп action снизу. Но сами юниты не закупаются, почему? array(2) { [11]=> object(EntityAction)#4821 (4) { [“moveAction”]=> NULL [“buildAction”]=> NULL [“attackAction”]=> object(AttackAction)#4820 (2) { [“target”]=> NULL [“autoAttack”]=> object(AutoAttack)#4813 (2) { [“pathfindRange”]=> int(9999) [“validTargets”]=> array(1) { [0]=> int(8) } } } [“repairAction”]=> NULL } [15]=> object(EntityAction)#4822 (4) { [“moveAction”]=> NULL [“buildAction”]=> object(BuildAction)#4814 (2) { [“entityType”]=> int(3) [“position”]=> object(Vec2Int)#4817 (2) { [“x”]=> int(15) [“y”]=> int(4) } } [“attackAction”]=> NULL [“repairAction”]=> NULL } }
VMedia
Здравствуйте! Пытаюсь закупить юнитов, кидаю action, дамп action снизу. Но сами юниты не закупаются, почему? array(2) { [11]=> object(EntityAction)#4821 (4) { [“moveAction”]=> NULL [“buildAction”]=> NULL [“attackAction”]=> object(AttackAction)#4820 (2) { [“target”]=> NULL [“autoAttack”]=> object(AutoAttack)#4813 (2) { [“pathfindRange”]=> int(9999) [“validTargets”]=> array(1) { [0]=> int(8) } } } [“repairAction”]=> NULL } [15]=> object(EntityAction)#4822 (4) { [“moveAction”]=> NULL [“buildAction”]=> object(BuildAction)#4814 (2) { [“entityType”]=> int(3) [“position”]=> object(Vec2Int)#4817 (2) { [“x”]=> int(15) [“y”]=> int(4) } } [“attackAction”]=> NULL [“repairAction”]=> NULL } }
Должны быть соблюдены условия: - достаточно ресурса - достаточно еды - position на расстоянии 1 от базы (вплотную к её стене) - в точке position никого нет
https://github.com/MailRuChamps/raic-2020/blob/main/clients/Python/my_strategy.py
Можно скачать от сюда: https://russianaicup.ru/p/packs
СМПК
Должны быть соблюдены условия: - достаточно ресурса - достаточно еды - position на расстоянии 1 от базы (вплотную к её стене) - в точке position никого нет
все соблюдено
ПЛЮСУЮ
Можно скачать от сюда: https://russianaicup.ru/p/packs
VMedia
Здрасьти! Отправляю C# Получаю ошибку верификации - NRE при обращении к static классу. Локально всё оттестировано, работает. Как локально сэмулировать боевую сборку?
Сам сглупил - пакет просто надо обновлять полностью, а не частями ))
Спасибо, дружище. Ты навел меня на мысль. Я то целый алгоритм построил. Он мне удасное место находит и я подгоняю туда строителя. Но я его ставил на соседнюю клетку по-диагонали. А сейчас опробовал не по диагонали, а через стенку. И о чудо! Считаю это недоработкой приложения.
Это не недоработка приложения, это явно обозначено в правилах и относится не только к строительству, но и к ремонту, урону и т.п. Т.е зона поражения лучника - не квадрат 11*11, а ромб с диагоналями 11*11. А у милишника - не 8 клеток бьются, а только 4.
РГППУ
А построил дом за пределами карты, позиции -2,-2 ))) на карте виднеется уголок, одна клетка, но починить его не дает ))) вот такой баг нашел
http://prntscr.com/vxqk4v можно посмотреть в бою https://russianaicup.ru/game/view/50923 баг повторяется
А построил дом за пределами карты, позиции -2,-2 ))) на карте виднеется уголок, одна клетка, но починить его не дает ))) вот такой баг нашел http://prntscr.com/vxqk4v можно посмотреть в бою https://russianaicup.ru/game/view/50923 баг повторяется
это не дом это так стена отображается , попробуйте переключить в 3д и покрутить
А построил дом за пределами карты, позиции -2,-2 ))) на карте виднеется уголок, одна клетка, но починить его не дает ))) вот такой баг нашел http://prntscr.com/vxqk4v можно посмотреть в бою https://russianaicup.ru/game/view/50923 баг повторяется
Так получается если возвращать просто new BuildAction();
EntityType.Wall == 0 и координаты по умолчанию (0, 0)
это не дом это так стена отображается , попробуйте переключить в 3д и покрутить
Это Дом, я не строю стены
Это Дом, я не строю стены
а когда ничего не строите null вместо new BuilAction() ?
а когда ничего не строите null вместо new BuilAction() ?
Заменил везде null на new BuildAction() все равно квадрат строит
Заменил везде null на new BuildAction() все равно квадрат строит
верните null, наоборот если null то ничего не строит а если new BuildAction() то построит стену с координатами (0,0) опять же в случае если юнит рядом с этими координатами т.е должно совпасть 2 условия
Moscow
Простая стратегия на Ruby: require_relative ‘model’
class MyStrategy
def get_action(player_view, debug_interface)
result = Action.new({})
my_id = player_view.my_id
player_view.entities.filter{|entity| entity.player_id == my_id}.each do |entity|
properties = player_view.entity_properties[entity.entity_type]
move_action = nil
build_action = nil
if properties.can_move
move_action = MoveAction.new(
Vec2Int.new(player_view.map_size - 1,
player_view.map_size - 1),
true,
true)
elsif !properties.build.nil?
entity_type = properties.build.options[0]
current_units = player_view.entities.filter{ |other_entity| my_id == other_entity.player_id && other_entity.entity_type == entity_type}.size
if (current_units + 1) * player_view.entity_properties[entity_type].population_use <= properties.population_provide
build_action = BuildAction.new(
entity_type,
Vec2Int.new(entity.position.x + properties.size, entity.position.y + properties.size - 1)
)
end
end
result.entity_actions[entity.id] = EntityAction.new(
move_action,
build_action,
AttackAction.new(nil, AutoAttack.new(properties.sight_range, entity.entity_type == EntityType::BUILDER_UNIT ? [EntityType::RESOURCE] : [])),
nil
)
end
result
end
def debug_update(player_view, debug_interface)
debug_interface.send(DebugCommand::Clear.new())
debug_interface.get_state()
end
end
Kvantorium15
Вопрос, наверное, к коллегам питонистам. Могу ли я, для того чтобы сохранять информацию между тиками сделать у класса MyStrategy init и в его полях чтото хранить? или экземпляр класса создается при каждом запуске?
Вопрос, наверное, к коллегам питонистам. Могу ли я, для того чтобы сохранять информацию между тиками сделать у класса MyStrategy init и в его полях чтото хранить? или экземпляр класса создается при каждом запуске?
Да, все прекрасно сохраняется, оно для того и сделано классом, чтобы в полях и методах работать с основными данными.
Хотам и П.В
можете помочь с проблемой мой код работотает для всех цветов кроме оранджевого не знаете в чём проблема?
можете помочь с проблемой мой код работотает для всех цветов кроме оранджевого не знаете в чём проблема?
bibigul, в коде учтено, что координаты всегда приходят так, как будто вы в углу (0, 0)?
bibigul, в коде учтено, что координаты всегда приходят так, как будто вы в углу (0, 0)?
да
да
да но почему- то когда я играю за оранджевых мои юниты ничего не делают а так все норм работает
Karachev
Стены — самые бесполезные юниты в игре. Они стоят 10 ресурса, но требуют 45 рабоче-тиков, чтобы выйти онлайн. Это эффективно 55 ресурсов. За эти деньги можно купить 2-3 мечника (в зависимости от фазы игры) и иметь мобильность, возможность атаковать, в 5 раз больший обзор и суммарное HP 100-150 против 50 у стены. Вот если бы у стен (да и у туррелей за одно) было бы 3-4 Damage Reduction, то тогда их EHP было бы 200-250, а один тик ремонта шёл бы за 4-5 EHP. Было бы куда привлекательные их использовать, особенно, когда закончились ресурсы на карте.
Алсо, у меня вопрос. Верно ли, что неактивные здания не дают никакого обзора?
NetCracker
В симуляторе строю дома, а доступный population не растёт Кто сталкивался?
Dublin
В симуляторе строю дома, а доступный population не растёт Кто сталкивался?
чини их
NetCracker
чини их
Спасибо, в правилах как-то размыто об этом написано “Для активации сущности она должна сперва достигнуть максимального значения здоровья. Так что, если сущность была построена с неполным здоровьем, ее будет необходимо отремонтировать”
Bad Soden am Taunus
Здравствуйте!
А нельзя ли добавить в Java-e библиотеку fastutil, а то вот что происходит, если ее добавить в pom.xml:
[INFO] Scanning for projects… [INFO] [INFO] ————–< com.codegame.aicup2020.devkit:aicup2020 >————— [INFO] Building aicup2020 1.0-SNAPSHOT [INFO] ——————————–[ jar ]——————————— [INFO] Downloading from central: https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/8.4.4/fastutil-8.4.4.pom [INFO] ———————————————————————— [INFO] BUILD FAILURE [INFO] ———————————————————————— [INFO] Total time: 11.675 s [INFO] Finished at: 2020-12-15T19:14:42Z [INFO] ———————————————————————— [ERROR] Failed to execute goal on project aicup2020: Could not resolve dependencies for project com.codegame.aicup2020.devkit:aicup2020:jar:1.0-SNAPSHOT: Failed to collect dependencies at it.unimi.dsi:fastutil:jar:8.4.4: Failed to read artifact descriptor for it.unimi.dsi:fastutil:jar:8.4.4: Could not transfer artifact it.unimi.dsi:fastutil:pom:8.4.4 from/to central (https://repo.maven.apache.org/maven2): Transfer failed for https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/8.4.4/fastutil-8.4.4.pom: Unknown host repo.maven.apache.org: Name or service not known -> [Help 1]
Podolsk
Всем привет, при отправке стратегии на C++ столкнулся с ошибкой верификации:
stdout:
stderr:
+ cd /output
+ ./aicup2020 gameserver 31001 dbb5b55585186555f2912303c84ef31e625edd11_0
run.sh: line 4: 8 Segmentation fault (core dumped) ./aicup2020 "$@"
Exit code:139
Memory used: 3MB
Consumed time: 1112 ms
Player crashed: IO error: failed to fill whole buffer
Из ошибки, похоже на выход за границы массива.
Локально в режимах DEBUG/RELEASE все работает, обложился try/catch все равно не помогает
Подскажите пожалуйста, может кто сталкивался с таким? Или может возможно достать какой-то более подробный лог или попытаться воспроизвести ошибку локально?
Всем привет, при отправке стратегии на C++ столкнулся с ошибкой верификации: stdout:
stderr: + cd /output + ./aicup2020 gameserver 31001 dbb5b55585186555f2912303c84ef31e625edd11_0 run.sh: line 4: 8 Segmentation fault (core dumped) ./aicup2020 “$@” Exit code:139 Memory used: 3MB Consumed time: 1112 ms Player crashed: IO error: failed to fill whole buffer …
Проблему решил, закомменчивал функции по одной и отправлял на сервер, таким макаром нашел место где падает, убрал все вызовы этой функции и все ок. Судя по всему я где-то неправильно работал с unordered_map.
Moscow
Что происходит с сервером? При попытке загрузить стратегию постоянно выдает ошибку превышения по времени. Хотя пытаюсь загрузить версии, которые раньше нормально работали. В итоге загрузился стартгай, а заменить его на какую-либо нормальную версию не получается(
Университет ИТМО
Не могу разобраться, как при управлении с клавиатуры строить юнитов?