Открытое соревнование по программированию искусственного интеллекта

Языковые пакеты

Проект

Песочница

Раунд 1

Раунд 2

Финал

Песочница (на 2 декабря 2012 г.)

Последние комментарии

Группа ВКонтакте

 

Для написания собственной стратегии для Codetanks опубликованы языковые пакеты. На данный момент мы поддерживаем языки:

Язык Версия компилятора Ссылка
C++ g++ (GCC) 4.4.7 скачать пакет для C++
Java Java 1.6.0_33 скачать пакет для Java
C# Mono C# compiler version 2.10.8.0 (compiler to target the 4.0 mscorlib) скачать пакет для C#
Pascal Free Pascal Compiler version 2.6.0 скачать пакет для Pascal
Python2 Python 2.7.3 скачать пакет для Python2
Python3 Python 3.2.3 скачать пакет для Python3

Каждый языковой пакет содержит в себе набор моделей (Bonus, Unit, Obstacle и т.д.), класс MyStrategy, в котором вы пишете свою стратегию, а также файлы Runner.ext и RemoteProcessClient.ext, необходимые для обмена данными.

В каждом языковом пакете находятся bat-файлы, осуществляющие сборку стратегии в исполняемый файл (исключения: языковой пакет на Java собирается в jar-архив, языковые пакеты на Python собираются в zip-архив).

Кроме того, некоторые языковые пакеты вложены файлы проектов некоторых IDE:

  • для С++ вложен проект Visual C++ 2005;
  • для Java вложены проекты maven, Intellij IDEA 11.1, Eclipse;
  • для C# вложен проект Visual C# 2008;
  • для Pascal вложены проекты Delphi и Lazarus IDE.

Для вашего удобства мы разработали утилиту Repeater, которая поможет у себя на компьютере локально повторять бои, в которых участвовала ваша стратегия. Подробнее вы можете узнать об этой утилите тут.

Важные изменения:

  • 29 октября 23:30: Обновлён пользовательский клиент для C++ в связи с ошибкой при использовании метода World.obstacles().
  • 30 октября 13:40: Обновлён пользовательский клиент для Pascal, исправлена ошибка в методе TUnit.getAngle(). Рекомендуем всем, кто использует pascal-cgdk, заново его скачать! Спасибо пользователям, которые указали на этот баг.
  • 30 октября 19:30: Исправлена ошибка в C++ клиенте, из-за которой Shell.player_name() возвращал пустую строку. Если вы не запускаете тестирование локально, снова скачивать клиент не надо. На серверное тестирование это не влияет.
  • 31 октября 13:45: Исправлена опечатка в клиентах для Python 2 и 3. У танка вместо rear_armor было read_armor. Если вы не используете данное поле, заново скачивать клиент не надо. Спасибо участнику alexanderk23, указавшему на данную ошибку.
  • 1 ноября 19:30: В клиентах для Python 2 и Python 3 были сделаны исправления. Мы рекомендуем всем, кто использует эти языки, заново скачать пакет и перепослать свои стратегии. Спасибо участнику JustAMan, указавшему на ошибку.
  • 4 ноября 21:45: Обновлён пользовательский клиент для C++. В классы Unit и Strategy добавлены виртуальные деструкторы. Также появилась возможность отсылать ZIP-архив, содержащий модифицированный файл MyStrategy.h.
  • 6 ноября 16:45: Исправлен проект для Visual Studio в пользовательском клиенте C++: в проект добавлен файл Strategy.cpp.
  • 17 ноября 17:30: Исправлена ошибка в файле World.cpp клиента C++, вследствие которой не инициализировался список препятствий. Мы рекомендуем всем, кто использует этот язык, заново скачать пакет и перепослать свои стратегии. Спасибо участнику levlam.


Cube

Cube

Красноярск

Кстати, у меня в Eclipse, после импорта стартового пакета, описания методов и классов в виде крякозябр. Но я вылечил это. Помогла статья http://ru.wikipedia.org/wiki/Кракозябры Оказалось, что разработчики писали это в кодировке UTF-8, а Эклипс пытается отобразить в кодировке Windows-1251. Лечение: открываем каждый файл из папки srcmainjavamodel в блокноте и пересохраняем в кодировке “Юникод”. Если проект уже добавлен в Эклипс, то эти файлы нужно обновить в проекте (открыть каждый файл в проекте и нажать F5).

30.10.2012 18:40:43
admin

admin

Команда Russian AI Cup

sanchopanca

sanchopanca

Mananma

Документаци я только для java есть?

выложена только для Java, для всех других языков методы аналогичны, но возможно чуть по-другому называются согласно стилю этих языков.

в конце концов любая адекватная IDE имеет autocomplete

30.10.2012 20:29:57
admin

admin

Команда Russian AI Cup

LEXASOFT

LEXASOFT

ПГУ им.Торайгырова

php будет?

почти наверняка нет

30.10.2012 20:31:09
admin

admin

Команда Russian AI Cup

imbeat

imbeat

МИЭТ

admin , скажите, пожалуйста, можно ли подключать дополнительные стандартные библиотеки (библиотеки .Net Framework в C#)? Например, System.Drawing… там много полезных структур и классов.

Стандартные - можно, если их поддерживает компилятор по умолчанию. Кроме того, вы могли и сам это узнать, послав стратегию с нужными библиотеками, и посмотреть, получилось или нет.

31.10.2012 10:20:57
Enelar

Enelar

Exsul

Мне языковой пакет с++ показался совсем неудобным, я его слегка переделал. (Рассчитано под VS2008) Суть изменений: при дебаге сразу запускается окно сервера, и клиент подключается. При закрытии этого окна дебаг останавливается. Все исходные коды вынесенны так что бы удобно было разрабатывать. Они хранятся теперь в отдельной дирректории, и для сабмита достаточно файлы в этой директории отправить.

Если администрация не будет ругаться и общество поддержит, я еще добавлю кое какую задумку.

P.S лично мое мнение - вся эта задумка сыровата. http://ge.tt/528bQbQ/v/0

31.10.2012 11:54:57
admin

admin

Команда Russian AI Cup

Enelar

Enelar

Exsul

Мне языковой пакет с++ показался совсем неудобным, я его слегка переделал. (Рассчитано под VS2008) Суть изменений: при дебаге сразу запускается окно сервера, и клиент подключается. При закрытии этого окна дебаг останавливается. Все исходные коды вынесенны так что бы удобно было разрабатывать. Они хранятся теперь в отдельной дирректории, и для сабмита достаточно файлы в этой директории отправить. …

Администрация исключительно положительно относиться к любой инициативе пользователей.

О какой задумке идет речь?

31.10.2012 12:19:23
SladeThe

SladeThe

Команда Russian AI Cup

1o2

1o2

Скачал пакет для JAVA. Запускаю под Eclipse. Проект открывается но с ошибкой: Description Resource Path Location Type Project ‘java-cgdk’ is missing required library: ‘lib/texdoclet.jar’ java-cgdk Build path Build Path Problem Запустить не получается. Подскажите, в чем может быть проблема.

Ссылка на данную библиотеку добавлена по ошибке. Не пользовался Eclipse, но нужно зайти куда-нибудь в настройки проекта и убрать эту ссылку, либо выкачать клиент снова. Сейчас такой ошибки нет.

31.10.2012 12:49:01
SladeThe

SladeThe

Команда Russian AI Cup

BoxAtBox

BoxAtBox

Ростов-на-Дону

Хотелось бы иметь возможность поставить на локальном сервере больше чем 1 активного и 1 пустого бота + задать им расположение. + Хотелось бы иметь возможность отключать ботов, для тестов связанных с анализом поведения при движении. + Хотелось бы иметь возможность запустить двух своих ботов.

Функционал локального тестирования ограничен специально, чтобы люди больше делали посылок на сайт. Нет никакого соревновательного духа в том, что вы локально будете тестировать свою стратегию и никому её не покажете.

31.10.2012 12:52:23
SladeThe

SladeThe

Команда Russian AI Cup

lyonvp

lyonvp

Россия

Как уже написали выше, хотелось бы иметь возможность собирать локально под Mac OS X :( Это осуществимо?

TCP библиотека, которую мы используем в клиенте, поддерживает только Windows и Linux. Вообще программирование подобных вещей на C++ почти невозможно сделать кроссплатформенным и уж тем более с помощью небольших библиотек.

31.10.2012 12:56:38
SladeThe

SladeThe

Команда Russian AI Cup

Cube

Cube

Красноярск

Качаю пакет для Java. Создаю новый проект в Eclipse. Нажимаю Run и получаю ошибку: “Error: Could not find or load main class Runner”. Eclipse Java EE IDE for Web Developers. Version: Indigo Service Release 1 Build id: 20110916-0149

Создаёте новый или импортируете уже созданный? В нашей заготовке уже всё должно быть настроено. В крайнем случае, если что-то не получается, попробуйте удалить все проектные файлы и создать всё с нуля.

31.10.2012 12:59:38
SladeThe

SladeThe

Команда Russian AI Cup

spiker

spiker

Google

Как создать проект в Linux(Ubuntu 12.10) на NetBeans 7.2 или Eclipse? Подскажите пожалуйста

Проект для Eclipse и IntelliJ IDEA уже создан. Как создать проект в NetBeans лучше прочитать в документации к NetBeans.

Вариант 1. Импортировать Maven проект из pom.xml, если NetBeans поддерживает это.

Вариант 2. Создать новый проект и добавить туда папку с исходным кодом java-cgdk\src\main\java. Никаких дополнительных зависимостей у клиента нет.

31.10.2012 13:07:11
SladeThe

SladeThe

Команда Russian AI Cup

alexanderk23

alexanderk23

КубГУ

Хоть это и неважно, на всякий случай замечу: вероятно, в питоновских лангпаках в Tank.py опечатка — self.read_armor вместо self.rear_armor.

Спасибо за ценное замечание. Обновим клиенты для Питон в ближайшее время.

31.10.2012 13:15:08
SladeThe

SladeThe

Команда Russian AI Cup

ns_serg

ns_serg

ООО "Продстар Торговый Дом"

http://russianaicup.ru/game/view/9697 А что означет знак вопроса у Mixser вместо языка?

Он писал на особом секретном языке :)

Если серьёзно, то пользовательский язык (для отображения на сайте) не всегда корректно обновляется. Ничего страшного, это не влияет на тестирование. В любом случае, мы постараемся исправить это.

31.10.2012 13:19:21
Enelar

Enelar

Exsul

admin

admin

Команда Russian AI Cup

Администрация исключительно положительно относиться к любой инициативе пользователей. О какой задумке идет речь?

Я там тафтологию развел. Ваша “задумка” - мне не очень понравилось. К примеру меня жудко бесило рассинхронизирование сервера и кода. И несоответствие имен представленных в документации и в коде фактически. Второе терпимо, но геморно. Первое неприемлемо для дебага. Исправил: http://ge.tt/9Z9nfbQ/v/0 (моя “задумка”) Суть изменений. Теперь как я приостанавливаю выполнение программы, сразу-же останавливается движение на поле. Это удобнее. Намного.

А еще изза проблем кодировок(на вашей стороне) на gmail пришло письмо с темой из вопросиков, и попало в спам-фильтр.

31.10.2012 13:23:14
nakilon

nakilon

Москва

Enelar

Enelar

Exsul

Я там тафтологию развел. Ваша “задумка” - мне не очень понравилось. К примеру меня жудко бесило рассинхронизирование сервера и кода. И несоответствие имен представленных в документации и в коде фактически. Второе терпимо, но геморно. Первое неприемлемо для дебага. Исправил: http://ge.tt/9Z9nfbQ/v/0

Подтверждаю про кодировку – письмо для валидации аккаунта уходит в спам из-за кривого топика.

31.10.2012 14:16:04
admin

admin

Команда Russian AI Cup

nakilon

nakilon

Москва

Плюнули на рубистов )

Для добавления пакетов для всевозможных языков требуется множество времени и опыта написания кода на этих самых языках. На это в целом у нас нет ни времени, ни желания, а всем никогда не угодишь.

Если кто-то очень желает принимать участие на редком языке, то он может сам реализовать пакет на основе опубликованных, и тогда мы этот вопрос рассмотрим.

31.10.2012 14:26:06
SladeThe

SladeThe

Команда Russian AI Cup

amp

amp

Пермь

Почему в языковом пакете не все методы? Например getRemainingReloadingTime( ) совершенно по другому назван

Выдержка из документации: “Здесь и далее используется стиль именования Java, если только явно не указано, о каком языке программирования идёт речь.”

В каждом языке используется свой стиль именования, поэтому названия методов, полей, переменных могут отличаться.

31.10.2012 14:28:22
admin

admin

Команда Russian AI Cup

Megabyte

Megabyte

ООО Сибтел-крипто

Очень бы помогло для отладки в локальном лаунчере, если просто по клику телепортировать танк игрока в точку клика. Полчаса ждал ситуации когда мертвый танк окажется между игроком и целью. С телепортацией по клику это можно было бы отладить за 1 минуту.

Такой функциональности мы скорее всего поддерживать не будем, потому что можно придумать бесконечное количество небольших улучшений, на разработку которых в целом тратить силы неэффективно.

31.10.2012 14:29:19
qulinxao
SladeThe

SladeThe

Команда Russian AI Cup

Функционал локального тестирования ограничен специально, чтобы люди больше делали посылок на сайт. Нет никакого соревновательного духа в том, что вы локально будете тестировать свою стратегию и никому её не покажете.

в крайнем случае можно патчить локальный ранер и выкладывать свои наработки

31.10.2012 14:35:58
Cube

Cube

Красноярск

SladeThe

SladeThe

Команда Russian AI Cup

Создаёте новый или импортируете уже созданный? В нашей заготовке уже всё должно быть настроено. В крайнем случае, если что-то не получается, попробуйте удалить все проектные файлы и создать всё с нуля.

Качаю стартовый пакет, распаковываю. В Эклипс создаю новый проект и в качестве папки проекта указываю папку стартового пакета. Всё, больше ничего не делаю, жму “Готово”.

01.11.2012 5:02:45
anton
admin

admin

Команда Russian AI Cup

Для добавления пакетов для всевозможных языков требуется множество времени и опыта написания кода на этих самых языках. На это в целом у нас нет ни времени, ни желания, а всем никогда не угодишь. Если кто-то очень желает принимать участие на редком языке, то он может сам реализовать пакет на основе опубликованных, и тогда мы этот вопрос рассмотрим.

https://github.com/antonr/ruby-tanks - v 0.1 для ruby

01.11.2012 12:54:09
admin

admin

Команда Russian AI Cup

JustAMan

JustAMan

Нижний Новгород

Пакет для Python содержит информацию, не совпадающую с документацией, и явные опечатки. Так, Tank.py называет “заднюю брону” read_armor вместо rear_armor, а максимальный угол поворота пушки скопирован со скорости вращения пушки. Может, почините? :)

Первая опечатка уже некоторое время назад исправлена. Внесены исправления по вашему второму замечанию. Спасибо.

01.11.2012 19:50:32
JustAMan

JustAMan

Нижний Новгород

admin

admin

Команда Russian AI Cup

Первая опечатка уже некоторое время назад исправлена. Внесены исправления по вашему второму замечанию. Спасибо.

Может, ещё некоторые данные из документации сделаете доступными? Например, параметры снаряда… А то в документе они есть, а достать их нельзя, если только самому константы вводить…

01.11.2012 23:26:04
qulinxao

Скажите, а есть какие-то ограничения на размер jar файла? Есть желание использовать не java, а другой jvm язык и соответственно его потроха к вам приедут в виде довольно толстого jar’а.

не получится: ибо отсылаем только файл стратегии.

конечно можно извернутся писать на той же скале , а затем отправлять java файл c jvm - мнемониками ( не помню есть ли в java аналог asm … end :) )

02.11.2012 4:55:10
SladeThe

SladeThe

Команда Russian AI Cup

не получится: ибо отсылаем только файл стратегии. конечно можно извернутся писать на той же скале , а затем отправлять java файл c jvm - мнемониками ( не помню есть ли в java аналог asm … end :) )

  1. В правилах указано, что можно добавлять свои файлы.

  2. Если кто-то реализует полноценную копию CGDK на своём любимом языке, то скорее всего мы это поддержим.

02.11.2012 17:05:30
dotsquid

А можете классу Unit (для С++) добавить виртуальный деструктор, чтобы этот класс стал полиморфным и в него можно было dynamic_cast делать?

02.11.2012 23:19:48
admin

admin

Команда Russian AI Cup

Ishamael

Ishamael

MemSQL

Было бы круто повыше версию G++ и флаг –std=c++11.

Обратной совместимости между стандартами видимо нет. Например, добавление флага ломает сборку даже распространяемого пакета.

02.11.2012 23:51:58
MrDindows

MrDindows

Looksery

подскажите пожалуйста как определить тип бонуса на C#

например так: if (bonus.Type == BonusType.Medikit)

03.11.2012 17:07:25
burdakovd

burdakovd

Яндекс

admin

admin

Команда Russian AI Cup

Обратной совместимости между стандартами видимо нет. Например, добавление флага ломает сборку даже распространяемого пакета.

Так можно же предоставить два компилятора на выбор (как это сделано с Python2/Python3)

03.11.2012 19:54:49
SladeThe

SladeThe

Команда Russian AI Cup

1o2

1o2

Подскажите пожалуйста, как на Java сохранить какие-либо данные глобально, чтобы их можно было использовать при следующем тике. Если я правильно понимаю класс MyStrategy каждый тик создается заново и все данные внутри класса постоянно очищаются.

Неправильно понимаете. Создаётся по экземпляру MyStrategy на каждый танк в начале боя. Каждый тик они не пересооздаются.

04.11.2012 23:06:58
le_chat_noir
SladeThe

SladeThe

Команда Russian AI Cup

TCP библиотека, которую мы используем в клиенте, поддерживает только Windows и Linux. Вообще программирование подобных вещей на C++ почти невозможно сделать кроссплатформенным и уж тем более с помощью небольших библиотек.

Если уж очень хочется C++ на маке, можно попробовать вот это. Работает локально. Удаленно не проверял. Но в теории должно работать.

diff -rupN original/compile-g++.sh cpp-cgdk/compile-g++.sh — original/compile-g++.sh 2012-10-22 14:41:08.000000000 -0700 +++ cpp-cgdk/compile-g++.sh 2012-11-04 12:46:23.000000000 -0800 @@ -25,4 +25,4 @@ do files=“$files $i” done

-g++ -static -fno-optimize-sibling-calls -fno-strict-aliasing -DONLINE_JUDGE -D_LINUX -lm -s -x c++ -O2 -o $name $files 2>compilation.log +g++ -fno-optimize-sibling-calls -fno-strict-aliasing -DONLINE_JUDGE -D_LINUX -lm -x c++ -O2 -o $name $files 2>&1 | tee compilation.log diff -rupN original/csimplesocket/SimpleSocket.cpp cpp-cgdk/csimplesocket/SimpleSocket.cpp — original/csimplesocket/SimpleSocket.cpp 2012-08-22 14:56:00.000000000 -0700 +++ cpp-cgdk/csimplesocket/SimpleSocket.cpp 2012-11-04 10:36:27.000000000 -0800 @@ -93,8 +93,9 @@ CSimpleSocket::CSimpleSocket(CSocketType case CSimpleSocket::SocketTypeRaw: { #ifdef _LINUX - m_nSocketDomain = AF_PACKET; - m_nSocketType = CSimpleSocket::SocketTypeRaw; + //m_nSocketDomain = AF_PACKET; + //m_nSocketDomain = BPF; + //m_nSocketType = CSimpleSocket::SocketTypeRaw; #endif #ifdef WIN32 m_nSocketType = CSimpleSocket::SocketTypeInvalid; diff -rupN original/csimplesocket/SimpleSocket.h cpp-cgdk/csimplesocket/SimpleSocket.h — original/csimplesocket/SimpleSocket.h 2012-08-22 14:56:00.000000000 -0700 +++ cpp-cgdk/csimplesocket/SimpleSocket.h 2012-11-04 10:29:51.000000000 -0800 @@ -57,6 +57,7 @@ #include <netinet/ip.h> #include <netdb.h> #endif +/* #ifdef _LINUX #include <linux/if_packet.h> #include <linux/if_packet.h> @@ -64,11 +65,18 @@ #include <linux/if.h> #include <sys/sendfile.h> #endif +*/ #if defined(_LINUX) || defined (_DARWIN) #include <sys/time.h> #include <sys/uio.h> #include <unistd.h> #include <fcntl.h> + +// #include <sys/types.h> +// #include <sys/time.h> +// #include <sys/ioctl.h> + #include <net/bpf.h> + #endif #ifdef WIN32 #include <io.h>

05.11.2012 1:15:34
mayase

Есть подозрение, что метод RemainingReloadingTime (C#) всегда возвращает 0. кто-нибудь использовал этот метод успешно?

06.11.2012 21:22:29
admin

admin

Команда Russian AI Cup

Hamster

Hamster

Мелитополь

Подскажите, пожалуйста, добавил использование в проект PAS использование Classes+Contnrs и на сервере перестала компилироваться стратегия. Это произошла из-за этих модулей? PS может, стоит вывести в информацию о состоянии попытки в случае ошибки компиляции - пару первых строк сообщений об ошибке компилятора?

Если вы нажмете на черную надпись “Ошибка компиляции”, то увидите лог

06.11.2012 21:55:31
disabled_user_2727_0859309d731962d3aec64295d4fd4893

давно не трогал Visual Studio с++ скачал проект для него пытаюсь получить екзешник но ругается

…cpp-cgdkcsimplesocketSimpleSocket.h(75) : fatal error C1083: Cannot open include file: ‘winsock2.h’: No such file or directory

пошукал что надо в свойства проекта поправить но не помогло

visual c++ express пробую скачать установить сдк отдельно… дайте совет дельный

07.11.2012 10:07:07
t-nick
SladeThe

SladeThe

Команда Russian AI Cup

TCP библиотека, которую мы используем в клиенте, поддерживает только Windows и Linux. Вообще программирование подобных вещей на C++ почти невозможно сделать кроссплатформенным и уж тем более с помощью небольших библиотек.

Версия C++ для Xcode https://www.dropbox.com/s/akczj5v11fz6tzr/MyStrategy.zip, можно дебажить на Local Runner

07.11.2012 13:41:06
t-nick

Совместил с текущей версией пакета (обновил макросы и добавил файл .xcodeproj) https://www.dropbox.com/s/aralvmmrbdfkkcg/cpp-cgdk-xcode.zip Просьба обновить в топике, если нет возражений :)

07.11.2012 14:05:43
valexey

valexey

Россия

Господа, а я правильно понимаю, что нельзя создать свой собственный языковый пакет? То есть нельзя выкинуть всякие Move.cpp и прочее, вплоть до функции main, и написать всю эту обвязку с нуля, и затем ей пользоваться?

07.11.2012 17:47:35
Pe4enie

Pe4enie

ООО "МТ Клик"

valexey

valexey

Россия

Господа, а я правильно понимаю, что нельзя создать свой собственный языковый пакет? То есть нельзя выкинуть всякие Move.cpp и прочее, вплоть до функции main, и написать всю эту обвязку с нуля, и затем ей пользоваться?

Вы правильно понимаете.

07.11.2012 17:51:32
rapik
Cube

Cube

Красноярск

Кстати, у меня в Eclipse, после импорта стартового пакета, описания методов и классов в виде крякозябр. Но я вылечил это. Помогла статья http://ru.wikipedia.org/wiki/Кракозябры Оказалось, что разработчики писали это в кодировке UTF-8, а Эклипс пытается отобразить в кодировке Windows-1251. Лечение: открываем каждый файл из папки srcmainjavamodel в блокноте и пересохраняем в кодировке “Юникод”. Если проект уже добавлен в Эклипс, то эти файлы нужно обновить в проекте (открыть каждый файл в проекте и нажать F5).

Достаточно в Эклипсе на проекте открыть свойства и yказать кодировку UTF-8.

07.11.2012 18:22:30
Wierus

Wierus

Череповец

MaxKh

MaxKh

Мера НН

А можно как нибудь узнать подробности об ошибках типа “Ошибка верификации”? Напрмер, у меня стратегия 48833 принимается. Стоит раскомментировать: “if rect.inside(x)…”, где rect - объект собственого класса - то не проходит верификацию (48848) С LocalRunner - все отлично идет. Алгоритмы, вроде, быстрые - времени должно хватать….

Деление на 0, или выход за пределы массива, или еще что-нибудь. На 6 танках больше возникает различных ситуации, и в локал раннере их бывает порой не просто дождаться.

09.11.2012 11:41:58
MaxKh

MaxKh

Мера НН

Wierus

Wierus

Череповец

Деление на 0, или выход за пределы массива, или еще что-нибудь. На 6 танках больше возникает различных ситуации, и в локал раннере их бывает порой не просто дождаться.

переделал функцию на “try: .. except:…” - не помогло. Т.е. не индексы и не деление.

Все равно - спасибо за идею.

09.11.2012 11:54:09
Pe4enie

Pe4enie

ООО "МТ Клик"

MaxKh

MaxKh

Мера НН

переделал функцию на “try: .. except:…” - не помогло. Т.е. не индексы и не деление. Все равно - спасибо за идею.

Вы говорите, что rect - объект Вашего класса. А сам класс Вы приложили в архиве?

09.11.2012 11:55:02
MaxKh

MaxKh

Мера НН

Кстати, верификация такая же как и на Local Runner’е. Те же 3 танка . Можно просмотреть успешный верификационный бой

09.11.2012 11:56:12
MaxKh

MaxKh

Мера НН

Pe4enie

Pe4enie

ООО "МТ Клик"

Вы говорите, что rect - объект Вашего класса. А сам класс Вы приложили в архиве?

В том же файле описание. Пробовал описывать класс отдельно и непосредственно внутри MyStrategy - без разницы.

09.11.2012 12:00:01
admin

admin

Команда Russian AI Cup

tigeral

tigeral

TEAM International

лять ! Та хиба ж можна названия переменных в интерфейсах на лету менять ?! Куда делся Tank.read_armor ? о тех, кто уже скачал старый языковой пакет вы подумали ? могли бы хоть заглушку оставить на сервере, чтобы оба варианта написания считались корректными и ошибка верификации не вылетала я негодую

Вообще-то новость об изменении пакета на главной странице выделена жирным шрифтом. Ваши претензии безосновательны.

09.11.2012 12:16:11
tigeral

tigeral

TEAM International

admin

admin

Команда Russian AI Cup

Вообще-то новость об изменении пакета на главной странице выделена жирным шрифтом. Ваши претензии безосновательны.

ок, признаю, не внимательно читал новости но все же обратную совместимость обеспечить было возможно

09.11.2012 12:34:52
MaxKh

MaxKh

Мера НН

Wierus

Wierus

Череповец

Деление на 0, или выход за пределы массива, или еще что-нибудь. На 6 танках больше возникает различных ситуации, и в локал раннере их бывает порой не просто дождаться.

Да, мой косяк. Исключения хэндлил, но не совсем там. Видимо сказывается то, что питоном пользуюсь только 3 месяца :)

Спасибо

09.11.2012 13:15:45
admin

admin

Команда Russian AI Cup

ns_serg

ns_serg

ООО "Продстар Торговый Дом"

Как в матче разных версий моего бота я могу узнать сколько очков уже набрано у владельца конкретного танка?

На странице игры у имени каждого участника написано сзади число, оно выглядит как степень. Это версия используемой стратегии. Вы это имели ввиду?

09.11.2012 20:39:27
qulinxao
ns_serg

ns_serg

ООО "Продстар Торговый Дом"

Как в матче разных версий моего бота я могу узнать сколько очков уже набрано у владельца конкретного танка?

//имена для джавы( на паскале писать не срослось ибо тока под винду есть библиотека сокетов):

у класса Shell есть метод getPlayerName() - судя по невозможности узнать конкретный танк - при командном зачёте счёт отчков будет общекомандым - ну и сейчас имена вроде у танков ( одного бота) система делает различными дописывая в скобках номер .

у класса Tank есть метод getPlayerName() по нему и можно узнать чей танк.

ps. как ни печально пока достаточно уворачивания(главное экономить здоровье если ихз под обствела не уходиш - т.е увеличивать угол рикошета и увеличивать растояние(чтобы снаряд терял скорость))+стрельба(не очень то и меткая) ну и некоторый дебют , что бы сразу не положили - ну и не бездумная езда за бонусами + относительная точная(не очень ибо бонусы не материальная точка , а излишняя точность снижает время(увеличивается доля поворотов в общем числе тиков)) езда - с поворотами на цель как можно раньше и как можно длительными периодами разгона( но опять же не очень - иначе слождее будет менять направление движения при уворачивании).

09.11.2012 20:45:24
ns_serg

ns_serg

ООО "Продстар Торговый Дом"

Попробую написать версию которая отсалютует если у разных версий одного игрока на поле дописывается номер :)

09.11.2012 22:13:16
ns_serg

ns_serg

ООО "Продстар Торговый Дом"

admin

admin

Команда Russian AI Cup

На странице игры у имени каждого участника написано сзади число, оно выглядит как степень. Это версия используемой стратегии. Вы это имели ввиду?

Нет, как программно узнать сколько очков у владельца танка. Когда имена всех владельцев NS_Serg, но каждый играет сам за себя.

09.11.2012 22:15:38
Wierus

Wierus

Череповец

ns_serg

ns_serg

ООО "Продстар Торговый Дом"

Нет, как программно узнать сколько очков у владельца танка. Когда имена всех владельцев NS_Serg, но каждый играет сам за себя.

Поле Player.Score, Вы про это?

09.11.2012 22:59:20
ns_serg

ns_serg

ООО "Продстар Торговый Дом"

Да, я про это. Но как мне обратиться через танк к Player, если у них у всех, у игроков - одно и то-же имя.

09.11.2012 23:09:04
Wierus

Wierus

Череповец

ns_serg

ns_serg

ООО "Продстар Торговый Дом"

Да, я про это. Но как мне обратиться через танк к Player, если у них у всех, у игроков - одно и то-же имя.

Тот же Id, или координаты танка, или уровень жизней. Идентифицируйте танки по Id, имя знать должно быть ни к чему. Не совсем понятно, что в итоге необходимо )

09.11.2012 23:13:45
ns_serg

ns_serg

ООО "Продстар Торговый Дом"

Очки. Очки набранные соперником, чтоб попытаться его обогнать.

09.11.2012 23:14:17
Wierus

Wierus

Череповец

Да, дошло ) Класс Unit (и соответственно все наследуемые классы) напрямую не связан с классом Player. Как бы их связать. Подождем ответа администрации.

09.11.2012 23:19:55
admin

admin

Команда Russian AI Cup

ANTPro

ANTPro

Россия

admin - почему решили не откоментировать языковой пакет C#? Было бы проще видеть надпись о том что делает метод/свойство в IDE. Ведь это стандарт уже :)

В официальных правилах есть JavaDocs. Нам кажется, что очень просто сопоставить имена методов из них с теми, что в вашем пакете. Кроме того, в названиях использованы популярные английские слова, и понимание по названию о том, что делает конкретный метод, не должно вызывать проблем.

09.11.2012 23:26:45
Pe4enie

Pe4enie

ООО "МТ Клик"

imbeat

imbeat

МИЭТ

Зачем в языковом пакете C# класс Tank (и аналогичные) пометили как sealed (то есть от такого класса нельзя написать наследника)? Бред какой-то. Приходится столько извращений делать из за одного слова.

В Java классы тоже помечены, как final. А если не секрет, зачем Вам наследоваться от танка?

10.11.2012 13:28:27
imbeat

imbeat

МИЭТ

Pe4enie

Pe4enie

ООО "МТ Клик"

В Java классы тоже помечены, как final. А если не секрет, зачем Вам наследоваться от танка?

Чтобы добавлять танку дополнительные поля, например, вектор скорости (чтобы каждый раз не вычислять) или угол возможного обстрела или прогноз по передвижению. Видимо придется потом делать так:

public class ExtendedTank { public Tank Tank { get; private set;} public ExtendedTank(Tank tank) {…} }

10.11.2012 23:09:27
qulinxao
imbeat

imbeat

МИЭТ

Чтобы добавлять танку дополнительные поля, например, вектор скорости (чтобы каждый раз не вычислять) или угол возможного обстрела или прогноз по передвижению. Видимо придется потом делать так:

ооп головного мозга до добра не доводит

Алан Кей: “Когда я придумал Обьекты я не думал о С++(JAVA)”

то что нет отдельного вектора GetSpeed печально - ну так и сделайте служебную функцию которая это вычесляет - тут не настольно болшая задача что бы наследовать что либо.

11.11.2012 0:15:58
ine

ine

Лилль

Приделать функцию к классу в шарпе можно с помощью методов расширений, а вот прицепить поля нельзя. Мне бы тоже пригодилось. Можно и делегированием сделать (как ExtendedTank выше), в принципе даже удобнее, чем наследование - сами танки не надо будет пересоздавать на каждом тике, как пришлось бы с наследованием.

11.11.2012 0:48:40
nop

nop

БГУ

ооп головного мозга до добра не доводит Алан Кей: “Когда я придумал Обьекты я не думал о С++(JAVA)” то что нет отдельного вектора GetSpeed печально - ну так и сделайте служебную функцию которая это вычесляет - тут не настольно болшая задача что бы наследовать что либо.

Наледовать не решился, просто копирую все поля в совершенно новую иерархию классов. Очень много чем можно расширить те объекты, которые выдает игра, да и ломают они часто служебные функции, как тут люди нередко жалуются.

13.11.2012 13:57:47
BoxAtBox

BoxAtBox

Ростов-на-Дону

nop

nop

БГУ

Наледовать не решился, просто копирую все поля в совершенно новую иерархию классов. Очень много чем можно расширить те объекты, которые выдает игра, да и ломают они часто служебные функции, как тут люди нередко жалуются.

От наследования один фиг толку не будет, ибо создаются классы не в вашем коде, и создаваться будут оригинальные TTank и прочее.

13.11.2012 15:41:41
SladeThe

SladeThe

Команда Russian AI Cup

Megabyte

Megabyte

ООО Сибтел-крипто

Только что обнаружил что в С++ для всех членов команды переменные общие. Нужно предупреждать. : | Боюсь еще выяснится что танки обрабатываются в разных потоках и затирают значения у друг друга в рандомных местах.

  1. Это особенность языка C++, а не тестирующей системы. Переменные, объявленные за пределами класса, являются общими для всех экземпляров этого класса. Если вы хотите хранить данные, которые принадлежат только одному танку, нужно использовать поля.

  2. Все танки стратегии обрабатываются последовательно в одном потоке. Вы можете убедиться в этом, просмотрев файл Runner.cpp.

15.11.2012 11:47:11
SladeThe

SladeThe

Команда Russian AI Cup

okulov

okulov

????

Обновленный языковой пакет C++ не компилируется.

Скорость и точность ответа прямо пропорциональна подробности предоставленной вами информации.

Какую ОС/среду разработки вы используете? Какая версия компилятора? Какую ошибку получаете? Компилируется ли пакет с помощью приложенных bat/sh скриптов? При попытке отослать на сервер?

15.11.2012 11:51:26
admin

admin

Команда Russian AI Cup

nop

nop

БГУ

Ваше решение запускать стратегии в общем процессе - это не “особенности языка”, и вы могли сказать об этом раньше. Вначале вы не только не сказали об этом, но и спровоцировали работать на уровне глобальных переменных, не позволяя расширять класс MyStrategy новыми полями. К тому времени как вы это исправили, мне было менять код уже поздно. Но пришлось все равно, когда несколько танков начали бегать по общим структурам данных одновременно.

Вообще-то вам с самого начала дан языковой пакет, который полностью отражает структуру тестирования и вот такие тонкие моменты. Вы могли сами посмотреть и, если что непонятно, задать вопросы. Ваши претензии безосновательны.

15.11.2012 13:09:04
SladeThe

SladeThe

Команда Russian AI Cup

Megabyte

Megabyte

ООО Сибтел-крипто

Я вечером подымался и был уверен что за ночь дойду до первого места. А оказалось что мои танки стали конфликтовать из-за переменных и тупить на месте. Хорошо что не далеко утонул : | А глобальные переменные пришлось юзать с самого начала из-за отсутствия доступа к заголовочнику. : | Надеюсь все эти изменения не для того чтобы показать что java рулез C++ отстой : )

Действительно жаль, что мы не предусмотрели сразу возможность отсылки MyStrategy.h. Но мы исправили это за неделю до начала Р1.

P. S. Java рулёзз, C++ - … ну нет, не скажу, что C++ отстой.

15.11.2012 17:25:41
iMysak

iMysak

Lohika, SSE

SladeThe

SladeThe

Команда Russian AI Cup

Действительно жаль, что мы не предусмотрели сразу возможность отсылки MyStrategy.h. Но мы исправили это за неделю до начала Р1. P. S. Java рулёзз, C++ - … ну нет, не скажу, что C++ отстой.

Java — это C++, из которого убрали все пистолеты, ножи и дубинки. (с) James Gosling

17.11.2012 4:48:34
qulinxao
iMysak

iMysak

Lohika, SSE

Java — это C++, из которого убрали все пистолеты, ножи и дубинки. (с) James Gosling

как с меньшей кровью “вложенную процудуру” в jave замутить -

ибо есть простыне однотипного кода в мой_стратегия которые используют поля тех её аргументов и будь вложеные процедуры можно было бы процедурки запилить где важное передовалось бы в аргументах в сами обьекты были бы доступны из окружения

иначе ежель процедуры как статические методы класса лепить то это во первых нагромождение к каждой процедуре заголовка самого метода моя_стратегия и … короче пока не знаю как приходится “безпроцедурно” портянками - одно достоинство можно по месту специализировать код всякими боговнушёнными константами :)

17.11.2012 5:25:56
qulinxao

как с меньшей кровью “вложенную процудуру” в jave замутить - ибо есть простыне однотипного кода в мойстратегия которые используют поля тех её аргументов и будь вложеные процедуры можно было бы процедурки запилить где важное передовалось бы в аргументах в сами обьекты были бы доступны из окружения иначе ежель процедуры как статические методы класса лепить то это во первых нагромождение к каждой процедуре заголовка самого метода моястратегия и … короче пока не знаю как приходится “безпроцедурно” портянками - одно достоинство можно по месту специализировать код всякими боговнушёнными константами :)

  • это был вопрос

?

17.11.2012 5:26:20
jalomic

jalomic

Санкт-Петербург

Cube

Cube

Красноярск

Кстати, у меня в Eclipse, после импорта стартового пакета, описания методов и классов в виде крякозябр. Но я вылечил это. Помогла статья http://ru.wikipedia.org/wiki/Кракозябры Оказалось, что разработчики писали это в кодировке UTF-8, а Эклипс пытается отобразить в кодировке Windows-1251. Лечение: открываем каждый файл из папки srcmainjavamodel в блокноте и пересохраняем в кодировке “Юникод”. Если проект уже добавлен в Эклипс, то эти файлы нужно обновить в проекте (открыть каждый файл в проекте и нажать F5).

Спасибо, КЭП !

17.11.2012 11:44:26
nop

nop

БГУ

iMysak

iMysak

Lohika, SSE

Java — это C++, из которого убрали все пистолеты, ножи и дубинки. (с) James Gosling

Но добавили обязательное ношение смирительной рубашки и ботинок из чугуна.

17.11.2012 12:45:46
iMysak

iMysak

Lohika, SSE

  это был вопрос   ?

Я не совсем понял вопрос, но насколько понял то встречный вопрос — если вам в статический метод нужно передавать обьєкт стратегии (self/this), то есть контекст оркужения, то зачем делать этот метод статическим.

Java не предполагает использования вложеных процедур, обычно если они вам нужны значит вы делаете что-то не так

17.11.2012 12:59:04
SladeThe

SladeThe

Команда Russian AI Cup

levlam

levlam

Санкт-Петербургский ГУ

В пакете для C++ в конструкторе класса World не используется параметр obstacles.

Исправлено.

17.11.2012 17:32:39
qulinxao
iMysak

iMysak

Lohika, SSE

Я не совсем понял вопрос, но насколько понял то встречный вопрос — если вам в статический метод нужно передавать обьєкт стратегии (self/this), то есть контекст оркужения, то зачем делать этот метод статическим. Java не предполагает использования вложеных процедур, обычно если они вам нужны значит вы делаете что-то не так

не не не метод может быть обычным - раздражает факт необходимости передавать все(часть чьи поля читает/пишет) обьекты( self|tank , world , move ) + те аргументы которые индивидуальны для нужного метода - т.е будь метод вложеным в метод то обьекты были бы доступны ему из его обьемлющего окружения -

  • так как можно сейчас - создание метода класса - не очень то и упрощает код ибо .

17.11.2012 20:25:42
iMysak

iMysak

Lohika, SSE

не не не метод может быть обычным - раздражает факт необходимости передавать все(часть чьи поля читает/пишет) обьекты( self|tank , world , move ) + те аргументы которые индивидуальны для нужного метода - т.е будь метод вложеным в метод то обьекты были бы доступны ему из его обьемлющего окружения - …

механизм предложеный органызаторами public void move(final Tank self, final World world, final Move move) с передачей новых обектом на каждом шагу — не есть класический для java, Но ето было нужно для удобства, безопасности и инкапсулирования клиента и пользательского кода Но вы же можете всё упростить для себя сделав как я (почти, пишу по памяти): вынести в поля класа MyStrategy private Tank self; private World world; private Move move;

в методе move вызывать первой строчкой initTick(self, world, move);

private void initTick(final Tank self, final World world, final Move move) {
    this.self = self;
    this.world = world;
    this.move = move;
    WORLDtanks = world.getTanks();
    WORLDbonuses = world.getBonuses();
    WORLDobstacles = world.getObstacles();
    WORLDshells = world.getShells();
    WORLDPlayers = world.getPlayers();

    setMyBoardPosition(self, world);

} и т.д.

это избавит вас от постоянной передачи параметров весь остальной код вы сможете использовать через приватные методы без постоянной передачи основных игровых параметров

19.11.2012 2:58:29
krokoDil

krokoDil

smv

Это только у меня world.obstacles() ничего не возвращает в формате боя по 3 танка? пишу на C++ ? И как мой локальный (оюновленный)языковый пакет может влиять на то что и на сервере world.obstacles() не инициализируютя?

19.11.2012 11:20:35
nop

nop

БГУ

krokoDil

krokoDil

smv

Это только у меня world.obstacles() ничего не возвращает в формате боя по 3 танка? пишу на C++ ? И как мой локальный (оюновленный)языковый пакет может влиять на то что и на сервере world.obstacles() не инициализируютя?

Все возвращает. надо обновить языковой пакет, там очередной раз забыли “мелочь”. Брезгуют они трогать наш “язык для динозавров”, вот и для передачи obstacles три попытки понадобилось. В этот раз не было вызова конструктора для obstacles при создании объекта типа world. Потом я запаниковал, потому что код с поддержкой obstacles везде был написан, а obstacles все равно не возращались, но понял, что открыта по умолчанию одна локальная копия, а файл исправил в другой, в Xcode это не так просто заметить :) Но на форум писать не стал, по старой привычке сначала проверять свою работу, а уж потом чужую.

19.11.2012 12:15:51
SladeThe

SladeThe

Команда Russian AI Cup

susageP

susageP

Россия

Есть ли какой нибудь define в языковом пакете С++ - указывающий что сборка происходит на сервере, а не локально. под него удобно засунуть отладочную информацию. Если нету то будет ли добавлен?

Нет. Но вы можете добавить define в свой проект, который будет показывать, что сборка происходит локально.

20.11.2012 11:38:36
susageP

susageP

Россия

SladeThe

SladeThe

Команда Russian AI Cup

Нет. Но вы можете добавить define в свой проект, который будет показывать, что сборка происходит локально.

Оо. что то я ступил…

20.11.2012 15:59:45
Gvoin

Gvoin

Не могу

у меня не работает compile-g++.bat. Сначала в файле compilation.log было g++ не является внутренним или внешним исполняемым пакетом, я скачал g++ компилятор, теперь кричит что в файле StatTimer.h csimplesocket\StatTimer.h:93: syntax error before (' csimplesocket\\StatTimer.h: In methodvoid CStatTimer::Initialize()‘: csimplesocket\StatTimer.h:83: m_startTime' undeclared (first use this function) csimplesocket\\StatTimer.h:83: (Each undeclared identifier is reported only once csimplesocket\\StatTimer.h:83: for each function it appears in.) csimplesocket\\StatTimer.h:83:sizeof’ applied to incomplete type timeval' csimplesocket\\StatTimer.h:84:m_endTime’ undeclared (first use this function) csimplesocket\StatTimer.h:84: sizeof' applied to incomplete typetimeval’ csimplesocket\StatTimer.h: In method struct timeval CStatTimer::GetStartTime()': csimplesocket\\StatTimer.h:87: return-typestruct timeval’ is an incomplete type csimplesocket\StatTimer.h:87: confused by earlier errors, bailing out я несколько раз качал новые языковые пакеты C++, не помогло. Пожалуйста подскажите что мне делать???Без .exe файла на локал ранер не протестировать((

29.12.2012 19:56:01
SladeThe

SladeThe

Команда Russian AI Cup

Gvoin

Gvoin

Не могу

у меня не работает compile-g++.bat. Сначала в файле compilation.log было g++ не является внутренним или внешним исполняемым пакетом, я скачал g++ компилятор, теперь кричит что в файле StatTimer.h csimplesocketStatTimer.h:93: syntax error before (’ csimplesocket\StatTimer.h: In method void CStatTimer::Initialize()‘: csimplesocketStatTimer.h:83: …

Удалённо сложно понять, в чём дело. Укажите, пожалуйста, вашу операционную систему и версию компилятора g++. Вы установили ту версию, что используем мы? Можете ещё попробовать скомпилировать с помощью Visual Studio.

31.12.2012 2:46:51
mue

mue

Харьков

Возможна ли в будущем поддержка Javascript ?

11.01.2013 11:45:58
rg81

rg81

СС

Я пишу на C# и хочу использовать стандартную библиотеку System.Drawing. Она также поддерживается и в моно. Даже при использовании директивы using System.Drawing, я получаю ошибку компиляции. Попытки добавить в архив модифицированный файл сборки (добавление -r:System.Drawing) привели к сообщению “Некорректное расширение файла” Загрузить библиотеку вместе со всеми файлами тоже не представляется возможным, так как ее размер превышает 512 кб. Пожалуйста, помогите разрешить проблему.

12.02.2013 3:53:44
GreenTea

GreenTea

ISDDesign

rg81

rg81

СС

Я пишу на C# и хочу использовать стандартную библиотеку System.Drawing. Она также поддерживается и в моно. Даже при использовании директивы using System.Drawing, я получаю ошибку компиляции. Попытки добавить в архив модифицированный файл сборки (добавление -r:System.Drawing) привели к сообщению “Некорректное расширение файла” Загрузить библиотеку вместе со всеми файлами тоже не представляется возможным, так как ее размер превышает 512 кб. Пожалуйста, помогите разрешить проблему.

Я бы посоветовал все что связано с рисованием выделить в отдельный файл/класс и не паковать его при отправке на сервер. При этом все обращения к этому классу из класса бота локализировать в одном месте и закомментировать при отправке. Немного уродское решение, но в моем случае помогло.

12.02.2013 21:48:56
rg81

rg81

СС

GreenTea

GreenTea

ISDDesign

Я бы посоветовал все что связано с рисованием выделить в отдельный файл/класс и не паковать его при отправке на сервер. При этом все обращения к этому классу из класса бота локализировать в одном месте и закомментировать при отправке. Немного уродское решение, но в моем случае помогло.

Это не решает проблемы :( Я хочу использовать возможности языка и платформы, а по сути это ограничение.

12.02.2013 21:58:09
GreenTea

GreenTea

ISDDesign

rg81

rg81

СС

Это не решает проблемы :( Я хочу использовать возможности языка и платформы, а по сути это ограничение.

В бою на сервере боту нужно что-то рисовать? Локально можешь все что угодно использовать..

12.02.2013 23:32:40
rg81

rg81

СС

GreenTea

GreenTea

ISDDesign

В бою на сервере боту нужно что-то рисовать? Локально можешь все что угодно использовать..

Мне не нужно ничего рисовать, мне нужны вспомогательные функции, которые содержатся в этой библиотеке.

13.02.2013 0:10:14
Commandos

Commandos

Гродно

rg81

rg81

СС

Мне не нужно ничего рисовать, мне нужны вспомогательные функции, которые содержатся в этой библиотеке.

Всё-же поинтересуюсь - а какие там могут быть полезные для данного случая функции? Особенно интересно про “ограничение” узнать, что в System.Drawing есть такого, что есть и в C++ и в Java, например. Единственное что в голову пришло - пересечение рисованием определять?

13.02.2013 10:49:01