Реализация доступности шашечных программ с использованием скриптов JAWS

(Работа представлена на конкурс к десятилетию портала «Компьютерные технологии для незрячих и слабовидящих».)
Дата публикации:08.09.2014
Twitter Facebook Vkontakte

Целью данной статьи является демонстрация того, как использование скриптов программы экранного доступа JAWS for Windows обеспечивает незрячим полную доступность компьютерных шашечных и шахматных программ и комфортность их использования. По просьбе незрячих шашистов и шахматистов мною были найдены способы достижения доступности таких программ и в соответствии с ними написаны скрипты для наиболее профессиональных и сильных программ, таких как:

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

Доступность незрячим шашечных программ можно определить следующими функциональными возможностями:

  1. возможностью просмотра меню программы;
  2. возможностью выполнения хода;
  3. возможностью автоматически прослушать и повторить ответный ход соперника;
  4. в любое время игры прочитать текстовую диаграмму позиции на доске;
  5. возможность в любое время провести обзор доски перемещая курсор по доске;
  6. возможность расставить позицию на доске для решения задач и этюдов;
  7. просмотреть оценку движка, глубину расчёта или подсказку хода;
  8. возможность контроля времени;
  9. просмотреть протокол выполненных ходов;
  10. работать с базами партий.

В большинстве случаев JAWS хорошо озвучивает меню, но программы не имеют ручного ввода хода с клавиатуры. Самая сложная на первых порах проблема - перемещение шашки. В общем случае, для перемещения необходимо: навести на нее курсор мыши, нажать и удерживать в процессе перемещения левую кнопку мыши, тащить мышью на выбранное поле, после чего отпустить кнопку мыши. Кроме того, если выбранная шашка может двигаться лишь единственным образом, она делает ход сразу после щелчка по ней. Последнее, впрочем, определяется состоянием флажка «Перемещать шашки щелчком мыши» в окне Настройки. Такой способ перемещения шашки используют, например, программы Дебют-Эксперт, Каллисто, Дамира. В Тундре используется иное перемещение шашки: По ней следует щёлкнуть мышкой и затем щёлкнуть по полю, на которое она должна переместиться.

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

При загрузке программы, для инициализации глобальных стартовых значений, используя функции GraphicsEnumerate, FirstGraphics определяется геометрия первого графического объекта, являющегося левым верхним полем шашечной доски. Находятся в пикселях координаты его границ iLeft, iRight, iTop, iBottom. Вычисляются координаты (x0, y0) в пикселях его центра: x0 = (iLeft + iRight) / 2, y0 = (iTop + iBottom) / 2. (назовём эту точку точка отсчёта) и вычисляется размер поля d = iRight - iLeft. (Это поле является неигровым).

Учитывая то, что все поля доски являются квадратами координаты центра любого поля находятся по формуле: x = x0 + d * (i - 1), y = y0 + d * (8 - k), где (x0, y0( - координаты точки отсчёта, d - размер поля, (i, k) - нотационные координаты поля, принимающие целочисленные значения от 1 до 8. Координата (i) является индексным значением буквенной составляющей нотационного обозначения поля. При этом скрипт проверяет, является ли вводимое с клавиатуры поле игровым: Сумма I + K должна быть чётным числом.

Например, для поля A1 i = 1, k = 1. i + k = 2. Для поля C5 i = 3, k = 5, i + k = 8. Если это условие не выполняется, т.е. вводится ошибочное поле, скрипт сообщает, что поле неигровое.

Например, если в программе Тундра x0 = 420, y0 = 214, d = 48, то Координаты центра поля a1 имеют значения x = 420 + 48 * (1 - 1) = 420 , y = 214 + 48 * (8 - 1) = 550,

Координаты центра поля h8 будут иметь значения x = 420 + 48 * (8 - 1) = 756, y = 214 + 48 * (8 - 8) = 214,

c1 имеют значения x = 420 + 48 * (3 - 1) = 516, y = 214 + 48 * (8 - 1) = 550.

Таким образом вычисляются координаты центра любого игрового поля. Как правило, программы имеют возможность выбора размера доски: маленький, средний, большой. Даже при выборе маленького размера доски алгоритм срабатывает довольно успешно.

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

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

В режиме расстановки позиции с клавиатуры вводится нотационн ое имя поля, например, c5, Вычисляются координаты центра этого поля в пикселях и JAWS-курсор помещается в эту точку. Циклическим нажатием левой кнопки мыши выбирается вид белой шашки: простая, дамка, пустое поле. Циклическим нажатием правой кнопки мыши аналогично выбирается вид чёрной шашки. В программе Тундра вид шашки обоих цветов выбирается левой кнопкой мыши, а очистка поля выбирается правой кнопкой.

Иной способ расстановки позиции реализован автором в программе Каллисто, которая является необычайно сильным игроком. Вне доски располагаются четыре шашки Белая простая, Чёрная простая, Белая дамка, Чёрная дамка.

Предположим, надо поставить две белые шашки на поля A1, C1. Мышкой щёлкается белая шашка, находящаяся вне доски и щёлкается поле A1. Далее мышкой снова щёлкается белая шашка вне доски и щёлкается поле C1. Аналогичным образом ставятся белые дамки и чёрные шашки.

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

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

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

Обзор доски реализован в скриптах для всех программ, перечисленных выше.В режиме обзора доски JAWS-курсор перемещается курсорными клавишами по горизонталям и вертикалям, а клавишами Home, End, PageUp, PageDown перемещается по диагоналям. Эти же действия можно выполнять клавишами цифрового блока. Скрипт независимо изменяет значения нотационных координат (i, k) от 1 до 8.

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

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

Скрипт также может вывести в просмотрщик текст диаграммы в форме: Белые простые, Белые дамки, Чёрные простые, Чёрные дамки с указанием нотации полей, имеющихся шашек, и их количество. Например, исходная позиция в этой форме выглядит так:

Белые простые: a1 c1 e1 g1 b2 d2 f2 h2 a3 c3 e3 g3 (12)

Чёрные простые: b6 d6 f6 h6 a7 c7 e7 g7 b8 d8 f8 h8 (12)

Однако не для всех программ используется такой метод выполнения хода и расстановки позиции. Например, в программах Аврора, DAM22, CheckersLand и Fritz 11 имеется ручной ввод хода, но JAWS-курсор вообще не видит доски, что не позволяет без использования скрипта расставить позицию, выполняя щелчки левой клавишей по полям доски, и сделать обзор доски.

Для расстановки позиции и обзора доски в этих программах был найден простой и удобный способ с использованием записи позиции в формате Нотации ФорсайтаЭдвардса.

FEN это стандартная нотация записи шахматных и шашечных диаграмм.

Аврора использует Американский пул Checkers, в котором Обозначение полей нумеруются следующим образом:

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

К примеру, начальная шашечная позиция в формате FEN имеет вид:

[FEN "W:W29,30,31,32,25,26,27,28,21,22,23,24:B9,10,11,12,5,6,7,8,1,2,3,4."]

Последовательность полей, содержащих белые шашки, начинается с символа "W" (White), А последовательность полей, содержащих чёрные шашки, начинается с символа "B" (Black).

Признаком дамки является символ (!).

Например, позиция из двух шашек, содержащая на поле A1 белую дамку, а на поле H8 чёрную простую шашку будет в формате FEN иметь вид:

[FEN "W:W!29:B4."]

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

например: +a1 белая шашка, ++c1 белая дамка, -a7 чёрная шашка, --b8 чёрная дамка.

Отсутствие знаков (+ -) означает пустое поле. Удобным является то, что шашки независимо от цвета ивида можно вводить в любом порядке.

Например, чтобы расставить позицию из трёх белых дамок, занимающих поля и1, c1, e1, и одной чёрной дамки на поле d8 надо ввести с клавиатуры такую последовательность (причём элементы этой последовательности можно вводить в любом порядке независимо от цвета шашек):

++a1 ++c1 ++e1 --d8

После того как позиция введена, она копируется в буфер с преобразованием в стандартную форму FEN и по горячей клавише вставляется из буфера в программу, которая автоматически расставляет позицию на доске.

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

Например, диаграмма начальной позиции шашек имеет такой вид:

5111111116
4 e e e e3
4e e e e 3
4 e e e e3
4i i i i 3
4 i i i i3
4f f f f 3
4 f f f f3
4f f f f 3
7222222228

Символ i обозначает пустое поле, Символ e обозначает чёрную шашку, а символ f - белую. Большие буквы соответственно обозначают дамку.

Так же, как и в программах Дебют-Эксперт и Тундра, обзор доски осуществляется курсорными клавишами и клавишами Home, End, PageUp, PageDown. Скрипт меняет значения нотационных координат (i, k) и находит в матрице диаграммы соответствующий элемент и называет находящуюся в этом поле шашку.

Учитывая то, что В Авроре скрипт не использует графические объекты шашек, он работает стабильно и не зависит от разрешения экрана.

В режиме обзора доски в Авроре и в программе Fritz 11 у незрячих шашистов и шахматистов создаётся представление, что как будто бы курсор перемещается по доске, хотя на самом деле никакого движения курсора нет.

В шахматной программе Fritz 11 мною был реализован способ расстановки позиции, как в шашечных программах Дебют-Эксперт, Тундра, Дамира, а обзор доски реализован, как в программе Аврора, с использованием формата FEN.

В режиме расстановки позиции Фигура ставится вводом её названия и имени поля: k - Белый король, q - Белый ферзь, n - Белый конь, l - Белый слон, p - Белая пешка. Имена чёрных фигур вводятся с клавишей Shift соответственно. Например, чтобы поставить белого короля на поле E1, следует нажать клавиши ke1, а чтобы поставить чёрного короля на поле e8, следует ввести Ke8. Удаление фигуры с доски осуществляется вводом имени поля без имени фигуры.

Цифра со знаком минус после имени фигуры циклически меняет цвет фигуры, и удаляет фигуру. Горячими клавишами Позиция в формате ASCII копируется в буфер и в формате ASCII вставляется из буфера.

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

Запись FEN описывает позицию на шахматной доске в виде строки ASCII символов.

Пример записи начальной шахматной позиции в формате FEN:

rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1

К примеру, позиция в формате FEN после хода E2E4-E7E5 будет иметь вид:

rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq e6 0 2

Скрипт обзора доски так же, как в Авроре, изменяет значения координат (i, k) В соответствии с ними находит в строке FEN символ и озвучивает соответствующую этому символу фигуру.

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

Каждая программа имеет возможность анализа позиции. Все его опции скрипт позволяет использовать в процессе игры. При загрузке любой программы можно ознакомиться с горячими клавишами по комбинации JAWSKey+H.

Отрицательным моментом для шашистов является то, что все ставшие доступными программы, за исключением DAM227, не имеют функции Damexchange, позволяющей играть в сети.

Здесь на помощь приходит JAWS со своей утилитой "тандем". На управляемом компьютере в сеансе тандем запускается одна из шашечных программ, выбирается режим игры "человек-человек" и игру начинает любой игрок, выбравший белые шашки. Естественно возникает вопрос, почему необходимо играть с использованием шашечной программы?

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

Не решённым на настоящее время также является невозможность игры через сеть с соперниками, не использующими JAWS.

Есть ещё очень сильные программы, такие как Торнадо и Скифи, для которых описанные в статье способы написания скриптов пока ещё не реализованы.

При изучении языка скриптов JAWS и написании скриптов мне большую помощь оказали Анатолий Камынин и Руслан Усачёв, которым я очень благодарен.

Ссылки для загрузки



Распространение материалов сайта означает, что распространитель принимает условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2017
Rambler's Top100