Оглавление

§33 Игры

    Игровые программы, которые предлагается составить в этом разделе, можно условно разделить на три группы.В задачах с972 по 966 рассматриваюся программы, основное значение которых-поддержка необходимой игровой обстановки. Играющему предлагается исходная ситуация, пораждаемая, как правило, с помощью датчика случайных чисел, все его ходы контролируются: если ход сделан по правилам игры, ситуация (например, в задачах 972-975 смена игровой ситуации означает смену положений цветных шаров на игровой доске, а в задаче 983-обмен местами четырех или двух букв), в противном случае выдается соответствующее сообщение, ситуация остается неизменной. Программа также обязана отслеживать достижение целевой ситуации, например, угадано ли задуманное число (задача 986), расставлены ли требуемым образом буквы (задача 983), перемещены ли все диски (задача 978) и т. д.
    Программы второй группы (задачи с 997 по 1006), так называемые обучающие программы, имеют целью закрепления у обучающегося тех или иных знаний или навыков. При написании программы важно правильно чередовать предполагаемые вопросы (один из возможных алгоритмов выбора аопросов дан в разделе "Случайные числа"), и своевременно повышать уровень их сложности. Например, в программе для обучения устному счету (задача 997) повышение уровня сложности предполагаемого задания может быть связано с переходом от арифметических действий над однозначными числами к действиям над двух-, трех-, четырех- и т. д. значеыми числами. Впрограмме обучения работе с клавиатурой (задача 1000)- спереходом от отдельных букв и цифр к словам и фразам, а также с уменьшением времени, выделяемого для набора на клавиатуре того или иного слова и т. п.
    Каждая из программ третьей группы (задачи 1007-1013) является равноправным партнером в той или иной игре, например, в шахматы, "ним", "100 спичек" и др. Помимо всех действий, выполняемых программами первой группы, эти программы должны делать игровые ходы.

    972 "Семь лунок". Вдоль доски расположено 7 лунок, в которых лежат три черных и три белых шара так, как показано на рис.106. Передвинуть черные шары на место белых, а белые - на место черных. Шар можно передвинуть либо в соседнюю с ним пустую лунку, либо в пустую лунку, находящуюся непосредственно за ближайшим шаром.


    973 "Прыгающие шарики". Эта игра похожа на предыдущую. Исходная позиция - 8 лунок, в которых расставлены 4 черных и 4 белых шара (рис. 107) Поменять местами черные и белые шары. В отличие от предыдущей игры черные шары можно передвигать только вправо, а белые только влево.


    974 Вдоль доски расположены лунки и в каждой лунке лежит шар черного или белого цвета (пример приведен на рис. 108,а). Одним ходом разрешается менять местами два лябых шара. Добиться того, чтобы сначала шли белые шары, а за ними - черные (рис. 108,б). Если общее число лунок равно n, то для решения задачи достаточно сделать не более [n/2] ходов.

    975 Пусть теперь, в отличае от предыдущей задачи, в каждой лунке лежит красный, белый или синий шар. Одним ходом разрешается менять местами два любых шара. Добиться того, чтобы все красные шары шли первыми, все синие - последними, а белые - посередине. Это вариант "задачи о голландском флаге" (поле голландского флага разделено на три полосы - синюю, белую, красную). Если общее число лунок равно n, то для решения задачи достаточно сделать неболее n-1 хода.

    976 Железнодорожный сортировочный узел устроен так, что показано на рис.109. На первой стороне собрано некоторое число вагонов двух типов (на рис.109 - черные и белые), обоих типов по n штук. Тупик может вмещать все 2n вагонов. Пользуясь тремя сортировочными операциями: В,ИЗ, МИМО, собрать вагоны на левой стороне так, чтобы типы чередовались. Для решения задачи доститочно 3n-1 сортировочных операций.

    977 "Расстановка мебели". Площадь разделена на шесть квадратов, пять из них заняты мебелью, шестая - свободна (рис. 110). ПереМестиь мебель так, чтобы шкаф и кресло поменялись местами, при этом ни какие два предмета не могут стоять на одном квадрате.

        Стол         Стул         Шкаф    
        Стул           Кресло    

    рис. 110

    978 "Ханойская башня". Доска имеет три колышка. На первом нанизано m дисков убывающего вверх диаметра (рис. 111). Расположить диски в том же порядке на другом колышке. Диски мржно перекладывать с колышка на колышек по одному. Класть больший диск на меньший не разрешается.

    979 "Пятнадцать". На квадратном поле размером 4x4 с помощью датчика чисел расставлены 15 фишек с номерами от 1 до 15 (рис. 112, а). Имеется одна свободная позиция. Расставить фишки по возрастанию их номеров так, как показано на рис. 112,б или в. Передвигать фишки можно только на соседнюю свободную позицию.

    1 13 12 2
    11 7 6 10
    9 3 5 15
      4 8 14

    a

    1 2 3 4
    5 6 7 8
    9 10 11 12
    13 14 15 16

    б

    1 2 3 4
    5 6 7 8
    9 10 11 12
    13 15 14  

    в

    рис. 112

    980 "Расстановка 16 букв". В квадрате размером 4x4 клетки расставить 16 букв (четыре a, четыре b, четыре c, четыре d) так, чтобы в каждом горизонтальном и в каждом вертикальном вертикальном ряду любая буква встречалась только один раз.

    981 "Расстановка трех чисел". В каждой из 9 клеток квадрата размером 3x3 клетки поставить одно из чисел 1, 2, 3 так, чтобы сумма чисел, стоящих в каждом вертикальном ряду, в каждом горизонтальном ряду, а также по любой диагонали равнялось 6.

    982 "Расстановка днвяти чисел". В квадрате размером 3x3 клетки расставить числа 1, 2, 3, 4, 5, 6, 7, 8, 9 так, чтобы сумма чисел, стоящих в каждом вертикальном ряду, в каждом горизонтальном ряду, а также по любой диагонали были равны.

    983 "Вращающийся квадрат". Дан квадрат размером 4x4 клетки, в которых с помощью датчика случайных чисел расставлены буквы от A до P (рис. 113,а). Упорядочить буквы в квадрате по алфавиту (рис. 113,б). Квадрат имеет подквадраты, которые можно вращать по часовой стрелке на одну клетку. Подквадраты имеют размер 2x2 и указываются номером левой верхней клетки. Имеется операция, которая может быть выполнена только одие раз: обмен местами двух букв.

       A       C       P       B   
       E       G       M       O   
       N       D       I       F   
       K       L       H       J   

    a

       A       B       C       D   
       E       F       G       H   
       I       J       K       L   
       M       N       O       P   

    б

    рис. 113

    984 "Угадывание дробей". К канату прикреплены три аэростата (рис. 114). Если считать, что один конец каната имеет координату 0, а второй - координату 1, то координаты аэростатов задаются некоторыми числами из интервала (0,1). Определить эти числа с погрешностью, не выводящей за пределы аэростата.

    985 "Зеленые шары". Дано поле с осями координат (рис. 115). По полю разбросаны небольшие круги. Указать набор функций, графики которых перечеркивают все круги.

    986 "Угадай число". Программа с помощью датчика случайных чисел выбирает число в диапазоне от 0 до 9. Угадать это число за три попытки. После каждой попытки сообщается, больше или меньше названное число задуманного.

    987 "Кости". Играющий называет любое число в диапазоне от 2 до 12 и ставку, которую он делает в этот ход. Программа с помощью датчика случайных чисел дважды выбирает числа от 1 до 6 ("бросает кубик", на гранях которого цифры от 1 до 6). Если сумма выпавших цифр меньше 7 и играющий задумал число меньше 7, он выигрывает сделанную ставку. Если сумма выпавших цифр больше 7 и играющий задумал число больше7, он также выигрывает сделанную ставку. Если играющий угадал сумму цифр, он получает в четыре раза больше очков, чем сделанная ставка. Савка проиграна, если не имеет место ни одна из описанных ситуаций. В начальный момннт у играющего 100 очков.

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

    989 Игра в слова. Программа выбирает слово и рисует на экране столько прочерков, сколько букв в этом слове. Отгадать, какое слово загадано программой. В каждый ход играющий указывает одну букву. Если названа буква, входящая в состав слова, она подставляется вместо соответствующего прочерка. В противном случае играющий теряет одно очко. В начальный момент у играющего 15 очков

    990 "Коровы и быки". Программа выбирает с помощью датчика случайных чисел четырехзначное число с разеыми цмфрами. Угадать это число. Накаждом шаге играющий называет четырехзначное число, а программа сообщает, сколько цифр числа угадано (быки) и сколько цифр угадано и стоит на нужном месте (коровы). Например, если программой задано число 1294, а играющий назвал 1423, он получает ответ "1 корова, 3 быка".

    991 "Жизнь". Игра моделирует жизнь поколений гипотетической колонии живых клеток, которые выживают, размножаютсю и погибают в соответствии со следующими правилами. Клетка выживает, если и только если она имеет двух или трех соседей из восьми возможных (рис. 116,а). Если у клетки только один сосед или вовсе ни одного, то она погибает в изоляции (рис, 116,б). Если клетка имеет четырех и более соседей, она погибает от перенаселения (рис. 116в). В любой пустой позиции, у которой ровно три соседа, в следующем поколении появляется новая клетка(рис. 116,г).

      X      
        X     X  
         

    a

                     
        X    
         

    б

      X     X    
        X     X  
      X      

    в

      X       X  
         
        X    

    г

    рис. 116

    992 "Подбери ключи". Перед играющим четыре запертые двери. Открыть все двери, используя 10 ключей, каждым из которых можно открыть несколько дверей. Предоставляется 14 попыток.

    993 Требуется ввести курсор в область экрана (небольшой круг), расположение которого не известно играющему. Передвижение курсора сопровождается звуковым сигналом: если курсор приближается к области, то звук становится выше; если удаляется - ниже.

    994 "Морской бой". На поле 10x10 позиций стоят невидимые вражеские корабли: 4 корабля по 1клетке, 3 по 2 клетки, 2 по 3 клетки, 1 корабль в 4 клетки (рис. 117).Необходимо поразить каждую из клеток кораблей. Позиции указываются русскими буквами от А до К (по строкам) и цифрами от 1 до 10 (по столбцам). Конфигурация и расположение кораблей на поле выбирается с помощью датчика случайных чисел. Если клетка корабля угадана играющим верно, она помечается крестиком; в противном случае точкой.

    995 "Мост". Дан мост с арками разной ширины (рис. 118), в нижней строке экрана расположнн мяч, которым можно управлять: мяч можно передвигать по строке, останавливать в нужной позиции строки и катить к мосту. Очки начисляются, если мяч проходит через арку.

    996 "Сбей самолет". По экрану летят вражеские самолеты. Цель - сбить их. Пусковая установка находится в нижней стороне экрана. Пусковую установку можно перемещать по строке вправо и влево.

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

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

    999 Составить программу для обучения переводу чисел из двоичной системы счисления в восьмеричную и шестиричную и обратно (см. предыдущую задачу)

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

    1001 Составить программу, помогающую в запоминании исторических дат. Программа должна предлагать вопросы, контролирующие знание дат исторических событий, например, "В каком году была Куликовская битва?" Если ответ правильный, должен быть предложен следующий вопрос. Если ответ не верен, программа подскажет правильный ответ, а позднее повторит этот же вопрос еще раз.

    1002 Составить программу для заучивания слов иностранного языка. Программа должна предлагать слова из некоторого списка на одном языке, обучающийсядать перевод этго слова на другой язык.

    1003 Составить программу для изучения созвездий. Программа должна строить на экране изображение созвездия, обучающийсяназвать его.

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

    1005 Составить программу, помогающую в изучении колебаний математического маятника. Маятник должен двигаться на экране, совершая гармонические колебания, период которых выбран с помощью датчика случайных чисел.Играющий должен указать длину нити, на которой подвешен маятник. Ответ считается правильным, если ошибка не превышает 10 %.

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

    1007 Написать программу, играющую в "крестики-нолики".

    1008 Написать шахматную программу, играющую за белых:
      а) королем и ферзем против короля;
      б) королем и двумя ладьями против короля.

    1009 "100 спичек". Из кучки, первоначально содержащей 100 спичек, двое играющих поочередно берут по несколько спичек: не менее одной и не более десяти. Проигрывает взявший последнюю спичку.

    1010 В условие предыдущей задачи вносится изменение: взявший последнюю спичку выигрывает.

    1011 "Угадай число". Один из играющих задумывает число от 1 до 1000, другой пытается угадать его за десять вопросов вида: верно ли, что задуманное число больше такогото числа. Написать программу, играющую за отгадчика.

    1012 "Ним". Имеются три кучки спичек. Двое играющих по очереди делают ходы. Каждый ход заключается в том, что из одной какой-то кучки берется произвольное ненулевое число спичек. Выигрывает взявший последнюю спичку.

    1013 "Цзяньшидзы". Имеются две кучки камней. Двое играющих по очереди делают ходы. Каждый ход может состоять в одном из двух:
      1) берется произвольное ненулевое число камней из какой-то одной кучки;
      2) берется одновременно по одинаковому ненулевому числу камней из обеих кучек.
    Выигрывает взявший последний камень. Пара (а, b), где а и b - количество камней в кучках при а < b, является проигрышной, если число а оканчивается в "фибоначчиевой" системе (см. задачу 604) четным числом нулей, а число b получается из а приписыванием еще одного нуля в конце.
Предыдущая глава К началу Следующая глава