Читаем Программирование игр и головоломок полностью

1. Никакого внутреннего представления игры. Скорость движения машин и интервалы между машинами суть постоянные величины, которые вы можете поместить в таблицу или каждый раз пересчитывать.

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

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

Вам не нужно экономить ни время вычисления, ни объем памяти. Выберите решение, которое, как вам кажется, проще всего реализовать…

Игра 8.

Перемещение шадока почти не составляет проблемы: вы читаете данную в ответ цепочку символов. Если она содержит П, то абсцисса шадока увеличивается на 1, и т. д.

Перемещение многочисленных гиби немного более сложно. Для каждого из гиби нужно найти ближайший к нему цветок. Если у вас есть таблица, задающая положения цветов, то вы ее полностью перебираете и отыскиваете ближайший. Если у вас такой таблицы нет, то нужно вертеться кругами вокруг каждого из гиби, чтобы найти ближайший цветок. Первое решение кажется лучшим.

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

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

Игра 9.

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

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

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

Игра 10.

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

Игра 11.

Перейти на страницу:

Похожие книги

Programming with POSIX® Threads
Programming with POSIX® Threads

With this practical book, you will attain a solid understanding of threads and will discover how to put this powerful mode of programming to work in real-world applications. The primary advantage of threaded programming is that it enables your applications to accomplish more than one task at the same time by using the number-crunching power of multiprocessor parallelism and by automatically exploiting I/O concurrency in your code, even on a single processor machine. The result: applications that are faster, more responsive to users, and often easier to maintain. Threaded programming is particularly well suited to network programming where it helps alleviate the bottleneck of slow network I/O. This book offers an in-depth description of the IEEE operating system interface standard, POSIX (Portable Operating System Interface) threads, commonly called Pthreads. Written for experienced C programmers, but assuming no previous knowledge of threads, the book explains basic concepts such as asynchronous programming, the lifecycle of a thread, and synchronization. You then move to more advanced topics such as attributes objects, thread-specific data, and realtime scheduling. An entire chapter is devoted to "real code," with a look at barriers, read/write locks, the work queue manager, and how to utilize existing libraries. In addition, the book tackles one of the thorniest problems faced by thread programmers-debugging-with valuable suggestions on how to avoid code errors and performance problems from the outset. Numerous annotated examples are used to illustrate real-world concepts. A Pthreads mini-reference and a look at future standardization are also included.

David Butenhof

Программирование, программы, базы данных
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Майерс , Скотт Мейерс

Программирование, программы, базы данных / Программирование / Книги по IT