Разработка программы игры

Цель работы

Целью лабораторной работы является практическое изучение принципов применения виртуальных функций и абстрактных классов ООП при разработке игровой программы в системе программирования С++.

Стратегия игры

Выигрышную стратегию образует последовательность ходов игрока, когда после каждого хода количество R предметов, которое остается в куче и определяется следующей формулой:

R=N*L+N+1>0

В этой формуле константа L обозначает заданное предельно-допустимое количество предметов, которое может быть взято из кучи за один ход игрока, а целочисленная переменная N определяет число выигрышных ходов, оставшихся до конца партии после текущего хода. Таким образом, после последнего выигрышного хода, когда N равно 0, в куче остается один предмет, который вынужден взять проигравший противник. При первом и остальных выигрышных ходах величина N подбирается таким образом, чтобы получить по формуле наибольшее целое число R, которое меньше текущего числа предметов в куче Н. В соответствие с рассмотренным правилом форсированный выигрыш гарантирован игроку, который первым сделает выигрышный ход, потому что после этого независимо от ответов противника он получает возможность делать только выигрышные ходы до конца партии. Пусть, например, в куче первоначально находится Н=11 предметов, а игрокам разрешается брать не более L=3 предметов за один ход. Тогда первый игрок имеет возможность выиграть партию за 3 хода, после которых в куче остаются следующие количества предметов:

R=2*3+2+1=9; R=1*3+1+1=5; R=0*3+0+1=1

Чтобы осуществить эту выигрышную стратегию, на начальном ходе первый игрок должен взять из кучи Н- R = 11-9=2 предмета, а на остальных ходах отвечать симметрично ходу противника. Например, если в ответ на начальный ход противник берет 3 из 9-ти предметов, то есть в куче остается 6 предметов, то вторым ходом первый игрок должен взять 1 предмет, чтобы оставить в куче 5 предметов. Если противник на втором ответном ходе берет из 5-ти предметов 3. В результате в куче остается 1 предмет, который вынужден взять второй игрок.

Компьютерный интерфейс игры

В компьютерном варианте игры противоборствующими противниками являются компьютер (PEN) и человек (MAN). Право первого хода автоматически предоставляется компьютеру, который должен действовать в соответствии с выигрышной стратегией игры. Если выигрышный ход сделать невозможно, компьютер должен выбрать из кучи 1 предмет. Число предметов, выбранных каждым ходом компьютера, должно отображаться через поток стандартного вывода. Человек может осуществлять произвольные допустимые правилами игры ходы, доказывая число выбранных предметов через поток стандартного ввода. При нарушении правил игры или некорректном (например, нецифровом) вводе партия должна быть блокирована, куча автоматически обнулена, а победителем в игре объявлен компьютер. Каждый ход человека и компьютера должен сопровождаться в потоке стандартного вывода. Запрос должен идентифицировать имя игрока и текущее число предметов в куче. Например, следующий запрос сопровождает первый ход компьютера, когда в куче содержится 11 предметов:

Heap=11 PEN>>

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

Heap=9 MAN>>

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: