Моя новая программа для контрпиков, принцип ее работы, результаты 6.88

Привет, друзья.

В не столь далеком декабре прошлого года я опубликовал одну статейку, вот она:
https://dota2.ru/blogs/post/3054-kontrpiki-v-dote-interesnye-nabljudeniya/
Статья оказалась интересной читателям портала и было несколько просьб выложить мою программу, которую я там описал. На текущий момент, немного мотивировавшись конкурсом (хотя, конечно, особо ни на что не надеюсь), я таки "созрел".

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

"Не очень важная вещь 1. Немного обо мне."
В доту я играю 2 года и максимально достигнутый на текущий момент рейтинг - 4300 с копейками. Этот рейтинг, возможно, не является моим пределом, но выше поднимать я не пытался, т.к. просто не было желания и мотивации. Не знаю насколько это может показаться необычным или наоборот, но мне нравится играть на более низких рейтах больше, чем на более высоких. Например, я часто играю на интервале 3000-4000, т.к. мои новые аккаунты "забрасывает" чаще всего именно туда. Играть на рейтинг ниже "своего" мне нравится тем, что я получаю приятный результат (игра на равных или в нашу пользу), не слишком сильно напрягаясь и более смело пикая героев, которыми плохо владею.

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

Дальше я особенно хотел бы остановиться на пиках героев. Для меня это чрезвычайно важная тема и всё свое время, что я играл в доту, я уделял этому аспекту наибольшее внимание. Это проявилось в том, что я играл довольно много именно на тех героях, которые казались мне наиболее выгодными в плане пика. Конечно же для позиции саппорта это
Omniknight
Ближний бойSupport - Durable - Nuker
. Выбран он был именно потому, что имеет самый высокий винрейт. Именно на этом герое я апнул 4200. Затем я пробовал и других и смог повторить этот же результат на
Lich
Дальний бойSupport - Nuker
и
Vengeful Spirit
Дальний бойSupport - Initiator - Disabler - Nuker - Escape
. Последнее время меня увлек
Disruptor
Дальний бойSupport - Disabler - Nuker - Initiator
, далеко не такой винрейтный как
Omniknight
Ближний бойSupport - Durable - Nuker
, но как выглядящий выгодно, так и оказывающийся на поверку выгодным в этой 6.88-мете (64% винрейта за 64 игры на интервале 3000-3700 я на нем имею).

Наконец, плавно переходя к тому, ради чего я всё это затеял, чуть расскажу про контрпики. Этот аспект доты для меня всегда был чрезвычайно важным. Думаю, что во многом из-за того, что я играю именно на позиции саппорта, а саппорту более важно законтрить врага именно пиком, т.к. он не может как кор сделать это слотами, руками и прочими способами (точнее может, но это не всегда срабатывает так же хорошо). Более того, я всячески стремился и стремлюсь "абузить" этот аспект. Как я это делаю? Ну, во-первых я постоянно сижу на сайте dotabuff и изучаю там раздел matchups наиболее актуальных героев. Во-вторых я написал программку, которую я и сам юзаю, правда редко (типа опыт дает о себе знать, уже и без программки могу принять решение чем кого контрить, хоть и не всегда). В-третьих я стараюсь иногда (раньше - чаще) давать тиммейтам в Ranked All Pick советы по пикам. Должен заметить, это довольно часто срабатывает (т.е. мы побеждаем). Что еще сильнее утверждает меня во мнении, что контрпик крайне важен в доте.


"Не очень важная вещь 2. Matchups."
В своей прошлой статье (см. ссылку в начале этой) я уже попытался расписать этот раздел сайта dotabuff. Именно этот раздел dotabuff взят за основу для написания моей программы. На нем она, можно сказать, построена. Попробую сейчас свежим взглядом посмотреть на него опять и описать всё новыми словами, особенно акцентируясь на винрейте, который там отражен.

Давайте рассмотрим актуального сейчас, в 6.88,
Slark
Ближний бойCarry - Escape - Disabler - Nuker
:
http://www.dotabuff.com/heroes/slark/matchups

Мы видим 3 столбика: advantage, slark winrate, matches played.

advantage - это преимущество
Slark
Ближний бойCarry - Escape - Disabler - Nuker
перед указанными героем. Это самое важное. Этот столбик показывает, кого контрит
Slark
Ближний бойCarry - Escape - Disabler - Nuker
и кто его контрит. Чем больше значение преимущества, тем лучше
Slark
Ближний бойCarry - Escape - Disabler - Nuker
контрит этого героя, т.е. тем меньше сомнений должно быть у вас, когда вы думаете, брать
Slark
Ближний бойCarry - Escape - Disabler - Nuker
или не брать. Отрицательное значение, особенно большое, показывает, что указанный герой контрит
Slark
Ближний бойCarry - Escape - Disabler - Nuker
и против него
Slark
Ближний бойCarry - Escape - Disabler - Nuker
лучше не пикать.

slark winrate - столбец, который вызывает споры и сомнения в том, контрит ли
Slark
Ближний бойCarry - Escape - Disabler - Nuker
этого героя на самом деле. Многие игроки вообще считают, что столбик advantage не важен, надо смотреть именно на винрейт, типа он показывает контрит один герой другого или нет. Нет, этот столбик просто вводит вас в заблуждение. Формула, по которой вычислен advantage, должна работать так, что если у одного героя винрейт 60%, а у другого 40%, между ними необязательно должен быть самый большой advantage, ведь это никак не отражает сильные и слабые их качества именно в противостоянии друг другу. Давайте разберемся на примере. Мы видим, что
Slark
Ближний бойCarry - Escape - Disabler - Nuker
неплохо контрит
Wraith King
Ближний бойCarry - Support - Durable - Disabler - Initiator
, но его винрейт против
Wraith King
Ближний бойCarry - Support - Durable - Disabler - Initiator
оставляет желать лучшего, ~46%. Как же так выходит? Дело в том, что винрейты
Wraith King
Ближний бойCarry - Support - Durable - Disabler - Initiator
и
Slark
Ближний бойCarry - Escape - Disabler - Nuker
зависят далеко не только от того, попались они друг против друга в матче или нет. Есть очень много факторов, и все они влияют на те цифры, которые мы видим в matchups. Вот, например, те, которые знакомы мне:
1) сложность героя для освоения - чем сложнее герой, тем меньше шанс, что среднестатистический игрок сможет на нем выиграть, не наиграв довольно большое количество игр.
Wraith King
Ближний бойCarry - Support - Durable - Disabler - Initiator
, я предполагаю, более простой для освоения чем
Slark
Ближний бойCarry - Escape - Disabler - Nuker
. На нем труднее фидить (ульт включается сам), на нем не нужно стараться уходить от агрессии, на нем игра более прямолинейна и проста, часто на нем надо нажимать меньше кнопок, чем на
Slark
Ближний бойCarry - Escape - Disabler - Nuker
.
2) актуальность героя в текущей игровой среде - на винрейт героя влияет текущая мета, герои, которые наиболее популярны в пиках, особенности паблик-соло-ранкеда, стиль игры, продиктованный последними патчами, перспективы ранних файтов, раннего пуша, вероятность камбека и т.п.
3) количество игр на герое и его популярность - если игрока чаще пикают игроки без опыта игры на нем просто потому что он популярен, статистика героя будет образована больше из таких "слабых" игр, из-за чего винрейт может "просесть". Если героя больше берут именно опытные игроки (что видно в разделе meta 5к+), то это может положительно сказаться на его винрейте.

Тем не менее, не смотря на все вышесказанное, advantage влияет на винрейт, но не так сильно, как описанные мной и другие факторы. Но в вопросах контрпика, я считаю, надо абстрагироваться от всех этих факторов. В вопросе выбора контрпика надо понимать, что ты - особенный игрок, ты готов стараться, задрачивать и сводить на нет все эти факторы. Ты готов освоить сложного героя и сделать его для себя простым, ты готов выбирать именно актуальных героев, а не всякую дрянь (особенно учитывая и другие пики врага, не только один), ты - игрок с опытом и благодаря этому опыту твой винрейт будет заметно выше, чем написанный в разделе matchups. И для тебя принципиально важен будет именно контрпик а не винрейт героя.

matchеs played - в столбце показано, сколько матчей было сыграно с этими героями в противоположных командах. Т.к. этот столбец не кореллирует с advantage и winrate, можно сделать вывод, что в большинстве случаев игрокам наплевать как на винрейт, так и на контрпики, они просто пикают то, на чем им хочется играть или то, что наиболее популярно.


"Не очень важная вещь 3. О том, как именно была написана программа и небольшая предыстория."
Уже несколько лет назад я познакомился с языком tcl и он мне понравился своей простотой и тем, что позволяет делать довольно сложные вещи при помощи всего нескольких коротких строк кода. Когда я поиграл в доту примерно год, я уже тогда захотел применить свои навыки программирования к этой игре. Тогда я попытался написать программку, которая тоже анализирует контрпики, подобно нынешней, но там учитывались только самые основные несколько контрпиков и еще учитывался винрейт. Не знаю как уж так вышло, но программка тогда показала мне, что самый топовый контрпик против всех героев доты - это
Omniknight
Ближний бойSupport - Durable - Nuker
(хотя казалось бы, в чем тут сюрприз? у него и так всегда был топовый винрейт). Я обрадовался, сел играть только на омнике и иногда использовал свою программу чтобы она показывала мне контрпики против некоторых вражеских пиков, но сам брал только
Omniknight
Ближний бойSupport - Durable - Nuker
(в итоге наиграв на нем ~400 игр).

Новую версию я решил написать, когда образовалось свободное время и когда я признал довольно полезными matchups. Процесс написания программы сопровождался определенными трудностями, т.к. надо было сохранить все 111 html-страниц для всех 111 героев к себе на диск, чтобы затем можно было обработать их скриптом. Заняло это, правда, немного времени, где-то полчаса. Первая версия этой программы была консольная, надо было вызывать программу из командной строки, а данные по героям она брала только из файлов. Тем не менее это было удобно всё равно и я нередко ей пользовался и написал статью именно об этой версии (см. ссылку в начале).

Для новой версии я не стал опять лезть на сайт и скачивать 111 html-страниц. Возможно, ситуация за полгода изменилась, но не думаю что сильно. Так что замечу, что в новой программе используется статистика, актуальная на конец 2015 года. Судя по текущим пробам программы на некоторых пиках, выдаваемые ей данные выглядят вполне правильными. Кто знает, может новая статистика менее хороша чем та?



Что собой представляет программа

Она представляет собой главный исполняемый файл и несколько дополнительных файлов, без которых программа не может работать (даже не пытайтесь!). Это во-первых картинки, во-вторых "база данных", по которой программа вычисляет контрпики (по сути это всего лишь 1 текстовый файл matchups.txt) и в третьих - файлы для настройки ролей (о них чуть позже).

Что позволяет программа

Интерфейс и функции программы вы можете видеть на скриншоте:



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

Программа позволяет вводить пул, который надо законтрить, 3-мя способами: вручную (крайне важно соблюдать правильность написания имен героев!), взять из файла (имя файла analyzed.txt, список героев берется из 1-й строки файла) или выбрать при помощи 5 комбобоксов (в этом случае вы не ошибетесь с написанием имен героев, но боксов всего 5).

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

Как пользоваться программой

Конечно вы можете пользоваться ей как вам угодно, можете даже взять исходник (я его тоже выложил) и менять ее как вам заблагорассудится (если владеете tcl/tk). Но я предлагаю следующий вариант использования программы (как делаю я сам).

Для использования распакуйте все файлы программы в удобную вам папку. Запускаете доту и программу. Выбираете роль, на которой будете играть. Начинаете игру. Смотрите на первые пики оппонентов и тут же вводите их в программу (наверное, удобнее всего с помощью комбобоксов). Программа при каждом нажатии на кнопку будет предлагать вам наилучшие пики (чем выше стоит герой, тем он лучше). Возможно, есть смысл вводить только кор-героев в программу, чтобы контрить только их. Не следует бесприкословно "подчиняться" программе, старайтесь сами оценить, "зайдет" герой или нет, постарайтесь учитывать разные факторы: его актуальность и вероятность что он сам будет законтрен, его синергию с союзными пиком и т.д.

Принцип работы программы

Принцип я уже описал в своей прошлой статье, но постараюсь кратко сделать это еще раз. Есть файл matchups.txt - "база данных контрпиков". В каждой строке 1-й герой - это "главный" герой, а остальные 110 - второстепенные. Второстепенные расположены в таком порядке, что против первого главного брать лучше всего, а против последнего вообще не стоит брать. Этот же порядок мы видим в разделе matchups на dotabuff.

Программа берет пул героев, который вводит пользователь. Она прогоняет этот пул по файлу. При этом все герои начинают "зарабатывать очки". Если герой контрит кого-то из пула лучше всего, он зарабатывает 111 очков, если хуже всего - 2 очка. В итоге эти очки выводятся в программе, в третьем столбике. Чем больше герой заработал очков против выбранного пула, тем полезнее он должен быть в игре против этого пула. Если бы был какой-то идеальный герой, который является самым лучшим пиком против всего пула из 5 героев, он набрал бы 555 очков.

Как можно настроить программу под себя

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

1) Можно настроить галочки, которе ставятся рядом с ролями ("чекмарки"), редактируя файл roles/checkmarks.txt (0 - нет галочки, 1 - есть галочка). Тогда в программе при запуске уже будет выбрана нужная вам роль (роли).
2) Можно настроить списки героев для ролей, редактиря файлы в папке roles.

Чтобы составить свой список героев для роли, советую сделать так. Допустим, вы хотите составить свой список керри. Перенесите содержимоей файла all.txt в файл carry.txt. Удалите тех героев, которые по вашему мнению не являются керри. Сохраните файл. Я советую сделать именно так, потому что есть большая вероятность, что сами вы введете имя героя неправильно. Для программы обязательно единственно правильное написание имени каждого героя.

Давайте поэкспериментируем с программой на текущей мете

Для простоты буду представлять текущую мету 5 героями для каждой роли (для фарма - 7). Вот так:

Саппорт:
Lion
Дальний бойSupport - Disabler - Nuker - Initiator
Disruptor
Дальний бойSupport - Disabler - Nuker - Initiator
Rubick
Дальний бойSupport - Disabler - Nuker
Vengeful Spirit
Дальний бойSupport - Initiator - Disabler - Nuker - Escape
Crystal Maiden
Дальний бойSupport - Disabler - Nuker - Jungler

Хард:
Timbersaw
Ближний бойNuker - Durable - Escape
Faceless Void
Ближний бойCarry - Initiator - Disabler - Escape - Durable
Axe
Ближний бойInitiator - Durable - Disabler - Jungler
Slardar
Ближний бойCarry - Durable - Initiator - Disabler - Escape
Elder Titan
Ближний бойInitiator - Disabler - Nuker - Durable

Роум:
Mirana
Дальний бойCarry - Support - Escape - Nuker - Disabler
Riki
Ближний бойCarry - Escape - Disabler
Bounty Hunter
Ближний бойEscape - Nuker
Pudge
Ближний бойDisabler - Initiator - Durable - Nuker
Earth Spirit
Ближний бойNuker - Escape - Disabler - Initiator - Durable

Фарм:
Slark
Ближний бойCarry - Escape - Disabler - Nuker
Juggernaut
Ближний бойCarry - Pusher - Escape
Morphling
Дальний бойCarry - Escape - Durable - Nuker - Disabler
Anti-Mage
Ближний бойCarry - Escape - Nuker
Terrorblade
Ближний бойCarry - Pusher - Nuker
Lifestealer
Ближний бойCarry - Durable - Jungler - Escape - Disabler

Мид:
Invoker
Дальний бойCarry - Nuker - Disabler - Escape - Pusher
Tinker
Дальний бойCarry - Nuker - Pusher
Storm Spirit
Дальний бойCarry - Escape - Nuker - Initiator - Disabler
Kunkka
Ближний бойCarry - Disabler - Initiator - Durable - Nuker
Alchemist
Ближний бойCarry - Support - Durable - Disabler - Initiator - Nuker


Эти данные я взял с http://www.dotabuff.com/heroes/meta, рейтинг 5к+, смотрел на количество матчей.

Лучшие герои всех позиций против кор-героев текущей меты (6.88) по версии программы:

Мид:
Storm Spirit
Дальний бойCarry - Escape - Nuker - Initiator - Disabler
Clinkz
Дальний бойCarry - Escape - Pusher
Templar Assassin
Дальний бойCarry - Escape

Фарм:
Troll Warlord
Дальний бойCarry - Pusher - Disabler - Durable
Ursa
Ближний бойCarry - Jungler - Durable - Disabler
Riki
Ближний бойCarry - Escape - Disabler

Хард:
Night Stalker
Ближний бойCarry - Initiator - Durable - Disabler - Nuker
Faceless Void
Ближний бойCarry - Initiator - Disabler - Escape - Durable
Weaver
Дальний бойCarry - Escape

Роум:
Riki
Ближний бойCarry - Escape - Disabler
Bane
Дальний бойSupport - Disabler - Nuker - Durable
Spirit Breaker
Ближний бойCarry - Initiator - Disabler - Durable - Escape

Лес:
Troll Warlord
Дальний бойCarry - Pusher - Disabler - Durable
Ursa
Ближний бойCarry - Jungler - Durable - Disabler
Shadow Demon
Дальний бойSupport - Disabler - Initiator - Nuker

Саппорт:
Io
Дальний бойSupport - Escape - Nuker
Shadow Demon
Дальний бойSupport - Disabler - Initiator - Nuker
Skywrath Mage
Дальний бойSupport - Nuker - Disabler


Приведем картинку ближе к текущей мете, выбрав из предлагаемых программой вариантов только метовые:

Мид:
Storm Spirit
Дальний бойCarry - Escape - Nuker - Initiator - Disabler

Фарм:
Morphling
Дальний бойCarry - Escape - Durable - Nuker - Disabler

Хард:
Faceless Void
Ближний бойCarry - Initiator - Disabler - Escape - Durable

Роум:
Riki
Ближний бойCarry - Escape - Disabler

Лес:
Axe
Ближний бойInitiator - Durable - Disabler - Jungler

Саппорт:
Lion
Дальний бойSupport - Disabler - Nuker - Initiator


Если говорить о кор-позициях, то предполагаю, что
Troll Warlord
Дальний бойCarry - Pusher - Disabler - Durable
так хорош, т.к. он неплох против эскейперов за счет башей и также неплох тем, что метовые коры имеют "перекос" в сторону урона в ущерб их "жирности". Против такого рода героев троль по идее должен иметь неплохое преимущество. То же можно сказать и о
Storm Spirit
Дальний бойCarry - Escape - Nuker - Initiator - Disabler
. Это всё, конечно, моя 4к-аналитика, не берите в голову.

В общем, наблюдается забавная ситуация. Многие пики, которые предлагает программа как самые лучшие, не являются метовыми. Пожалуй, следует списать это на несовершенство системы matchup'ов, но кто знает, может быть просто игроки недооценивают силу некоторых героев в текущей игровой среде? Может быть игроки ориентируются в первую очередь на то, что происходит на про-сцене, не пытаясь абстрагироваться от этого и постараться выбрать что-то действительно максимально эффективное против меты? Я, со своей 4к-колокольни вряд ли могу судить о таких вещах, но всё же заметьте, многие из топовых предлагаемых программой пиков есть в мете, почему же стоит так сильно сомневаться в остальных? В общем, это следует оставить на ваш суд, особенно суд скилловых, опытных игроков.

Лучшие герои всех позиций против всех героев текущей меты (6.88) по версии программы:

Мид:
Puck
Дальний бойInitiator - Disabler - Escape - Nuker

Фарм:
Dragon Knight
Ближний бойCarry - Pusher - Durable - Disabler - Initiator - Nuker

Хард:
Night Stalker
Ближний бойCarry - Initiator - Durable - Disabler - Nuker

Роум:
Bane
Дальний бойSupport - Disabler - Nuker - Durable

Лес:
Dragon Knight
Ближний бойCarry - Pusher - Durable - Disabler - Initiator - Nuker

Саппорт:
Skywrath Mage
Дальний бойSupport - Nuker - Disabler


Лучшие метовые герои всех позиций против всех героев текущей меты (6.88) по версии программы:

Мид:
Storm Spirit
Дальний бойCarry - Escape - Nuker - Initiator - Disabler

Фарм:
Morphling
Дальний бойCarry - Escape - Durable - Nuker - Disabler

Хард:
Slardar
Ближний бойCarry - Durable - Initiator - Disabler - Escape

Роум:
Vengeful Spirit
Дальний бойSupport - Initiator - Disabler - Nuker - Escape

Лес:
Lifestealer
Ближний бойCarry - Durable - Jungler - Escape - Disabler

Саппорт:
Lion
Дальний бойSupport - Disabler - Nuker - Initiator


Предполагаю, что это как раз те герои, которых можно брать на ФП.

Заключение

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

https://yadi.sk/d/ZPYzhX6Atiwac (64-битная версия)
https://yadi.sk/d/DPsfUu_XtmTDL (32-битная версия)
Eugenius4
29 Июл 2016 в 07:23
5562
15
1 5 4 31 23 8

Комментарии

Правила
На данный момент в комментариях у нас действуют следующие правила: https://dota2.ru/forum/threads/pravila-portala.1694/ (срок бана выдаётся на усмотрение модератора).
31 Июл 2016 в 04:41
0
можно было в экселе все запилить через функцию рандом, вышло бы так же круто
31 Июл 2016 в 04:42
0
кто-нибудь проверял это на троянов?
31 Июл 2016 в 06:13
0
Проверь сам, это так трудно?
31 Июл 2016 в 12:38
-1
у меня не винда, я хз как вы там живете
31 Июл 2016 в 20:16
0
В доту не играю, но у самого было желание сделать прогу для адекватных контрпиков, но как-то забил на это дело из-за вышеуказанной причины.
Если хочешь идею для TODO, есть вот такие:
1. Анализатор твоих игровых аккаунтов. Чтобы прога реже советовала тебе взять инвокера, если у тебя винрейт на нем за последний месяц >40%, или если ты на нем вообще не играешь.
2. Простая статистика с Dotabuff*/.../meta/ конечно идея неплохая, но будет гораздо эффективней, если прога будет точно знать, на каком MMR ты играешь, и брать статистику с учетом твоего рейтинга.
3. Ну и как бонус, прога может показывать твой винрейт. Не весь, только тех игр, где ты пикнул героя, которого тебе посоветовала прога. Это будет показателем эффективности твоей программы.
4. Реализовать все это в виде оверлея. Вроде как оверлей легко делается путем внедрения dll в dota2.exe, но антивирусы и VAC могут сильно наорать.
Вообще, если взяться за это с умом, можно сделать очень мощную и популярную штуку, и заработать на ней. Все-таки, пики-контрпики в дотке на сегодняшний день - нерешённая проблема.
01 Авг 2016 в 19:36
0
Последнее уже как-то жирно, да и VAC может банан выдать.
01 Авг 2016 в 19:29
0
По рукам бы надавать за такой интерфейс :)
01 Авг 2016 в 19:31
0
Омг, оно еще на Тикле написано?
01 Авг 2016 в 22:49
0
Да, согласен, интерфейс немного кривоват. Как раз именно потому, что написано на тикле. Там все объекты размещаются как элементы таблицы. Там нету координат, там есть столбцы и строки. Но юзабилити из-за интерфейса вроде не страдает. Умею на C писать, но на tcl для меня намного проще это делать.
01 Авг 2016 в 23:40
0
>юзабилити не страдает
Как раз страдает, потому что вместо того чтобы юзать прогу юзер занимается выкалыванием своих глаз.
05 Авг 2016 в 01:21
0
Это что на windows forms?
Для того, чтобы оставить комментарий, Вам необходимо зарегистрироваться или войти под своим аккаунтом.

Академия

Новости

Железо

Форум

Мемы

Normann
85

Матчи

Стримы

Видео

Пожалуйста, отключите AdBlock.

Dota2.Ru существует и развивается только благодаря рекламе. Добавьте наш сайт в исключение вашего блокиратора рекламы. Узнать больше...

Закрыть

Обращение администрации сайта

Каждый день мы работаем над Dota2.Ru, чтобы он оставался лучшим сайтом по Dota 2 в России и СНГ. Мы сделали его очень разнообразным, благодаря чему каждый посетитель находит то, что интересно именно ему: читает новости, учится играть по гайдам, узнаёт информацию о турнирах и матчах, смотрит стримы, общается на форуме и много другое.

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

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

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

Искренне надеемся на ваше понимание и поддержку. Спасибо.

Есть предложение по улучшению сайта?