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

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

Размер игры значит очень мало. Я предпочитаю игру с тремя строками, но 4 и 5 — тоже очень хорошие числа. Длина строк несущественна. Выберите ее так, чтобы игра хорошо смотрелась.

На экране вы можете воспользоваться техникой, которая нам так часто служила. Пусть свободные клетки будут представлены точками, шашки одного из игроков — звездочками, а другого — 0. На рис. 13 воспроизведено начальное положение (4 строки, 9 полей на строке). Ход компьютера состоит просто в перемещении одной из его шашек (внимание: если ответ будет слишком быстрым, его, может статься, будет трудно воспринимать. Подумайте, как использовать цикл ожидания). Ход игрока может быть дан компьютеру в вг-де указания, на какой строке нужно переставить шашку и число полей при перемещении; положительное число указывает на приближение к противнику, отрицательное число означает отход к краю игрового поля. Все это очень просто,

?* Игра 21. Игра Кейлеса.

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

Вначале:

0000000000000

После нескольких ходов;

.000..00.0000..

Выигрывает тот, кто берет последнюю спичку.

Игру можно легко распространить на случай нескольких исходных линий спичек. На каждом ходе игрок берет либо одну спичку, либо две соседние спички на линии, которую он выбрал.

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

* Игра 22. Игра Сима.

Еще одна игра, тоже совершенно не равноправная для двух игроков — для компьютера и для вас.

Игра разыгрывается на листе бумаги, на котором обозначены 6 точек, являющихся вершинами правильного шестиугольника, помеченные буквами A, B, C, D, E, F. Естественно ожидать, что вашим партнером будет компьютер, и ему никакой бумаги не нужно, так что 6 точек появятся на экране.

Каждый игрок при своем ходе проводит отрезок прямой, соединяющий еще не соединенные вершины. Нужно, чтобы следы отрезков, проведенных различными игроками, можно было отличить. На рис. 14 следы одного — сплошные, а у другого — штриховые. В запрограммированной игре именно компьютер берет на себя проведение отрезков. Скажите ему только названия вершин, которые вы хотите соединить. Он и проведет отрезок, причем такого типа, который вам присвоен. Затем он выберет вершины, которые он захочет соединить, и проведет свой собственный отрезок.

Проигрывает тот, кто первым построит треугольник из своих собственных отрезков. Так, на рис. 14 тот, кто проведет отрезок из тире между D и E, проигрывает, потому что он образует отрезок AED из тире, между тем как отрезок AC из тире безопасен: он образует, конечно, треугольник ACD, но одна из его сторон — сплошная, и поэтому он безвреден для обоих игроков.

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

На моем микрокомпьютере, не имеющем графических средств, я был вынужден удовлетвориться проведением отрезков с помощью выстраивания в ряд букв там, где компьютер считал нужным их поставить. Картина получалась не очень красивой, но игра оставалась осуществимой и интересной. С графическим да еще с цветным экраном у вас должно получиться просто загляденье, Но не забывайте поговорку Анри Ледгара [LED]:

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

Когда ваша программа окажется правильной, тщательно отработайте форму вывода результатов.

? Игра 23. Спички Бергсона.

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

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

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