![]() |
Звоните! (926)274-88-54 Бесплатная доставка. Бесплатная сборка. |
Ассортимент тканей График работы: Ежедневно. С 8-00 до 20-00. Почта: soft_hous@mail.ru |
![]() ![]() ![]() |
Читальный зал --> Программные средства foundation ПРАВИЛА ИГРЫ В КРЕСТИКИ И НОЛИКИ (НА СЛУЧАЙ, ЕСЛИ ВЫ НЕ ЗНАЕТЕ) Игра в крестики и нолики ведется двумя игроками на поле, разбитом на клетки, по 3 клетки в каждой строке и в каждом столбце. Первоначально клетки пустые. Один игрок выбирает себе в качестве метки крестик X, а другой - нолик О. Игроки поочередно ставят свои метки в одной из пустых клеток; игрок X всегда начинает первым. Победителем считается тот, кто первым заполнит своими метками три клетки подряд в строке, в столбце или по диагонали. Хотя у игрока X, начинающего игру, есть небольшое преимущество, можно показать, что игра между двумя сообразительными игроками всегда заканчивается вничью: ни один ифок не поставит три метки подряд к моменту, когда поле заполнится. 2. Ищем строку, столбец или диагональ, где имеются две метки противника и одна пустая клетка. Если такая ситуация обнаруживается,то помещаем свою метку в эту пустую клетку, чтобы блокировать возможный выигрыш противника. 3. Выбираем клетку, руководствуясь своим опытом. Например, если центральная клетка пустая, то обычно стоит заполнить ее. В противном случае полезно заполнять угловые клетки. Умный игрок может заметить также и блокировать развитие конфигурации противником или выбрать хороший ход благодаря предвидению .
столбец Рис. 6.11. Поле для игры в крестики и нолики и имена сигналов в программе на языке ABEL Заранее предвидя путаницу между символом О и нулем О в наших программах, мы, во избежание неприятностей, назовем второго игрока буквой Y. Далее, нужно подумать о том, как следует кодировать входные и выходные сигналы в разрабатываемой схеме. У каждого ифока существует только девять возможных ходов, поэтому для представления выходных сигналов достаточно четырех двоичных разрядов. Входными сигналами схемы служит текущее состояние игрового поля. Каждая из девяти клеток, может находиться в одном из трех состояний (пустая, заполненная меткой X, заполненная меткой Y). Можно различными способами отобразить состояние одной клетки. Поскольку Ифа симметрична, выберем симметричное представление, которое поможет нам в дальнейшем: КОМПАКТНОЕ КОДИРОВАНИЕ Так как каждая клетка в этой игре может находиться только в одном иэ трех состояний, а не из четырех, общее число игровых конфигураций составляет 3? = 19683. Это число меньше, чем 2, поэтому состояние поля можно кодировать всего 15-ю разрядами. Однако в этом случае схема, выбирающая очередной ход, была бы слишком сложной, если только функции такой схемы не поручить ПЗУ (см. задачу 10.26). 00 - клетка пуста; 10 - клетка занята меткой X; 01 - клетка занята меткой Y. Таким образом, состояние поля размером 3x3 можно кодировать 18-ю битами. Будем обозначать клетки двумя числами, указывая номер строки и номер столбца, как это сделано на рис. 6.11, а в программе на языке ABEL будем использовать символы Х13 mYij при наличии метки X или Y в клетке 1, 3. Кодирование выходных сигналов давайте рассмотрим позже. Схема с 18 входами и 4 выходами, играющая в крестики и нолики, могла бы, в принципе, разместиться в одной ИС 22V10. Однако опыт показывает, что этого сделать нельзя. Поэтому функцию, реализуемую схемой в целом, необходимо разбить на части. Сделать это можно в соответствии с тем, как ифок принимает решение по шагам, и мысль эта выглядит неплохой идеей. На самом деле, шаги 1 и 2 очень похожи: они отличаются только тем, что игроки меняются ролями. Именно поэтому может оказаться полезным симметричное кодирование. ПЛУ, которое находит две мои метки подряд и пустую клетку для победного хода (шаг 1), может найти также две метки моего противника подряд и пустую клетку для выполнения блокирующего хода (шаг 2). Все, что нам надо сделать, - это переставить коды меток X и Y. При выбранном нами способе кодирования, не требующем никакой логики, достаточно во всех клетках физически поменять местами сигналы Х13 и Y13. С учетом этого для выполнения шагов 1 и 2 можно воспользоваться двумя одинаковыми ПЛУ TWOINROW, как показано нарис. 6.12. Обратите внимание, что сигналы Х11-ХЗЗ поданы на верхние входы первого ПЛУ TWOINROW и на нижние входы второго ПЛУ. Х11-ХЗЗ . Y11-Y33 TWOINROW Х11-ХЗЗ M0VE[3 0] Y11-Y33 TWOINROW XII-хаз M0VE[3 0] Y11-Y33 PICK XM0VE[3 Oj M0VE[3 0] YM0VE[3 Oj X11-X33 Y11-Y33 Рис. 6.12. Предварительное разбиение на блоки схемы для реализации игры в крестики и нолики M0VE[3 0] Сигналы с выходов двух ПЛУ TWOINROW пусть поступают на входы еще одного ПЛУ PICK. Если хотя бы одним их двух первых ПЛУ найден ход, то блоком PICK он передается на выход; в противном случае этим устройством выполняется шаг 3. Похоже, что у блока PICK слишком много входов и выходов и его нельзя реализовать в ИС 22V10, но мы вернемся к этому позже. В табл. 6.13 представлена программа для ПЛУ TWOINROW. В ней анализируется состояние игрового поля с точки зрения игрока X; другими словами, ищется ход, при котором метка X будет занимать три идущие подряд клетки. В этой программе активно используются промежуточные равенства для определения всех возможных ходов по строкам, столбцам и диагоналям. В выражении для Gi j обьединяются все условия, при которых ход в клетку i, j (ее заполнение меткой X) будет правильным ходом. Наконец, в разделе equations с помощью оператора WHEN выбирается нужный ход. Табл. 6.13. при игре в а ямш ABEL для нахожаэ шщ меток подряд *1 нолики snodule twoinrow Title Find Two Xs and an enspty cell in a row, со1иша, or diagonal TWOINROW device ?22V1Q i Inputs and Outputs Xll, X12, X13, X21, X22, X23, X31, X32, X33 pin 1..9; У11, Y12, У13, У21, У22, Y23, У31, У32, УЗЗ pin 10,11,13-.15.20..23; MOVES..MOVED pin 16.. 19 istype cons; MOVE output encodings MOVE = MOVEli = M0VE21 = H0VE31 = NOSE = [MOVES. .MOVEO]; [1,0,0,0]; M0VE12 = [0,1,0,0]; М0УЕ13 = [0,0.1.0] [0,0,0,1]; M0VE22 = [1.1,0,0]; M0VE23 = [0,1,1,1] [1,0,1,1] ; M0VE32 - [1,1,0,1] ; M0VE33 = [1,1,1,0] [0.0,0,0]; Find moves in rows. Rxy ==> a move exists in cell xy
a move exists in cell xy ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку. Звоните! Ежедневно! (926)274-88-54 Продажа и изготовление мебели. Копирование контента сайта запрещено. Авторские права защищаются адвокатской коллегией г. Москвы. |