му проверки вышеизложенного условия окраски фишек по заданному направлению chck. В списке возможных ходов хранятся не координаты квадратов, которые используются для запоминания положения на доске, а их номера от 1 до 64. (Координаты квадратов вычисляются по их номерам при помощи операций целочисленного деления). Для хранения списка ходов также используется массив и указатель текущей длины, но дисциплина его обслуживания отличается от приведенного в предыдущем занятии примера. Здесь используется так называемый кольцевой буфер, поиск информации в котором можно осуществлять изменением индекса массива вниз и вверх. При выходе значения индекса за пределы от 1 до текущей длины производится соответствующая коррекция индекса.
Существенное отличие от предыдущих примеров состоит в том, что с компьютером должны взаимодействовать два игрока поочередно. Поэтому для каждого из игроков поочередно составляется список возможных ходов и вычисляется размер списка. Для управления с клавиатуры используются клавиши в левой и правой частях буквенной клавиатуры: а или k для перебора списка в возрастающей последовательности, s или / — в убывающей и q или р для исполнения хода первым или вторым игроком соответственно.
Полный текст программы приведен в "Приложениях" (RVRS2.BAS) и автор надеется, что приведенных здесь пояснений достаточно для того, чтобы разобраться в ее построении и функционировании. Следует упомянуть, что для изображения доски с фишками использован графический режим и процедуры LINE, CIRCLE и PAINT.
Если у вас нет партнера для этой игры, то можно поручить роль второго игрока компьютеру. Для этого необходимо написать программу выбора хода вторым игроком. Простейший алгоритм такого выбора — использование случайного номера для выборки очередного хода из списка возможных ходов. Его можно использовать на начальном этапе отладки программы. Но вскоре игра против такого соперника станет неинтересной, так как уровень "мастерства" этой программы будет довольно низким. Поэтому в качестве иллюстрации программы автоматического выбора хода был выбран алгоритм с эвристической функцией оценки эффективности хода. Полный текст программы приведен в "Приложениях" под названием RVRSI.BAS. Для вычисления оценки эффективности хода добавлена подпрограмма getrank, результаты работы которой записываются в массив rnk. Выбор хода производится по первому из наибольших чисел в этом массиве.
Наукообразный термин "эвристический" означает некоторое необязательно научно обоснованное и потому необязательно наилучшее решение задачи. Он возник из легенды об Архимеде, который нагишом выскочил из ванны и побежал по городу с криком "Эврика!" (я нашел). А решение, которое он нашел, было научно обоснованно (знаменитый закон Архимеда) и позволило определить сколько серебра было добавлено в золотую корону жуликоватым ювелиром.
Поскольку в результате игры необходимо поставить как можно больше фишек своего цвета, естественно попытаться оценить эффективность каждого возможного хода по количеству переворачиваемых фишек.