Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 6
1

Создание "Игры дат"

22.05.2014, 17:23. Показов 1178. Ответов 1
Метки нет (Все метки)

Игра дат.
Эта игра предложена Берлокеном [BER]. Номер года в ней не очень существен, но предполагается, что год не високосный: в феврале 28 дней. Первый игрок сообщает какую-нибудь дату января. Каждый игрок на своем ходе называет более позднюю дату, увеличивая либо календарную дату в месяце, либо месяц, но не то и другое сразу. Если, например, начальной датой было 8 января, то можно перейти к 8 марта или к 12 января. Можно увеличить меньше: 9 января или 8 февраля; можно перейти сразу к 8 декабря или 31 января. Внимание: если вы переходите к 31 января, то ваш противник сможет в дальнейшем менять только месяцы, и притом лишь месяцы с 31 днем.
Первый, кто доберется до 31 декабря, выигрывает.
У вас не должно возникнуть никаких затруднений ни в определении стратегии, ни в программировании этой игры. Подумайте о проверке осмысленности предлагаемых дат… Кроме того, вставьте цикл ожидания, чтобы дать игроку время для ответных действий. Компьютер должен быть вежлив и должен спросить, кто будет начинать, по крайней мере, бросить «орла» или «решку», чтобы узнать, кому начинать…

Выигрывающее положение — 31 декабря. Возьмите листок бумаги в клетку. Расположите по абсциссе месяцы, а по ординате дни. Так как 31 декабря выигрывает, то вы обозначаете эту точку числом Спрага-Грюнди 0. Из каждого дня декабря можно получить 31, но также и любой другой последующий день. Поэтому вы приписываете значение 1 дате 30 декабря, значение 2 дате 29 декабря, и т, д. То же для любого 31 числа; из него можно получить 31 число всех последующих месяцев. Поэтому 31 октября получает 1, 31 августа 2 и т. д.
После этого вы можете закончить значение таблицы и приписать число Спрага-Грюнди всем дням года. Вы увидите также появление дней со значением 0, которые являются выигрывающими днями. Напоминаю вам правило: каждому игровому положению приписывается наименьшее неотрицательное целое значение, отличное от значений тех положений, которые можно получить, исходя из данного, т. е. в настоящем случае — от значений тех положений, которые расположены правее, и тех, которые расположены ниже.
Закон заполнения таблицы достаточно сложен; и я не пытаюсь вам его сформулировать. Как только октябрь заполнен, появляется простая закономерность, которая дает соотношение между номером дня и номером месяца для выигрывающих положений.
Даже если вы мало знаете современную математику, вы слышали разговоры об отношении эквивалентности. Все выигрывающие положения эквивалентны. Игровое положение задается парой д, м, где д — номер дня, а м — номер месяца. Следовательно, вы должны найти такое отношение эквивалентности для пар натуральных чисел, чтобы
д, м' было не эквивалентно д, м при м ≠ м', и
д', м было не эквивалентно д, м при д ≠ д'.
Наконец, для выигрывающей позиции д, м должно быть эквивалентно 31, 12. Что-то похожее на это можно видеть в программах лицеев…
Я прекрасно понимаю, что календарь осложняет все, поскольку длина месяца не постоянна и зависит от м, причем к тому же с непростым законом изменения. Но, к счастью, оказывается, что это никак не сказывается на этом замечательном отношении эквивалентности.

Желательно бы сделать так, что бы число 31 можно было выбрать только после 10 хода. Что бы игру нельзя было закончить сразу, как только компьютер или оппонент выбрал месяц-декабрь, а вы выбрали число 31.

ЗАРАНЕЕ СПАСИБО.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2014, 17:23
Ответы с готовыми решениями:

Создание игры "монополия" или по-другому "менеджер"
Доброго всем дня, задача ставится, написать игру с возможностями OpenGL, дабы создать красочное...

Ищу исходник игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д
Нужен код игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д. Или ссылки на...

Создание логической игры "Мозаика Оригами"
Здравствуйте друзья, Я бы хотел узнать, можно ли сделать такую игру на я.п С++ Builder. И возможно...

Создание игры "Угадай число"
Нужно создать игру угадай число больше или меньше равно нужно сравнить два окна лейбл и выводить...

1
Почетный модератор
Эксперт С++
5845 / 2855 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
22.05.2014, 23:06 2
Спасибо Берлокину за столь щедрое предложение, но пожалуй я пас.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2014, 23:06

Создание Игры "Тир"
Пытаюсь создать игру "Тир". И такой вопрос вот есть у меня мишень, и возможно ли как то сделать...

MessageBox - чтобы вместо "Yes" и "No" показывало "Да" и "Нет"
Доброе время суток, как переделать int Key= Application->MessageBox(L"Text", L"Caption",...

Открыть папку "мой компьютер", "панель управления", "program files"
Нужно открыть папку "мой компьютер", "панель управления", "program files"

Найти частоту встречаемости следующих друг за другом символов "А", "В"и "С".
В заданном тексте найти частоту встречаемости следующих друг за другом символов "А", "В"и "С". ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru