154____________________________________________
— поместить изображения фишек со случайными значениями цвета в случайных местах на экране.
Пусть дисплей работает в текстовом режиме и для обозначения цвета используются числа от 1 до 15. Фишка может размещаться в любом из столбцов с 1 по 80 и в любой из строк с 1 по 24. Распределение каждой из трех случайных величин должно быть равномерное, то есть вероятности каждого из значений соответствующей переменной должны быть равны. Один из вариантов, иллюстрирующих решение задачи, приведен в следующей программе:
DEFINT I 'определение целых чисел
CLS 'очистка экрана
RANDOMIZE TIMER 'инициализация генератора случайных чисел
FOR 1=1 ТО 50 'начало цикла вывода изображений фишек
IX = INT(RND * 80) + 1 'номер столбца
IY = INT(BND * 24) + 1 'номер строки
IZ = INT(RND * 15) + 1 'цвет фишки
LOCATE IY, IX 'установка курсора
COLOR IZ 'выбор цвета
PRINT CHR$(219); 'вывод символа NEXT f 'конец цикла COLOR 7 'восстановление стандартного цвета вывода
В этой программе использован ставший уже стандартным способ задания начальных условий для генератора случайных чисел по текущему значению счетчика времени. Обратите внимание на то, что хотя программа выводит 50 изображений фишек, в действительности их может оказаться меньше. В самом деле, при случайном совпадении координат возможен вывод фишки на уже занятое место. Если в игре используется строго определенное количество фишек, то цикл со счетчиком непригоден.
Вторая задача — случайная перестановка фишек с числами от 1 до 15. В массиве целых чисел записаны в возрастающем порядке числа от 1 до 15. Необходимо переставить их случайным образом для того, чтобы играющий восстановил их исходное положение. При этом условия игры накладывают жесткие ограничения на перестановки фишек игроком (например, известная игра 15, в которой не разрешается вынимать фишки из коробки).
Нижеприведенная программа выполняет эту задачу. Обратите внимание на то, что в ней специально не использована процедура очистки экрана, чтобы можно было убедиться в отсутствии грубых ошибок в части случайности перестановки посредством повторных запусков программы. С целью облегчения сравнения использован форматированный вывод значений элементов массива в одну строку.
По поводу алгоритма перестановки требуется более подробное объяснение. Можно было бы использовать два массива: первый должен был бы моделировать мешочек, из которого "втемную" вынимаются фишки, а второй — коробочку, в которую эти фишки выставляются. Здесь использована другая модель случайной перестановки, в которой первоначально все фишки уложены в коробочку по порядку номеров (последняя ячейка с номером 16 пустая, что моделируется нулевым значением эле-