Реферат по предмету "Информатика, программирование"


Создание игровой программы "Морской бой"

СОДЕРЖАНИЕ
Введение
1.Программирование игр с использованием визуальных компонентов
1.1 Аналитический обзор
1.2 Описаниеоператоров, используемых при реализации практической части курсовой работы
2. Разработка программы
2.1 Постановка задачи
2.2 Алгоритм реализации работы
3. Блок-схема
Заключение
Список используемой литературы
/>ВВЕДЕНИЕ
 
«ИГРА — вид непродуктивной деятельности, мотив которой заключается не в ее результатах,а в самом процессе. В истории человеческого общества переплеталась с магией,культовым поведением и др.… Свойственна также высшим животным».
Советскийэнциклопедический словарь
Все,кто имеет дело с компьютером, так или иначе сталкивались с компьютерными играми,и подавляющее большинство может сходу назвать несколько игр, которые имособенно понравились. Те, кто уже совсем наигрался, почти наигрался или еше не наигрался, но в процессеобщения с компьютером уже начал совмещать игры счем-нибудь более полезным, возможно, хотели бы придумать какие-нибудь свои, непохожие ни на какие другие игры.
Многое захватывает в такомтворчестве. И не сам процесс игры, а разработка игровой вселенной, еепроектирование и реализация. Когда можно слить воедино сценарий, графику,музыку, искусно задуманный и умело запрограммированный алгоритм — создатьединый фантастический мир, живущий по законам, которые ты же для него ипридумал.
В даннойкурсовой работе речь пойдет о создании несложной игровой программы «Морскойбой», которая и будет являться объектом исследования. В первой главе даннойкурсовой работы рассматриваются аспекты программирования игр с использованиемвизуальных компонентов. Во второй главе приведены этапы разработки программы,такие как постановка задачи и алгоритм реализации.
В заключении приведенывыводы по курсовой работе, достоинства и недостатки визуальных методовпрограммирования.
Список использованныхисточников содержит полный перечень технической литературы, использованной длянаписания данной курсовой работы.
/>1.ПРОГРАММИРОВАНИЕ ИГР С ИСПОЛЬЗОВАНИЕМ ВИЗУАЛЬНЫХ КОМПОНЕНТОВ
/>1.1 Аналитический обзор
В последнее время продажипрограммного обеспечения увеличиваются незначительно, в то время как продажиигровых программ возрастают экспоненциально. Игры для платформы Windows составляют подавляющее большинство.Игровое программное обеспечение – это третья по размерам доходов отрасльиндустрии программного обеспечения после текстовых процессоров и электронныхтаблиц.
Донедавнего времени среда Windows использовалась в основном как платформа длясоздания игр, первоначально разработанных для Macintosh.Это осуществлялось на базе пакета QuickTime фирмыApple. Примерами таких игр могут быть Mysl (Broderbund/Cyan), Wrath of the Gods (Maxis/Luminaria) и некоторые другие. В ряде случаевиспользовался пакет Video for Windows, позволяющий отображать оцифрованноевидео. Затем появились библиотеки WinG и WinToon, на базе которых фирма Sierra создала игруKing's Quest VII. Это были первые попытки использовать Windows как платформудля создания игровых программ. Преимущества такого подхода достаточно очевидны— единый интерфейс, наличие стандартных драйверов для большинства мультимедийных устройств и возможность управления имистандартными способами. Затем появилась новая версия — Windows 95, в составкоторой была включена библиотека WinG (как подсистема GDI), и передразработчиками открылись более широкие возможности.
Указатьточное число компьютерных игр очень трудно. Можно только примерно оценить числоразличных наименований игр, находящихся на рынке в любое время .
Классификациякомпьютерных игр может быть следующая:
1. Приключенческие игры. Игры могут быть великолепным средством рассказа истории. Этиигры представляют собой мультиплицированный рассказ, вкотором можно видеть и контролировать основной персонаж (а иногда и более одного) в очень детальномповествовании. Это — компьютерные версии обычных повествований, начиная отдушещипательных рассказов до технотриллеров, научно-фантастических приключений,фантазий и рассказов, до предела набитых разными обманами и мошенничествами.
Приключенческиеигры развиваются вокруг различных загадок и препятствий, которые нужнопреодолеть по мере развития рассказа.
2. Фантастические игры, в которых требуетсяиграть некоторую роль (ролевые игры). Их лучше всего определить каккомпьютеризованную версию рассказа Dungeons andDragons («Подземелья и драконы»), но действие не всегдапроисходит в населенном варварами средневековом мире. Часто оно происходит воткрытом космосе или в каких-либо областях будущего. В этих играх обычно нужноуправлять группой персонажей, которые становятся по мере развития игры сильнееи умнее, и делать некоторые другие вещи. Так же изменяются и враги. Самирассказы в играх этого типа обычно менее детальны, чем в приключенческих играх,с большим упором на задачу побить чудовгщ, чемрешить загадки.
3. Имитаторывоздушных и космических сражений. Это не военныеигры, в которых может оказаться неограниченное число вооружений и врагов, этиигры пытаются быть точными имитаторами полетов и сражений на реальных боевых самолетах. Этиигры предназначены для тех, кто хочет летать набольших и очень мощных машинах. Кабины пилотов выглядят как настоящие,инструменты работают как в настоящем бою, оружиеявляется имитацией реально существующего, аполетные характеристики самолета (и самолета врага) соответствуютдействительным. Имитаторы космических сражений выдуманы, однако они разработаны с целью точно повторить реальные маневры в космосе.
4. Имитаторыназемных и морских сражений.Игры разработаны для военного оборудования и военных машин. Эта категория игрвключает в себя симуляторы настоящих подводныхлодок, кораблей и танков, и позволяет игрокам испытать реальные сценарии сражений, и выжить для того, чтобыпонять, как использовать правильную тактику в следующей игре.
5. Самолеты, поезда и автомобили. В отличие от этихимитаторов, все прочие являются имитаторамивоенного типа или имеют очень сильный упор насражение. Эти же игры не относятся к таким имитаторам. Конечно, можно проехать наавтомобиле по береговой дороге в Калифорнии со скоростью, вдвое превышающей разрешенную, и потанцевать на всех четырех колесах. Нотакже можно использовать эти игры, чтобы научиться безопасно летать средиоблаков, и получать удовольствие от свободы полета.Даже можно делать такие вещи, как постройка и управление собственной железнойдорогой.
6. Спортивныеимитаторы. Здесь необходимо обучать профессионалови управлять ими. Эти игры — нечто большее, чем простое изображение бейсбольныхигр в картинках, в некоторых из них можно даже контролировать реальноедействие. Спортивные имитаторы дают возможность вести рискованную игру в нужноевремя, доказать, что можно выиграть с помощью быстроты, иметь в команде Генри Аарона и Теда Вильямса,или переиграть Томми Лазорду.
7. Аркадные игры/игры действия. Это классические «игры действия» — все зависит от того,насколько быстро руки могут дергать джойстик. Обычно о них говорят как обессмысленных, так часто и бывает. С другой стороны, бывают времена, когдапоявится потребность дать отдохнуть мозгам. Во многие из этих игр можно играть спомощью клавиатуры или мыши, и джойстики не всегданеобходимы. В чем есть необходимость, так это в быстрых рефлексах.
8.Настольные игры, солитер и салонные игры. Многие старые любимые игры появилисьв компьютерном варианте. Больше не нужно заниматься поисками партнера, чтобыпоиграть в шахматы, бэкграммон и риск. Некоторые из этих игр даже научат мошенничать наедине смонитором, и при этом не придется возвращатьсядомой с пустым карманом после неудачной ночи.
9. Имитаторыреальности («игры в бога»).Это игры, которые позволяют создавать реальный мириз ничего. Это игры, которые позволят создать компьютерный мир из набросков,управлять городом, страной или даже миром.
10. Игры,в которых делаются деньги. Они копируют игровуюдеятельность и учат высшим формам азартных предприятий: фондовая биржа,торговля недвижимостью. Они также позволят попробовать управлять корпорацией. Вэти игры можно играть для удовольствия, или использовать их для того, чтобы научиться карабкаться вверхпо лестнице карьеры.
11. Стратегические и военные имитаторы.Здесь можно принимать участие в великихисторических событиях, взять на себя командование немецкой армией у Ленинградаили армией Наполеона у Ватерлоо. Это военные стратегии прошлого, настоящего илибудущего.
12. Игрыдля детей. Если есть домашний компьютер, и чтобыдети научились его использовать, то эти игрыдостойны внимания. Реальность нашей культуры такова, что, как только малышистанут координированы настолько, чтобы правильно пользоваться клавиатурой илимышью, они хотят сразу приняться за такие игры, какWing Commander, Populous или Eye of the Beholder. Однако же вокруг существует множество игр, в которыедети могут играть просто чтобы получить удовольствие, или же научитьсячему-либо.
13.Игры «On-line». Былобы ошибкой считать, что все компьютерные игры дляIBM PC приходят к нам на дискетах или CD-дисках, плотно упакованных в красивыепакеты. Фактически, весь обширный мир компьютерных игр доступен и по телефону.Эта категория игр известна как «он-лайн» и включает в себя разнообразные игры, которые имеются в больших коммерческих «он-лайн» сетях и во многих локальных сетях типа«доска объявлений» (bulletin board system — BBS). Для игр«он-лайн», кроме личного компьютера, необходимы модеми кредитная карточка..
14. ИгрыShareware. Будет ошибкой предположить, что всекомпьютерные игры приходят в красивых упаковках. Многие хорошие игры приходят вовсе без упаковок, истоят от 10 до 30 долларов. Обычно можно их опробовать заочень низкую плату или вовсебесплатно в течение нескольких дней и, если захочется получить легальную копию, следует послать по почте чек компании или лицу, которые создали игру.
15. Классические игры. Мир PC-игр во многом похож на мир популярной музыки и фильмов: создается много игр различных наименований, некоторые становятся хитами и держат популярность в течение некотороговремени, другие пропадают. Постепенно эти хиты становится трудно отыскать, имало-помалу они заменяются другими лучшими играми.Очень мало PC-игр живут более 2-3 лет. Из тех, что действительно остаются,многие настолько хороши, что становятся вечными, иони заслуживают того, чтобы в них играли. Некоторые, как Flight Simulator илиKing's Quest, обновляются время от времени, так что их можно рассматривать какпрактически новые игры. Остальные остаются неизменными,и уровень продаж у них таков, что они остаются в обращении, но уже нерекламируются активно их производителями. Это игры, которые не бросаются вглаза, «золотые» игры — классические PC-игры.
Компьютерныеигры — отнюдь не новое изобретение. Их история началась не с конца 1970 годов.Начало лежит гораздораньше, тогда, когда Джон Кеннеди уже пробыл президентомСоединенных Штатов всего несколько месяцев .
Насамом деле все началось с модели железной дороги. Студенты Технологическогоинститута в Массачусетсе были немало удивлены количеством способов, с помощью которых можно было разместить органы управления миниатюрной железной дорогой. Позднее, когда они наконец получиливозможность работать на больших компьютерах института, их работа в бинарныхвычислениях — ведь именно такие вычисления имитируются выключателями железной дороги — позволили им пройти хорошуюподготовку в компьютерном деле. Стив Рассел был одним из членов Клуба Моделей Железных дорог Высокой Технологии в Технологическоминституте. Будучи хорошим программистом, он летом 1961 года работал
вСтатистической лаборатории, когда у него и его друзейпоявилась идея перенести «мыльные» научно-фантастические рассказы Е.Е.Смита накомпьютеры. В 1962 году Стив разработал программу для PDP-1. Эта самая машинатеперь выставлена в компьютерном музее Бостона в Массачусетском Технологическом институте. В«Космической Войне», как называлась эта программа, два синтезированных компьютером ракетных космических корабля(один похожий на толстую сигару, а другой на длинную обтекаемую трубу) могли летатьпо экрану, на котором помещалось изображение космоса. Игроки могли нажимать накнопки, чтобы заставить ракеты менять направление движения почти так же, какпозднее в игре Asteroids владельцы игровых машин Atari управляли своимикораблями. Каждая ракета несла на себе 31 торпеду,и, в то время как они летели по экрану, игрок мог выстрелить точечку из носа своей ракеты в направлении другой. Если точкадействительно пересекала очертания другого корабля, программа определяла, что торпеда успешно поразиладругой корабль и другой корабль «взрывался». Взорванный корабль пропадал сэкрана и заменялся нагромождением точек, которыеизображали его остатки.
Конечно,общество программистов и взломщиков программ не может удовлетвориться качествомлюбой программы, независимо от того, насколько оналегка или интересна. Изменения были неизбежны. Одиниз друзей программиста, будучи недовольнымслучайным образом построенной картой звездного неба, которую Расселпервоначально поместил в игру, взял звездный атлас и ухитрился запрограммировать нашу собственную галактику, вплоть до звезд пятойвеличины. Другой добавил гравитацию в игру, а третий ввел возможность побега вгиперпространство, при этом, чтобы показать место,где корабль покинул звездную систему, на экранеоставался след ускорения.
ДажеРассел сделал некоторые изменения. Зная, что у настоящих торпед вероятностьпоражения цели не 100%, а меньше, он решил придать звездным торпедам возможность ошибки, и добавить случайный элемент в траектории ракет и время взрыва. Его друзья терпеть не могли новую версию,поскольку они хотели бы иметь в игре ту же степень уверенности, котораясуществовала в программировании. Рассел вернул программу к прежней версии и, неуспели оглянуться, как «Космические войны» оккупировали компьютеры колледжей повсей стране. «Космические войны» стали настолько популярны к серединешестидесятых, что Нолан Бушнелл,создатель Atari, очень привязался к игре во время учебы в университете штатаЮты. К 1970 годуБушнелл построил свою собственнуюмашину, использовав 185 встроенных цепей для подсоединения к телевизору идля выполнения одной-единственной функции. Этафункция была игрой «Компьютерный Космос», вариант«Космических Войн», в котором ракета сражалась с летающими тарелками вместодругого корабля. «Космические Войны» были неединственным предшественником коммерческихкомпьютерных игр, появившихся на больших компьютерах в колледжах. Какой-тонеизвестный автор начал играть в игру Star Trek («Звездный путь») в шестидесятых годах. Никто не знает, кто первымсоздал такую игру — он или она, вероятно, подали бы судебный иск, если бы авторигры был точно определен — но эта игра также появилась на колледжских компьютерах по всей стране к 1969 году. Игра«Звездный путь» сама по себе была не очень изощренной.В игре были линии наподобие решеток, которые позволяли звездным кораблямпутешествовать от одной точки к другой, игра использоваласимволы для идентификации кораблей, предоставлялачисленную информацию в процентах, и позволяла летать быстрее, чем скоростьсвета. К середине 70-х годов почти на каждойдомашней компьютерной системе была доступна та или иная форма этой игры.Существовала версия этой же игры для IBM под названиемStar Fleet («Звездный Флот»). Наконец, стоитупомянуть пожалуй наиболее важную игру, Adventure («Приключения»). В игре использовались двухсловные команды, имя ееразработчика Вилл Краудер. Это была перваяприключенческая компьютерная игра. Кроме того, в конце 70-х была создана игра по имени Zork,которая стала доступна для пользователей домашних компьютеров в 1981 году.Эту игру до сих пор можно купить. Игра Zorkосновывается на игре Adventure./>1.2 Описание операторов, используемых при реализации практическойчасти курсовой работы
Впрактической части данной курсовой работы используются следующие операторысреды программирования Turbo Pascal.
Структурные операторы
Оператор if…then…
Операторif…then… называется условным оператором и имеет вид:
 If expression1 then statement1;
гдевыражение expression1 является логическим. Логическоевыражение принимает одно из двух возможных значений – True (истина) или False (ложь). Часто в роли логического выражения выступаеткакое-то условие, которое может выполнять либо нет. В первом случае егозначение – «истина», а во втором – «ложь». Если логическое выражение expression1 принимает значение «истина», товыполняется оператор statement1. В противном случае выполняется будет оператор, следующий за даннымлогическим оператором.
Оператор if…then…else…
Этотоператор является полной версией условного оператора и имеет вид:
If expression then statement1 else statement2;
Выполняетсяданный оператор следующим образом: если выражение expression принимает значение «истина», тоуправление передается на оператор statement1, если же нет, то на оператор statement2.
Операторcase…of…end
 
Дляситуации, где имеется несколько (три или более) альтернатив, больше подходитоператор case. Этот оператор называется операторомвыбора и имеет следующий вид:
case expression of
 values_1: statement_1;
 values_2: statement_2;
 …
 values_n: statement_n;
 else statement;
end;
Рассмотримэлементы этой конструкции. Во-первых, это три зарезервированных слова: case, of и end.Между case и of находится выражение expression, принимающее значение, которое,возможно, имеется в одном из списков значений, находящихся слева от двоеточий.Данное выражение называется селектором оператора case. Каждый оператор, идущий за двоеточием, отделяется отследующего списка значений точкой запятой. Ветвь else, отвечающая всем не перечисленным значениям выраженияexpression, необязательна. При выполненииданного оператора вначале вычисляется значение селектора. Затем выбирается тотсписок значений, которому принадлежит полученное значение, и выполняетсясоответствующий оператор.
Оператор цикла while…do…
Операторцикла является важнейшим оператором и имеется в большинстве современных языковпрограммирования. Цикл позволяет много кратно выполнить некоторое множестводействий, задаваемых операторами, составляющими его тело. В Паскале имеетсянесколько разновидностей оператора цикла. Начнем с оператора цикла спредусловием. Данный оператор имеет вид:
While expression do statement ;
Привыполнении этого оператора вначале вычисляется значение логического выражения expression. Если это значение истинно,выполняется оператор statement, затем значение выражения проверяется вновь и т. д., до тех пор, покавыражение не примет значений «ложь». Если выражение принимает значение «ложь»при первой же проверке, то оператор statement не выполняется вообще.
Операторы цикла repeat…until…
Операторцикла с постусловием имеет вид:
Repeat statement until expression:
Здесьвначале выполняется оператор statement, а затем вычисляется значение логического выражения expression принимает значение «ложь». Кактолько это значение станет истинным, выполнение цикла прекращается.
Операторы цикла for…to…do… и for…downto…do…
Третийвариант оператора цикла – цикл со счетчиком. Можно считать, что есть две оченьпохожих друг на друга разновидности цикла со счетчиком. Первый из этих операторов имеет вид:
For j := expression1 to expression2 do statement;
Здесьпеременная j, называемая управляющей переменнойцикла for, является произвольнымидентификатором, который объявляется как переменная любого скалярного типа (кскалярным относится целый, символьный, булев и перечислимые типы).
Привыполнении оператора forсначала вычисляется значение выражения expression1, затем вычисляется значениевыражения expression2, далее управляющая переменная циклапоследовательно пробегает все значения от expression1 до expression2. В том случае, когда значение expression1 оказывается больше значения expression2, тело цикла не будет выполнятсявовсе.
/>2. РАЗРАБОТКА ПРОГРАММЫ
 />2.1 Постановка задачи
Составитьпрограмму для игры в «Морской бой» игрока с компьютером. Программа должнапозволять расставлять корабли на поле 10 х 10, контролировать правильность ихрасстановки, давать противникам возможность поочередно делать ходы и выдаватьсоответствующие информационные сообщения. Когда в качестве игрока выступаеткомпьютер, программа должна анализировать предыдущие ходы и следующий ходделать на основе проведенного анализа.
 
/>2.2Алгоритм реализации работы
 
Алгоритм размещения кораблей на игровом поле
Игровое поле нужно как-тохранить в памяти компьютера. Наиболее простая реализация — в виде матрицы 10x10клеток (ячеек). Определим соответствующий тип и переменные, которые нампонадобятся:
type TPole = array[1..10,1..10] of Integer;
var Pole: TPole;
Обусловимся, что пустаяячейка будет иметь значение -1, а ячейка, в которой находится корабль:.Перед началом процесса размещения кораблей необходимо очистить поле. Помимоэтого надо еще и обновить счетчик случайных чисел, что бы добиться реальнойслучайности позиций флота компьютера. Все эти действия лучше оформить в видеотдельной процедуры: procedure Init (var Pole: TPole); var X, Y: Integer; begin  Randomize;  for X := 1 to 10 do  for Y := 1 to 10 do  Pole[X,Y] := -1; end; {proc Init}
 
По правиламигры два корабля не могут соприкасаться друг с другом, т.е. между ними должнобыть пустое пространство минимум в одну клетку. Нам понадобится вспомогательнаяфункция, которая позволит определить, можно ли поставить однопалубный корабль вуказанную ячейку или нет. Для этого необходимо проверить саму эту ячейку и всесоседние (их 8 штук). И только если все они не заняты можно дать положительныйответ (True), в противном случае — отрицательный (False):
 function Freedom (x, y: Integer; Pole: TPole): Boolean; const d: array[1..8,1..2] of Integer =  ((0,1),(1,0),(0,-1),(-1,0),(1,1),(-1,1),(1,-1),(-1,-1)); var i: Integer;  dx, dy: Integer; begin  if (x > 0) and (x 0) and (y 0) and (dx 0) and (dy -1) then  begin  Result := False;  Exit;  end; {if}  end; {for}  Result := True;  end else Result := False; end; {func Freedom}
 
Какизвестно из правил игры, на поле должны находиться следующие корабли: одинчетырех палубный, два трехпалубных, три двухпалубных и четыре однопалубных.Процедура, расставляющая эти корабли должна выполнять следующие действия: взятьслучайную свободную ячейку и проверить, можно ли поставить текущий корабльгоризонтально или вертикально. Если да, то корабль размещается на игровом полеи обработка переходит к следующему. Понятно, что если нет, то возвращаемся квыбору координат. Порядок действий должен быть от большего корабля к меньшему,что бы не возникла ситуация невозможности размещения ни в одну позицию поля.Вот код этой процедуры:
 procedure Ships (var Pole: TPole); var N, M, i: Integer;  x, y, kx, ky: Integer;  B: Boolean; begin  Init (Pole);  for N := 3 downto 0 do  for M := 0 to 3 — N do  repeat  x := Random (10) + 1;  y := Random (10) + 1;  kx := Random (2);  if kx = 0 then ky := 1  else ky := 0;  B := True;  for i := 0 to N do  if not Freedom (x + kx * i, y + ky * i, Pole) then B := False;  if B then  for i := 0 to N do  Pole[x+kx*i,y+ky*i] := 0;  until B; end; {proc Ships}
 
Это,собственно, и все, что касается размещения кораблей компьютера. Теперьдостаточно сделать вызов: Ship (Pole); и корабли будут случайным образомрасставлены по своим местам. Подобным образом можно помочь пользователю, что быон каждый раз не тратил время на эту операцию, вызвав Ship (Play); где Play — поле игрока (тип TPole).
/>/>/>/>/>/>Стратегия игры компьютера
Задачазаключается в разработке алгоритма, по которому компьютер сможет играть в«Морской бой» с максимальным качеством и при этом не подглядываярасположение флота игрока. Дополнительное и очевидное условие: при каждой новойигре вне зависимости от размещения сил противника компьютер должен играть по-разному,т.е. его ходы должны быть не предсказуемы. Необходимо вспомнить правила игры:участники поединка делают ходы поочередно, причем, если один из игроковпопадает по кораблю соперника, то он получает право следующего хода. Еслиреализовать поиск цели компьютером в виде отдельной процедуры, то надо как-тонаучить его запоминать исходы прошлых выстрелов, чтобы адекватно произвестиследующий. Из этого факта вытекает, что самое простое и рациональное решениеданной проблемы можно оформить в виде конечного автомата, наиболее точноописывающего последовательность действий. Можно выделить три состояния:
1.        прострелигрового поля по случайным координатам до попадания по кораблю, после чегопереход во второе состояние;
2.        обстрелвокруг подбитой ячейки поля для определения направления корабля (вертикальноеили горизонтальное), после очередного попадания — переход в третье состояние;
3.        расстрелкорабля в полученном направлении до полного его уничтожения, после чего переходв первое состояние.
Итак, всяигра зациклена на трех основных действиях: прострел, обстрел и расстрел. Всеэти действия должны продолжаться до тех пор, пока у одной из сторон не будутуничтожены все корабли. Компьютеру потребуется еще одно поле, на котором онбудет вести игру. Назовем его Play. Помимо этого нужно помнить, какие кораблиостались у игрока, а какие уже разбиты. Объявим все необходимые переменные:
 var Play: TPole;  Kor: array[1..4] of Integer;  State: Integer;// состояние автомата  Len: Integer;// кол-во подбитых палуб текущего корабля  Pkx, Pky: Integer;// направление удара  Px, Py: Integer;// позиция попадания
 
Передначалом игры надо настроить все значения. Это удобно сделать в отдельнойпроцедуре:
 procedure Start; var I: Integer; begin  Init (Play);  Ships (Pole);  State := 1;  for I := 1 to 4 do  Kor[I] := 5 — I; end; {proc Start}
 
Предположим,что у нас есть функция, которая выдает истину, если в ячейки (x,y) игрока стоиткорабль и ложь в противном случае: function Killed (x, y: Integer): Boolean;.Еще потребуется функция, определяющая длину самого большого корабля игрока:
 function MaxShip: Integer; var i: Integer; begin  for i := 1 to 4 do  if Kor[i] > 0 then Result := i; end; {func MaxShip}
 
И функция,определяющая проигрыш юзера:
 function GameOver: Boolean; var I: Integer; begin  for I := 1 to 4 do  if Kor[I] > 0 then  begin  Result := False;  Exit;  end; {if}  Result := True; end; {func GameOver}
 
Всевспомогательные подпрограммы готовы и можно приступить к реализации самогоавтомата. Для большей наглядности каждое состояние оформим в виде отдельнойпроцедуры. Итак, все по порядку.
Прострел
На этомэтапе компьютер должен поймать какой-либо из кораблей противника. Для этого онбудет стрелять по произвольным незанятым клеткам поля игрока. Гораздоэффективнее сначала разделаться с большими кораблями, поэтому выбираякоординаты для выстрела надо проверять, что бы в этой позиции мог разместитьсясамый большой из оставшихся кораблей. Процесс прекращается, как толькопроизойдет попадание. Обозначим подбитую часть корабля значением 1, а промах -2соответствующей ячейки поля. Если у игрока остались только однопалубныекорабли, то этим попаданием корабль уничтожен полностью и обстреливать его нетсмысла. В противном случае надо перейти ко второму состоянию. Приведем кодописанной функции:
 function State1 (var x, y: Integer): Boolean; var k, i, n, m: Integer;  B: Boolean;  tmp: Integer; begin  repeat  repeat  x := Random (10) + 1;  y := Random (10) + 1;  until Freedom (x, y, Play);  Pkx := Random (2);  Pky := Pkx — 1;  for m := 1 to 2 do  begin  i := 0;  k := 0;  for n := 1 to 2 do  begin  while Freedom (x + Pkx * i, y + Pky * i, Play) do  begin  Inc (k);  Inc (i);  end; {while}  Pkx := -Pkx;  Pky := -Pky;  i := 1;  end; {for}  B := k >= MaxShip;  if B then Break;  tmp := Pkx;  Pkx := Pky;  Pky := tmp;  end; {for}  until B;  Result := Killed (x, y);  if Result then  begin  Px := x;  Py := y;  Len := 1;  if MaxShip > 1  then State := 2  else Dec (Kor[Len]);  end; {if} end; {func State1}
 
Еерезультатом служат координаты выстрела и показатель попадания.
Обстрел
На этомшаге задача заключается в определении направления пойманного корабля. Для этогонадо обстрелять четыре ячейки (если они свободны), которые могут служитьпродолжением. В случае, когда все четыре клетки обстреляны, а попадания непроизошло (однопалубный корабль), надо перейти к первому состоянию. Если вкакой-то момент удалось подбить еще одну палубу противника, то можно переходитк расстрелу данного корабля, т.к. его направление стало известно. Аналогичнопервому состоянию, если у игрока остались корабли не более двух палуб, то этимпопаданием корабль уничтожен полностью и надо вернуться к прострелу. Посмотрим,как все это выглядит:
 function State2 (var x, y: Integer): Boolean; var Old: ShortInt;  tmp: Integer;  k: Integer; begin  Old := Play[Px,Py];  Play[Px,Py] := -1;  repeat  if not Freedom (Px + Pkx, Py + Pky, Play) and not Freedom (Px — Pkx, Py — Pky, Play) then  begin  tmp := Pkx;  Pkx := Pky;  Pky := tmp;  end; {if}  if Random (2) = 0 then  begin  x := Px + Pkx;  y := Py + Pky;  end else  begin  x := Px — Pkx;  y := Py — Pky;  end; {if}  until Freedom (x, y, Play);  Result := Killed (x, y);  if Result then  begin  Len := 2;  State := 1;  if MaxShip > 2  then State := 3  else Dec (Kor[Len]);  end else  begin  k := 4;  if not Freedom (Px + 1, Py, Play) then Dec (k);  if not Freedom (Px — 1, Py, Play) then Dec (k);  if not Freedom (Px, Py + 1, Play) then Dec (k);  if not Freedom (Px, Py — 1, Play) then Dec (k);  if k  
Расстрел
Напредыдущем шаге удалось установить в каком направлении размещен пойманныйкорабль. Теперь задача заключается в его полном уничтожении. Для этого надострелять справа или слева (сверху или снизу) подбитых палуб, пока не добьем егоцеликом, после чего вернемся в состояние прострела. При этом следует учитыватьмаксимально возможный корабль и стараться попасть по четвертой палубе, когдачетырех палубный корабль уничтожен, нет никакого смысла. Все достаточно просто:
 function State3 (var x, y: Integer): Boolean; var Old: ShortInt;  i: Integer;  B: Boolean; begin  for i := 1 to 2 do  begin  x := Px;  y := Py;  while Play[x,y] = 1 do  begin  Inc (x, Pkx);  Inc (y, Pky);  end; {while}  Old := Play[x-Pkx,y-Pky];  Play[x-Pkx,y-Pky] := -1;  B := Freedom (x, y, Play);  Play[x-Pkx,y-Pky] := Old;  if B then Break;  Pkx := -Pkx;  Pky := -Pky;  end; {for}  if B then  begin  Result := Killed (x, y);  if Result then  begin  Inc (Len);  if Len = MaxShip then  begin  Dec (Kor[Len]);  State := 1;  end; {if}  end;  end else  begin  Dec (Kor[Len]);  State := 1;  Result := State1 (x, y);  end; {if} end; {func State3}
 
Осталосьсобрать все это в одной процедуре, которая будет контролировать результатвыстрела и обеспечивать повторный ход при попадании:
 procedure Comput; var x, y: Integer;  Kill: Boolean; begin  repeat  case State of  1: Kill := State1 (x, y);  2: Kill := State2 (x, y);  3: Kill := State3 (x, y);  end; {case}  if Kill then Play[x,y] := 1  else Play[x,y] := -2;  until not Kill or GameOver; end; {proc Comput}
Можно заметить, чтофункция Killed вызывается ровно один раз при каждом ходе компьютера. От сюдаследует, что компьютер не подглядывает расположение кораблей игрока, т.к.другой возможности узнать о состоянии какой-либо ячейки поля юзера у него нет.В этом можно убедиться на практике, собрав все эти части кода вместе и сделавконсольное приложение, в котором функция Killed спрашивала бы у игрока, попалкомпьютер или промазал. Все это легко с минимальными изменениями реализовать наTurbo Pascal 7.0

3.БЛОК — СХЕМА

/>

/>ЗАКЛЮЧЕНИЕ
В результате выполненияданной курсовой работы был получен игровой программный продукт, названный«Морской бой». Было проведено исследование компонентов программной среды TurboPascal 7.0, которые использовались при создании игры.
В результате исследования быливыявлены следующие недостатки полученного программного продукта:
1.  Низкий исскуственный интеллект, т.е.ход компьютера осуществляется случайным образом, что делает маловероятнымпобеду компьютера;
2.  При полном потоплении корабля этоникак не отражается;
3.  Невозможность возврата на несколькоходов назад;
4.  Работоспособность приложения только всреде Windows;
Однако, помимо недостатков, есть идостоинства у этого программного продукта:
1.  Автоматическая расстановка кораблей ;
2.  Программный продукт малотребователенк системным ресурсам компьютера. Минимальная конфигурация: процессор – не ниже Pentium, оперативная память – не ниже 16 Mb, операционная система – Windows 95 / 98/ Me / NT /2000 / XP.
В результате учета всех сделанныхвыше замечаний возможно улучшение созданного программного продукта, на котороепотребуется минимум изменений исходного кода программы.

/>СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1.    Немнюгин С. Turbo Pascal / Учебный курс.– СПб: Питер, 2001.
2.    Сухарев М. Turbo Pascal 7.0. Теория и практика программирования.- СПб.: Наукаи техника. 2004.
3.    Фаронов В.В. Турбо Паскаль 7.0.Начальный курс. Учебное пособие – М.: Издательство ООО ОМД «Групп», 2002.
4.    Федоренко Ю. Алгоритмы и программы наTurbo Pascal / Учебный курс.– СПб: Питер, 2001.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.