Выбрать главу

Но если у вас есть таблица цветов, то нужно, по ходу движения гиби, исключать один за другим уже сорванные цветки (как вы собираетесь это сделать?). Здесь есть и некоторое преимущество: цветок может быть сорван только одним из гиби. Как только это произошло, цветок больше не привлекает других гиби. Когда время сбора плодов истекает, вы знаете, сколько цветков исчезло, и вы случайным образом добавляете столько же цветков в игру.

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

Игра 9.

Мало что можно добавить. Единственная трудность — движение убийц. Они должны стремиться приблизиться к игроку, но это не всегда возможно. Вы легко можете определить направление наилучшего перемещения: это направление, которое уменьшает скачок координат убийцы и игрока. Если такое перемещение возможно, то убийца перемещается. Если оно невозможно, то следует испытать близкие перемещения,

Вот способ действовать: задайте таблицу, определяющую возможные перемещения, помеченные индексами от 1 до 8, Желательное перемещение соответствует некоторому элементу таблицы, скажем, элементу с номером k. Испытаем тогда перемещение k, затем, если оно невозможно, перемещения k − 1 и k + 1, затем k − 2 и k + 2… Когда индекс становится нулем, мы его заменяем на 8, Когда он становится больше восьми, мы заменяем его на 1, что сводится к организации таблицы по круговому списку. Внимание, это допустимо только в случае, если вы правильно упорядочили перемещения в таблице…

Как и в предыдущих играх, тщательно продумайте способ представления игры, задайте всю необходимую информацию для упрощения программирования. Не позволяйте себе увлечься оптимизацией времени вычислений или объема требуемой памяти. Эта игра должна легко поместиться на любом микрокомпьютере. Работайте аккуратно: если то, что вы запрограммировали, не удовлетворяет правилам игры, то ваша игра нечестная.

Игра 10.

Добавить нечего. Это проще, чем в случае убийц. Вы определяете направление перемещения, которое наилучшим образом приближает робота к игроку (перемещение, которое уменьшает скачки обеих координат). Вы перемещаете робота в этом направлении. Если он попадает в расщелину, то он исключается из игры. Если он попадает на поле другого робота, то он также исключается. Используйте генератор случайных чисел, чтобы решить, помещаете ли вы в углы новых роботов. Например, если случайное число меньше 0,7, то вы ставите нового робота; в противном случае вы не делаете ничего. Это означает, что есть 7 шансов из 10 увидеть появление нового робота…

Игра 11.

Никаких особенных трудностей, если не считать тех, которые связаны с рисунком дороги и положением препятствий. У вас много способов представить игру. Если вы используете таблицу, то факт перемещения фигуры очевидно обязывает вас производить сдвиги. Если вы используете цепочки символов, то дело упрощается. Вы можете, например, состыковывать (конкатенировать) различные строчки (вначале — пробелы, 4 знака (точка, звездочка, 0), код окончания строки) в единую строку, которую вы выводите на экран кусок за куском. Чтобы сдвинуть фигуру, вы убираете некоторое количество кусков в начале (определяемое скоростью) и добавляете столько же в конце. Но это неприемлемо, если ваш компьютер не допускает длинных цепочек (счастливы обладатели LSE1).

Чтобы заставить дорогу повернуть, вы изменяете на i число пробелов в начале. Но не выбирайте случайным образом одно из трех чисел: −1, 0, 1. (Технически это легко. Вы выбираете случайным образом число в интервале (0, 1), скажем x, а затем берете целую часть от (3 * x), уменьшенную на 1.) Если вы сделаете так, то дорога останется приблизительно прямой с маленькими колебаниями влево или вправо. Задайте фактор поворота принимающий значения −1, 0 или 1. На каждой новой строке вы увеличиваете на t число пробелов в начале. Чтобы изменить t, вы выбираете случайное число. Вы надаете постоянную величину a. Если случайное число меньше a, то вы уменьшаете t на 1, и если это действие дает вам −2, то вы полагаете t равным 1. Если, напротив, случайное число больше, чем 1 − a, то вы увеличиваете t нa 1 и если получаете 2, то заменяете его на −1. Параметр a вы подберете экспериментально.