Определение номера проигрываемого кадра.
Задание 4 1. В сценарии кадра закомментировать код остановки проигрывания клипов-клеток и переписать его в виде цикла. Задание 5 1. Остановить автоматическое проигрывание клипов методом stop(), размещенным на первом кадре символа. Определение номера проигрываемого кадра. Свойство _currentframe Cвойство _currentframe хранит номер текущего кадра. switch (this. _currentframe) { case 1: trace(" Клетка пуста" ); break; case2: trace(" В клетке крестик" ); break; case 3: trace(" В клетке нолик" ); break; } Обработка хода в игре Обработчик события нажатия клетки (onPress) для каждой клетки один и тот же. Придется писать одну и ту же функцию несколько раз. c00_mc. onPress=function() {…} … c22_mc. onPress=function(){…} Если бы обработчики создавались как сценарии клипов, то другого варианта не было бы. Но при создании обработчиков-методов можно написать именованную функцию, содержащую все действия обработчика function hod(){…} Имя функции hod является ссылкой на саму функции, поэтому методу onPress можно присвоить имя функции. c00_mc. onPress=hod; … c22_mc. onPress= hod; Причем используя функцию eval можно записать последовательность операций присвоения в цикле. for(row=0; row< =2; row++) for(col=0; col< =2; col++) eval(" c" +row+col+" _mc" ). onPress=hod; //или _root[" c" +row+col+" _mc" ]. onPress=hod В функции hod можно ссылаться на вызвавший объект через указатель this. Определение положения выбранной клетки В обработчике события нажатия клетки можно узнать ее имя с помощью свойства _name. var clip_name: String clip_name=this. _name В имени клетки зашито ее положение. Второй и третий символы —номера ее строки и столбца. Строки имеют метод substring(start, end), который возвращает подстроку, начинающуюся с индекса start и заканчивающуюся перед индексом end. Для получения номера столбца надо получить его строковое представление и преобразовать в число.
row=Number(clip_name. substring(1, 2)) col=Number(clip_name. substring(2, 3)) Задание 6 6. 1 Запрограммировать игру следующим образом: ¨ два игрока по очереди проставляют свои ходы щелчками мышки на выбранных клетках — один крестиками другой ноликами; ¨ щелчок уже заполненной клетки игнорируется. Указания. Создать переменную player, которая может принимать два значения — " х" и " 0" или 2, 3 (номера соответствующих кадров клетки). Значение ее меняется при каждом ходе и определяет кадр, на котором останавливается нажимаемый клип-клетка. 6. 2 Добавить кнопку, нажатие которой начинает новую игру (очищает все клетки). Задание 7 (дополнительное) Символ cell имеет три кадра: пустая клетка, крестик, нолик. Поместить на второй и третий кадры экземпляры анимированных символов. Крестик и нолик должны не просто появляться, а прорисовываться. Как сделать, чтобы крестик и нолик прорисовывались только один раз? Анимацию нолика проще делать покадровой из 6-10 кадров.
Программирование ходов компьютера Гораздо более интересен вариант игры с компьютером, для которого выполняются следующие правила. 1. Кто будет делать первый ход определяется случайным образом (первый игрок ходит крестиками). 2. Алгоритм игры компьютера должен автоматически выбирать оптимальный для текущей ситуации ход. Оценка и выбор хода осуществляется исходя из следующих соображений: ¨ Наивысшим приоритетом обладает ход, который может победно завершить игру. Она возникает, если в соответствующем рядке компьютером уже закрыты две клетки и есть свободная. ¨ Если нет хода, который приведет к немедленной победе, то нельзя допустить победу противника на следующем ходе. Второй по приоритету должна быть комбинация двух знаков противника и свободной клетки в одном рядке.
¨ Третье место должна занимать позиция, когда в рядке имеется один знак компьютера и две свободные клетки. Если противник не заметит, то через один ход получим ситуацию с наивысшим приоритетом. ¨ Четвертую позицию в приоритете необходимо отдать комбинации знак противника плюс две свободные клетки. ¨ Пятое место в иерархии ценности позиций необходимо отдать строке из пустых клеток. ¨ Последняя по ценности позиция соответствует сочетанию знака противника, знака компьютера и пустой клетки. Когда наступает очередь хода компьютера, он должен проверить ценность позиции каждой пустой клетки. Для каждой клетки надо проверить от двух до четырех рядов. Итогом " мыслительной" деятельности компьютера является обнаружение клетки с наивысшим приоритетом. Содержимое клетки, стоящей в строке row и столбце col определяется номером кадра клипа eval(" c" +row+col+" _mc" ). Если в клетке стоит символ компьютера, то ее можно оценить 100, если символ пользователя — 10, а пустую можно оценить единицей. curClip=eval(" с" +i+j+" _mc" ) switch (curClip. _currentframe){ case comp_hod: cell=100; break; case user_hod: cell=10; break; default: cell=1; break; } Просматривая ряды и собирая сумму оценок клеток, компьютер всегда сможет оценить ситуацию. Если получится сумма 201, то это означает, что в ряду уже есть два символа компьютера и одна пустая клетка (ситуация с наивысшим приоритетом! ). Если сумма 111 — один символ компьютера, один символ пользователя и одна пустая клетка. Если 21 — два символа пользователя и одна пустая. Приоритет ряда с суммой 21 должен быть выше приоритета ряда с суммой 111. Поэтому надо определить по вычисленным суммам рейтинги рядов, например следующим образом switch (sum){ case 201: return 1000; //2 символа компьютера и пустая клетка case 21: return 100; //2 символа пользователя и пустая клетка case 102: case 12: return 20; //один символ компьютера и две пустые клетки
//один символ пользователя и две пустые клетки case 3: return 7; // пустой ряд case 111: return 3; // по одному символу компьютер, пользователь, пусто case 30: return " user_victory"; // три символа пользователя ― он выиграл } Для клетки cij надо вычислить сумму по строке i и столбцу j. Если i = j, то клетка находится на главной диагонали и понадобится анализ суммы d1.
d1=c00+c11+c22 Если i +j = 2, клетка находится на вспомогательной диагонали и надо добавить сумму d2. d2=c02+c11+c20 Таким образом, для выбора хода компьютера надо: 1) Определить состояние рабочего поля — вычислить суммы по всем рядкам: строкам, столбцам и диагоналям. Написать функцию обсчета поля.. 2) Написать функцию, которая для клетки вычисляет ее рейтинг, состоящий из суммы всех рядов, в которые она входит. При этом до сложения, надо повысить приоритет выигрышных состояний и понизить его для мало перспективных. function ocenka(ves: Number) { switch (ves) { case 201: return 1000; case 21: return 100; case 102: return 50; case 12: return 20; case 3: return 7; case 111: return 3; case 30: return " user_victory"; } } 1) Проверить, может пользователь уже выиграл? Для этого оценить суммарный рейтинг клетки последнего хода пользователя. 2) Для каждой свободной клетки определить ее рейтинг и выбрать для хода клетку с наибольшим рейтингом. Если рейтинг окажется > =1000, то компьютер нашел победный ход!
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|