Смекни!
smekni.com

Разработка игровой программы Морской бой

МОСКОВСКИЙГОСУДАРСТВЕННЫЙИНСТИТУТ СТАЛИИ СПЛАВОВ

(ТЕХНОЛОГИЧЕСКИЙУНИВЕРСИТЕТ)

НОВОТРОИЦКИЙФИЛИАЛ

кафедраэкономики иинформатики


ЗАДАНИЕНА КУРСОВУЮРАБОТУ


Студент__________________________________________________________

(Ф.И.О.,группа )

Темакурсовой работы(проекта): “Разработкаприложения“Игра – Морской

Бой” _

Сроксдачи курсовогопроекта_________________________________________


Переченьвопросов подлежащихисследованиюили разработке:

а)Актуальностьи значимостьтемы.

б)История развитияигровых программ.

в)Обоснованиевыбора используемыхкомпонентов

г)Алгоритм реализациипроекта.


Руководитель:Плясунов Д.Ю.________________


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

Советскийэнциклопедическийсловарь

ВВЕДЕНИЕ


Все, кто имеетдело с компьютером,так или иначесталкивались с компьютерными играми, и подавляющеебольшинствоможет сходуназвать несколькоигр, которыеим особеннопонравились.Те, кто уже совсемнаигрался,почти наигралсяили еше не наигрался,но в процессеобщения с компьютеромуже начал совмещатьигры с чем-нибудьболее полезным,возможно, хотелибы придуматькакие-нибудьсвои, не похожиени на какиедругие игры(1).

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

В даннойкурсовой работеречь пойдето созданиинесложнойигровой программы«Морской бой»,которая и будетявляться объектомисследования.

В первой главеданной курсовойработы рассматриваютсяаспекты программированияигр с использованиемвизуальныхкомпонентов,в пункте 1.1. приводитсяаналитическийобзор игровогопрограммногообеспечения,классификацияигр. В пункте1.2. приводитсяописание компонентов,используемыхпри реализациипрактическойчасти курсовойработы. В пункте1.3. показываютсявозможностииспользованиявизуальныхкомпонентов.

Во второйглаве приведеныэтапы разработкипрограммы,такие как постановказадачи, алгоритмреализациии описаниепользовательскогоинтерфейса.

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

Списокиспользованныхисточниковсодержит полныйперечень техническойлитературы,использованнойдля написанияданной курсовойработы.

Приложениясодержат блок-схемывсех процедурпрограммы, итекст самойпрограммы.


1. ПРОГРАММИРОВАНИЕИГР С ИСПОЛЬЗОВАНИЕМВИЗУАЛЬНЫХКОМПОНЕНТОВ


    1. Аналитическийобзор

В последнеевремя продажипрограммногообеспеченияувеличиваютсянезначительно,в то время какпродажи игровыхпрограмм возрастаютэкспоненциально.Игры для платформыWindowsсоставляютподавляющеебольшинство.Игровое программноеобеспечение– это третьяпо размерамдоходов отрасльиндустриипрограммногообеспеченияпосле текстовыхпроцессорови электронныхтаблиц (1).

До недавнеговремени средаWindows использова­ласьв основном какплатформа длясоздания игр,пер­воначальноразработанныхдля Macintosh. Этоосуще­ствлялосьна базе пакетаQuickTime фирмы Apple. При­мерамитаких игр могутбыть Mysl (Broderbund/Cyan), Wrath of theGods (Maxis/Luminaria) и некоторыедру­гие. В рядеслучаев использовалсяпакет Video for Win­dows,позволяющийотображатьоцифрованноевидео. ЗатемпоявилисьбиблиотекиWinG и WinToon, на базекоторых фирмаSierra создала игруKing's Quest VII.Это были первыепопытки использоватьWindows как платформудля созданияигровых программ.Преимущест­ватакого подходадостаточноочевидны— единыйин­терфейс,наличие стандартныхдрайверов длябольшин­ствамультимедийныхустройств ивозможностьуправ­ленияими стандартнымиспособами.Затем появиласьновая версия— Windows95, в составкоторой былавключена библиотекаWinG (как подсистемаGDI), и перед разработчикамиоткрылись болееширокие воз­можности.

Указать точноечисло компьютерныхигр очень трудно.Можно толькопримерно оценитьчисло различныхнаименованийигр, находящихсяна рынке в любоевремя (2).


Классификациякомпьютерныхигр может бытьследующая:

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

2. Фантастическиеигры, в которыхтребуетсяиграть некоторуюроль (ролевыеигры). Ихлучше всегоопределитькак компьютеризованнуюверсию рассказаDungeons and Drag­ons («Подземельяи драконы»), нодействие невсегда происходитв населенномварварамисредневековоммире. Часто онопроисходитв открытомкосмосе илив каких-либообластях будущего.В этих играхобычно нужноуправлятьгруппой персонажей,которые становятсяпо мере развитияигры сильнееи умнее, и делатьнекоторыедругие вещи.Так же изменяютсяи враги. Самирассказы виграх этоготипа обычноменее детальны,чем в приключенческихиграх, с большимупором на задачупобить чудовгщ,чем решитьзагадки.

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

4. Имитаторыназемных иморских сражений.Игры разработаныдля военногооборудованияи военных машин.Эта категорияигр включаетв себя симуляторынастоящихподводныхло­док, кораблейи танков, и позволяетигрокам испытатьреальные сценариисражений, ивыжить длятого, чтобыпонять, какиспользоватьправильнуютактику в следующейигре.

5. Самолеты,поезда и автомобили.В отличие отэтих имитаторов,все прочиеявляются имитаторамивоенного типаили имеют оченьсильный упорна сражение.Эти же игры неотносятся ктаким имитаторам.Конечно, можнопроехать наавтомобилепо береговойдороге в Калифорниисо скоростью,вдвое превышающейразрешенную,и потанце­ватьна всех четырехколесах. Нотакже можноиспользо­ватьэти игры, чтобынаучитьсябезопаснолетать средиоб­лаков, иполучать удовольствиеот свободыполета. Дажеможно делатьтакие вещи, какпостройка иуправлениесо­бственнойжелезной дорогой.

6. Спортивныеимитаторы.Здесь необходимообучать профессионалови управлятьими. Эти игры- нечтоболь­шее, чемпростое изображениебейсбольныхигр в картинках,в некоторыхиз них можнодаже контролироватьреальное действие.Спортивныеимитаторы даютвозможностьвести рискованнуюигру в нужноевремя, доказать,что можно выигратьс помощью быстроты,иметь в командеГенри Ааронаи Теда Вильямса,или переигратьТомми Лазорду.

7. Аркадныеигры/игры действия.Это классические«игры дей­ствия»- все зависитот того, насколькобыстро рукимогут дергатьджойстик. Обычноо них говоряткак о бес­смысленных,так часто ибывает. С другойстороны, бываютвремена, когдапоявится потребностьдать отдохнутьмозгам. Во многиеиз этих игрможно игратьс помощью клавиатурыили мыши, и джойстикине всегда необходимы.В чем естьнеобходимость,так это в быстрыхрефлексах.

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

9. Имитаторыреальности(«игры в бога»).Это игры, которыепозволяютсоздаватьреальный мириз ничего. Этоигры, которыепозволят создатькомпьютерныймир из на­бросков,управлятьгородом, странойили даже миром.

10. Игры,в которых делаютсяденьги.Они копируютигровую деятельностьи учат высшимформам азартныхпредприятий:фондовая биржа,торговлянедвижимостью.Они также поз­волятпопробоватьуправлятькорпорацией.В эти игры можноиграть дляудовольствия,или использоватьих для того,чтобы научитьсякарабкатьсявверх по лестницекарьеры.

11. Стратегическиеи военные имитаторы.Здесь можноприниматьучастие в великихисторическихсобытиях, взятьна себя командо­ваниенемецкой армиейу Ленинградаили армиейНаполео­нау Ватерлоо. Этовоенные стратегиипрошлого,насто­ящегоили будущего.

12. Игрыдля детей.Если есть домашнийкомпьютер, ичтобы детинаучились егоиспользовать,то эти игрыдостой­нывнимания. Реальностьнашей культурытакова, что,как толькомалыши стануткоординированынастолько,чтобы правильнопользоватьсяклавиатуройили мышью, онихотят сразуприняться затакие игры, какWing Commander, Popu­lous или Eye of theBeholder.Однако же вокругсуществуетмножество игр,в которые детимогут игратьпросто чтобыполучитьудовольствие,или же научитьсячему-либо.

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 годов.Начало лежитгораздо раньше,тогда, когдаДжон Кеннедиуже пробылпрезидентомСоединенныхШтатов всегонесколькомесяцев (2).

На самом делевсе началосьс модели железнойдороги. Студен­тыТехнологическогоинститута вМассачусетсебыли немалоудивле­ныколичествомспособов, спомощью которыхможно былоразмес­титьорганы управленияминиатюрнойжелезной дорогой.Позднее, когдаони наконецполучили возможностьработать набольших компь­ютерахинститута, ихработа в бинарныхвычислениях— ведьименно такиевычисленияимитируютсявыключателямижелезной дороги— позволилиим пройти хорошуюподготовкув компьютерномделе.

Стив Расселбыл одним изчленов КлубаМоделей Железныхдорог ВысокойТехнологиив Технологическоминституте.Будучи хорошимпрограммистом,он летом1961 года работалв Статистическойлаборатории,когда у негои его друзейпоявилась идеяперенести«мыльные»научно-фантастическиерассказы Е.Е.Смитана компьютеры.В 1962году Стив разработалпрограмму дляPDP-1. Эта самаямашина теперьвыставленав компьютерноммузее Бостонав МассачусетскомТехнологическоминституте.

В «КосмическойВойне», какназываласьэта программа,два синтезированныхкомпьютеромракетных космическихкорабля (одинпохожий натолстую сигару,а другой надлинную обтекаемуютрубу) моглилетать по экрану,на которомпомещалосьизображениекос­моса. Игрокимогли нажиматьна кнопки, чтобызаставитьракеты менятьнаправлениедвижения почтитак же, как позднеев игре Asteroids владельцыигровых машинAtari управлялисвоими корабля­ми.Каждая ракетанесла на себе31 торпеду,и, в то времякак они летелипо экрану, игрокмог выстрелитьточечку из носасвоей ракетыв направлениидругой. Еслиточка действительнопересекалаочерта­ниядругого корабля,программаопределяла,что торпедауспешно поразиладругой корабльи другой корабль«взрывался».Взорванныйкорабль пропадалс экрана и заменялсянагромождениемточек, ко­торыеизображалиего остатки.

Конечно,обществопрограммистови взломщиковпрограмм неможет удовлетворитьсякачеством любойпрограммы,независимоот того, насколькоона легка илиинтересна.Изменения былинеизбеж­ны.Один из друзейпрограммиста,будучи недовольнымслучайнымобразом построеннойкартой звездногонеба, которуюРассел первоначальнопоместил вигру, взял звездныйатлас и ухитрилсязапрограммироватьнашу собственнуюгалактику,вплоть до звездпятой величины.Другой добавилгравитациюв игру, а третийввел возможностьпобега в гиперпространство,при этом, чтобыпоказать место,где корабльпокинул звезднуюсистему, наэкране оставалсяслед ускорения.

Даже Расселсделал некоторыеизменения.Зная, что унастоя­щихторпед вероятностьпоражения целине 100%,а меньше, онрешил придатьзвездным торпедамвозможностьошибки, и добавитьслучайныйэлемент в траекторииракет и времявзрыва. Егодрузья терпетьне могли новуюверсию, посколькуони хотели быиметь в игрету же степеньуверенности,которая существовалав программировании.

Рассел вернулпрограмму кпрежней версиии, не успелиогля­нуться,как «Космическиевойны» оккупироваликомпьютерыколлед­жейпо всей стране.

«Космическиевойны» сталинастолькопопулярны ксерединешестидесятых,что Нолан Бушнелл,создательAtari, очень привязалсяк игре во времяучебы в университетештата Юты. К1970 году Бушнеллпостроил своюсобственнуюмашину, использовав185 встроенныхцепей дляподсоединенияк телевизоруи для выполненияодной-единственнойфункции. Этафункция былаигрой «КомпьютерныйКосмос», вариант«КосмическихВойн», в которомракета сражаласьс летающимитарелкамивместо другогокорабля.

«КосмическиеВойны» былине единственнымпредшественникомкоммерческихкомпьютерныхигр, появившихсяна большихкомпьютерахв колледжах.Какой-то неизвестныйавтор началиграть в игруStar Trek («Звездныйпуть») в шестидесятыхгодах. Никтоне знает, ктопервым создалтакую игру —он или она, вероятно,подали бы судебныйиск, если быавтор игры былточно определен— но этаигра такжепоявилась наколледжскихкомпьютерахпо всей странек 1969году.

Игра «Звездныйпуть» сама посебе была неочень изощренной.В игре былилинии наподобиерешеток, которыепозволялизвезд­нымкораблямпутешествоватьот одной точкик другой, играисполь­зоваласимволы дляидентификациикораблей,предоставлялачис­леннуюинформациюв процентах,и позволялалетать быстрее,чем скоростьсвета. К середине70-х годов почтина каждой домашнейкомпьютернойсистеме быладоступна таили иная формаэтой игры.Существовалаверсия этойже игры для IBMпод названиемStar Fleet («ЗвездныйФлот»).

Наконец, стоитупомянутьпожалуй наиболееважную игру,Adven­ture («Приключения»).В игре использовалисьдвухсловныекоманды, имяее разработчикаВилл Краудер.Это была перваяприключенческаякомпьютернаяигра.

Кроме того,в конце 70-х быласоздана играпо имени Zork, котораястала доступнадля пользователейдомашних компьютеровв 1981году. Эту игрудо сих пор можнокупить. ИграZork основываетсяна игре Adventure (2).


    1. Описаниекомпонентов,используемыхпри реализациипрактическойчасти курсовойработы

В практическойчасти даннойкурсовой работыиспользуютсяследующиевизуальныеи невизуальныекомпоненты(3, 4, 5) среды программированияBorlandDelphi6.0.


1.2.1. КомпонентTMainMenu


T

MainMenu позволяетпоместитьглавное менюв программу.При помещенииTMainMenu на форму этовыглядит, какпросто иконка.Иконки данноготипа называютневидимым(невизуальным)компонентом,поскольку ониневидимы вовремя выполненияпрограммы.Создание менювключает тришага:

1) помещениеTMainMenu на форму,

2) вызов ДизайнераМеню черезсвойство Items вИнспектореОбъектов,

3) определениепунктов менюв ДизайнереМеню.

Этот компонентдоступен измодуля MENUS,и находитсяна страницеПалитры компонентовStandard

Этот компонентпредставляетглавное менюформы и наследуетвсе методы исвойства TMenu.Особенностьего в том, чтов нем реализовансложный механизмобъединенияменю. Это необходимопо следующимпричинам:

  1. Если в приложенииимеется несколькоформ со своимименю, то дляупрощенияработы целесообразносоединить ихв одно и управлятьменю из главнойформы.

  2. Объединениеменю нужно приработе с интерфейсомMDIи его подокнами.

  3. Механизмобъединенияменю используетсясерверами OLE,запускаемымипо месту нахожденияобъекта OLE.Загружаясь,сервер дописываетосу­ществляемыеим операциик меню другогоприложения.

Для того чтобыреализоватьобъединениеменю, у тех форм,меню которыхбудут присоединенык главному,необходимоустановитьв Trueсвойство: b)propertyAutoMerge:Boolean.

При этом углавного менюоно должнооставатьсяравным False,иначе главноеменю будетвообще невидимым.Объединениебудет происходитьавтоматическипри активизацииновых форм илисерверов OLE.Кроме автоматическогорежима, объединениеменю можновыполнить привызове метода:procedureMerge(Menu:TMainMenu).

Присоединяемоеменю при необходимостиможет бытьлегко отсоединеновы­зовом метода:procedureUnmerge(Menu:TMainMenu).

При установленномв Trueсвойстве AutoMergeссылка наприсоединенноеменю будетсохранятьсяв специальномполе компонентаи отсоединятьсяв нужных случаяхавтоматически(например, призакрытии формы,которой онопринадлежит).

Объединениеменю происходитпо специальнымправилам, воснове которыхлежит использованиегрупповогоиндекса (свойстваGroupIndex)каждого объек­таTMenuItem.

У пунктовменю одногоуровня, в частностивсех подменюверхнего уровняв главном меню,свойство GroupIndexявляется неубывающим,т. е. у после­дующегопункта групповойиндекс большелибо равениндексу предыдущего.Это требованиеотслеживаетсякак на этаперазработки,так и на этапеиспол­нения.Например, пустьпункты менюимеют индексы0, 3, 4, 5, 6. Если включитьпункт меню синдексом 5 междупунктами синдексами 0 и3, то 3 и 4 будутизменены на5. А вот изменитьбольшее значениеХ на меньшееY,если впередиесть пунктыс индексом,большим Y,невозможно.Если в этомпримере попытатьсяизменить индекс6 на 4, то это приведетк возникно­вениюисключительнойситуации EMenuError.

Для обычныхформ объединениепроисходиттолько на верхнемуровне в главномменю во времяих активизации.В объединенномменю все подменюбудут располагатьсяпо возрастаниюномера групповогоиндекса, приэтом:

  1. если в присоединяемомменю есть пунктыс таким же групповыминдексом, чтои в исходном,то все ихмножествозаменяет всемножествотаких пунктовв исходномменю;

  2. все пунктыприсоединяемогоменю, групповойиндекс которыхне встречаетсяв исходном,добавляютсяк нему и вставляютсяна соответствующиеих индексуместа.

К окнам интерфейсаMDIвсе сказанноеотноситсятолько призапуске приложения.Если в формахприложениясо стилем fsMDIChildесть свои главныеменю, то в этотмомент ониавтоматическисольются сглавным менюформы fsMDIFormнезависимоот состоянияAutoMerge.

На уровнеработы с серверамиOLEпредусмотреныдополнительныевозмож­ностипо объединениюменю. Если вкомпонентTOLEContainerзагружен объектOLE,то в конец подменюEditобычно добавляетсяподменю, изкоторого можновызвать функцииоткрытия иредактированияэтого объекта.После активизациисервера онможет не тольковставлять своиподменю в главное,но и добавлятьновые пунктык уже существующимподменю.

Три методаTMainMenuиспользуютсядля работы сменю OLE:

  1. procedure PopulateOle2Menu(SharedMenu: HMenu; Groups:array of Integer; var Widths: array of Longint);

  2. procedure GetOle2AcceleratorTable(var hAccel : THandle;var numAccels: Word; Groups: array of Integer) ;

  3. procedure Set01e2MenuHandle(Handle:HMENU);

1.2.2. КомпонентTLabel


T

Labelслужитдля отображениятекста на экране.Можно изменитьшрифт и цветметки, еслидважды щелкнутьна свойствоFont в ИнспектореОбъектов. Видно,что это легкосделать и вовремя выполненияпрограммы,написав всегоодну строчкукода.

Этот компонентдоступен измодуля STDCTRLS,и находитсяна страницеПалитры компонентовStandard.

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

Свойствакомпонентаприведены втабл.1:

Таблица 1

СвойствакомпонентаTLabel


Свойство

Описание

(Pb) property Caption: TCaption;TCaption = string[255]; Содержитстроку с выводимымтекстом.
(Pb) property Alignment:TAlignment; Устанавливаетправило выравниваниятекста — поправому, левомукраю или поцентру клиентскойобласти.
(Pb) property AutoSize: Boolean; Вслучае Trueпроисходитавтоматическоеприведениеразмеровкомпонентак размерамтекста и высотешрифта.





Продолжениетабл.1
(Pb)propertyShowAccelChar: Boolean;

Показывает,отображаетсяли в TLabelакселератор(символ, передкоторым стоитзнак амперсанда— '&'). Если оноравно False,амперсандникак неинтерпрети­руется.В случае Trueакселераторвыделяетсяв строке подчеркиваниеми нажатие клавиш+приводит кпередаче фокусаокну FocusControl(т.к. TLabelсам не являетсяоконным компонентом).

(Pb) property FocusControl:TWinControl; Определяетоконный компонент,которомупосылаютсясообщения овводе акселе­ратора.
(Pb)propertyTransparent: Boolean; Прозрачностьфона компонента.Если свойствоустановленов True,то при перерисовкеэлементауправленияне про­исходитзакрашиваниеклиентскойоблас­ти. Впротивномслучае — происходитзакрашиваниекистью bsSolidи цветом Color.
(Pb)property WordMrap: Boolean; Определяетвозможностьразрыва словв случае, еслидлина выводимоготекста превышаетширину компонента.

1.2.3. КомпонентTPanel


T

Panel- управляющийэлемент, похожийна TGroupBox, используетсяв декоративныхцелях. ЧтобыиспользоватьTPanel, просто поместитеего на формуи затем положитедругие компонентына него. Теперьпри перемещенииTPanel будут передвигатьсяи эти компоненты.TPanel используетсятакже для созданияпанели инструментови окна статуса.

Этот компонентдоступен измодуля EXTCTRLS,и находитсяна страницеПалитры компонентовStandard.

Этот компонент— являетсянесущей конструкциейдля размещениядругих элементовуправления.В отличие отпростой рамки(TBevel)панель самаявляется оконнымэлементомуправленияи родителемдля всех размещенныхна ней компонентов.Часто ее используютдля созданияпанелей инстру­ментов,строк состоянияи т. п.

За внешнееоформлениепанели отвечаютсвойства:

(Pb) property Bevel Inner: TPanelBevel;

(Рb)property BevelOuter: TPanelBevel;

TPanelBevel = (bvNone, bvLowered, bvRaised) ;

(Pb) property BevelWidth: TBevelWidth;

TBevelWidth = 1..Maxint;

(Pb) property BorderWidth: TBorderWidth;

TBorderWidth = 0..Maxint ;

На границахпанели размещаютсядве специальныеокаймляющиерамки (bevels):Bevellnnerи BevelOuter.При помощикомбинациибелого и серогоцветов ониимитируюттрехмерность— приподнятость(bvRaised) или утоп-ленность(bvLowered). Обе рамкиимеют ширинуBevelWidth.Наружная —BevelOuter— расположенапрямо по периметрупанели, вторая— Bevellnner— внутри нарасстоянииBorderWidthот нее. Обе могутбыть невидимыми(bvNone),приподнятымиили утопленными.

КомбинируясочетанияbvLowered/bvRaised,можно создатьвокруг панели"ров" или "вал".

Иллюзиютрехмерностиможет подчеркнутьтакже стильобрамлениякомпо­нента:

(Pb) property BorderStyle: TBorderStyle;

TBorderStyle = bsNone .. bsSingle;

ЗначениеbsSingleозначает, чтопанель будетокаймленачерной линиейединичнойтолщины (попериметру,снаружи отобеих рамок).

Выравниваниетекста заголовкапанели определяетсяпри помощисвойства:

(Pb) property Alignment:TAlignment;

Свойство(Pb)propertyLocked:boolean;предназначенодля определенияспособа взаимодействияпанели с размещен­нымина ней объектамиOLE.Если оно равноTrue,последние приактивизациисервера OLE"по месту'" немогут заместитьпанель.

В обработчикесобытия: (Pb)propertyOnResize:TNotifyEvent;может бытьпредусмотренареакция пользователяна изменениеразмеров панели.


1.2.4. КомпонентTBitBtn


T

BitBtn- кнопкавроде TButton, однакона ней можноразместитькартинку (glyph).TBitBtn имеет несколькопредопределенныхтипов (bkClose, bkOK и др),при выборекоторых кнопкапринимаетсоответствующийвид. Кроме того,нажатие кнопкина модальномокне (Form2.ShowModal) приводитк закрытию окнас соответствующиммодальнымрезультатом(Form2.ModalResult).

Этот компонентдоступен измодуля BUTTONS,и находитсяна страницеПалитры компонентовAdditional.

Эта кнопка,будучи потомкомTButton,может нестина себе пиктограммуи имеет раддополнительныхудобств виспользовании.В Delphiуже определеныстандартныевиды кнопок:

(Pb)propertyKind:TBitBtnKind;

TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes,bkNo, bkClose, bkAbort, bkRetry, bklgnore, bkAll);

Для каждойиз них определены:передаваемыйформе результат(ModalResult):

BitBtnModalResults:array[TBitBtnKind] of TModalResult =

(0, mrOk, mrCancel, 0, mrYes, mrNo, 0, mrAbort, mrRetry,mrlgnore, inrAll);

а также названиеи картинки дляразных состояний.Достаточноустановитьзначение свойстваKind,и кнопка сразуприобрететнужный вид.Более того,некоторые извидов кнопокпри нажатиисразу совершаютопре­деленныедействия. Так,bkHelp осуществляетинициализациюсистемы помощисо своим (илиближайшимненулевымродительским)контекстом.Кнопка видаbkCloseзакрываетформу, которойона принадлежит,вызывая ееметод Close.

Кнопка будетотнесена к видуbkCustom, если она:

  1. назначенаDefault,но при этом непринадлежитмножеству[bkOk,bkYes];

  2. назначенаCancel,но не принадлежитмножеству[bkCancel,bkNo];

  3. у нее измененапиктограмма;

  4. модальныйрезультат несоответствуетопределенномудля этого видакно­пок.

За внешнийвид этой кнопкиотвечают свойства,рассмотренныениже. Стильизображениякнопок в зависимостиот операционнойсистемы задаетсясвойством:

(Pb) property Style: TButtonStyle;

TButtonStyle = (bsAutoDetect, bsWin31, bsNew);

Стиль bsNewсоответствуетWindows95. В любом случаекорректнымбудет применениестиля bsAutoDetect, которыйсам распознаетверсию системы.Пиктограммакнопки, котораявместе с текстомвидна на ееповерхности,определяетсясвойством:

(Pb)propertyGlyph:TBitmap;

Для созданияэффекта нажатиякартинка должнанемного изменятьсяв зависимостиот состояния;кроме того,отдельнаякартинка нужнадля неактивногосостояния(когда нажатиене воспринимается).В свойствеGlyphдолжна бытьодна битоваякарта, но онаможет содержатькартинки сразудля несколькихсостоянийкнопки (максимумчетыре). Ониинтерпретируютсякак соответствующиенормальному(отжатому),запрещенному(неактивному),нажатому иутопленномусостояниям(последнееприменяетсятолько длякнопок TSpeedButton).Для этого картинкидолжны бытьрасположеныподряд вплотнуюпо горизонтали.Например, приразмере картинок16х16 нужна объединеннаябитовая карта64х16. Если каждаяиз картинокквадратнаяи ширина общейкартинки нацелоделится навысоту, то приприсвоенииее свойствуGlyphсистема сможетраспознатьих и скорректироватьколичество,определяемоесвойством:

(Pb) property NumGlyphs: TNumGlyphs ;

TNumGlyphs = 1..4;

При отрисовкев зависимостиот состоянияиз большойбитовой картыбудет использовананужная часть.

Три свойстваотвечают зарасположениетекста и картинкина поверхностикнопки:

(Pb)propertyLayout:TButtonLayout;

Способ выравниванияпиктограммыотносительнокраев кнопки.Может бытьодним из четырех:

TButtonLayout = (biGlyphLeft, biGlyphRight,biGlyphTop, biGlyphBottom);

Расстояниеот соответствующегоспособу выравниваниякрая кнопкидо пикто­граммыописываетсясвойством:

(Pb)propertyMargin:Integer;

Промежутокмежду пиктограммойи текстом равен:

(Pb)propertySpacing:Integer;

Если свойстваMargin,Spacingили оба не заданы(по умолчаниюравны -1), значенияэтих промежутковвыбираютсясистемой. Кнопкатакже имеетметод Clickи свойстваCaption,ModalResult,Defaultи Cancel.Статус Defaultполучают кнопкивидов bkOk,bkYes,aCancel— кнопки видовbkCancel, bkNo.


1.2.5. КомпонентTSpeedButton


T

SpeedButton- кнопкадля созданияпанели быстрогодоступа к командам(SpeedBar). Пример - SpeedBarслева от ПалитрыКомпонент всреде Delphi. Обычнона данную кнопкупомещаетсятолько картинка(glyph).

Этот компонентдоступен измодуля BUTTONS,и находитсяна страницеПалитры компонентовAdditional.

Эта кнопкас изображениемможет иметькак зависимую,так и независимуюфиксацию. Онаудобна дляпримененияв составе панелейинструментов.По­ведениеэтих кнопокво многомопределяетсясвойством:

(Pb)propertyGrouplndex:Integer;

Если Grouplndexравен нулю, укнопки вообщенет фиксациив нажатом состояниии она не зависитот остальныхкнопок, принадлежащихтому же родительскомуэлементу. Кнопкив группе (тоесть с одинаковымненулевымзначениемGrouplndex)имеют зависимуюфиксацию. Онатакже зависитот свойства:

(Pb)propertyAllowAlIUp:Boolean;

котороеописываетповедениекнопок в группе,а именно: могутли все кнопкиодновременнобыть отжаты.Если AllowAlIUp равноFalse(по умолчанию),на­жатую кнопкув группе можноотпустить, лишьнажав другую.Если AllowAlIUp равноTrue,кнопку можноотпуститьповторнымнажатием.

Если необходимофиксироватьодну кнопкуTSpeedButton,ей нужно присвоитьуникальныйгрупповойиндекс, а AllowAlIUpустановитьв True.

Посколькув группе немогут одновременнонаходитьсякнопки с различнымзначением этогосвойства, принажатии кнопкии измененииGrouplndexсвой­ствоAllowAlIUp "рассылается"(присваивается)остальнымкнопкам с темже значениемGrouplndex.В группе неможет бытьнажато болееодной кнопки.Определяет,нажата ли кнопка,свойство:

(Pb)propertyDown:Boolean;

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

Текст кнопкиопределяетсвойство Caption.Компонент имеетте же правилаи свойстварисованиякартинки, чтои TBitBtn.Они описываютсясвойствамиGlyph,NumGlyphs,Layout,Marginи Spacing.

Для имитациищелчка предусмотренметод Click.Двойной щелчокдля TSpeedButtonвозможен толькона нажатойкнопке — иначеон интер­претируетсякак обычный.Описываетсясвойством:

(Pb) property OnDblClick;


1.2.6. КомпонентTImage


TImage - отображаетграфическоеизображениена форме. Воспринимаетформаты BMP, ICO, WMF. Есликартинку подключитьво время дизайнапрограммы, тоона прикомпилируетсяк EXE файлу.

Этот компонентдоступен измодуля EXTCTRLS,и находитсяна страницеПалитры компонентовAdditional.

Этот компонентслужит надстройкойнад классомTPictureи замыкает всюиерархию графическихобъектов VCL.Он предназначендля показа наформе изображения:битовой карты(TBitmap),метафайла(TMetafile),значка (TIcon).

Свойство(Pb)propertyPicture:TPicture;служит контейнеромдля графическогообъекта одногоиз перечисленныхклас­сов.

В качествеканвы используетсяканва объектаPicture.Graphic— только еслиполе Graphicссылается наобъект классаTBitmap:

(Pb)propertyCanvas:TCanvas;

Если это нетак, то попыткаобращения ксвойству вызоветисключительнуюситуациюEInvalidOperation,так как рисоватьна метафайлеили значкенельзя.

Следующиетри свойстваопределяют,как именноTpictureрасполагаетсяв рабочей областикомпонента:

(Pb)propertyAutoSize:Boolean;

— означает,что размерыкомпонентанастраиваютсяпо размерамсодержащегосяв нем графическогообъекта. Устанавливатьего в Trueнужно передзагрузкойизображенияиз файла илибуфера обмена;

(Pb)propertyStretch:Boolean;

— если этосвойство установленов True,то изображение"натягивается"на рабочуюобласть, принеобходимостиуменьшая илиувеличиваясвои размеры.Если оно установленов False,то играет рольследующеесвойство;

(Pb)propertyCenter:Boolean;

— если этосвойство установленов True,изображениецентрируетсяв пределахрабочей области.В противномслучае — располагаетсяв ее верхнемлевом углу.


1.2.7. КомпонентTTimer


T

Timer- таймер,событие OnTimerпериодическивызываетсячерез промежутоквремени, указанныйв свойствеInterval. Период времениможет составлятьот 1 до 65535 мс.

Этот компонентдоступен измодуля EXTCTRLS,и находитсяна страницеПалитры компонентовSystem.

Этот невизуальныйкомпонентпредназначендля уведомленияпрограммы обистеченииопределенныхпромежутковвремени. Компонентинкапсулируетсистемныйтаймер Windowsи работаетчерез посылкусообщенийWM_TIMER.

Свойство(Pb)propertyEnabled:Boolean;включает/выключаеттаймер, влияяна генерациюим событий.Будучи уста­новленв Enabled,таймер начинаетгенерироватьсобытия OnTimerчерез интер­валвремени

b)propertyInterval:Word;

которыйизмеряетсяв миллисекундах.После каждогоистечениятакого интервалаинициируетсяобработчик,связанный ссобытием:

(Pb)propertyOnTimer:TNotifyEvent;

При этомпрограммистполучает очереднойквант времени.

При активизациии деактивизациитаймера илиизмененииинтервала всистеме можетне оказатьсясвободныхтаймеров. Вэтом случаегенерируетсяисключительнаяситуацияEOutOfResources.


1.2.8. КомпонентTStatusBar


T

StatusBar– строка состояния.Предназначенадля размещенияразного родаслужебнойинформациив окнах редактирования,обычно располагаетсяв нижней частиосновной формы.Компонент можетиметь несколькосекций, а такжекнопку измененияразмеров окна,в которое онпомещен. Скомпонентомсвязываетсяобъект классаTStatusPanel,который определяетпанели компонента.

Этот компонентнаходится настранице ПалитрыкомпонентовWin32.


2. РАЗРАБОТКАПРОГРАММЫ


2.1. Постановказадачи


Разработатьигровую программу«Морской бой»,которая включаетигровую панель,состоящую издвух полей длячеловека икомпьютера.На поле расставляются10 кораблей разногокласса. Четырекорабля размеромв одну ячейку,три корабляразмером в двеячейки, двакорабля размеромв три ячейки,и один корабляразмером вчетыре ячейки.Поочереднопротивникампредоставляетсявозможностьвыстрела почужому полю,результатыкоторого отображаютсяна нем. При попаданиив корабльпредоставляетсявозможностьдополнительноговыстрела. Победаприсуждаетсяигроку, потопившемувсе кораблипротивника.

Справочнаяинформациясодержит правилаигры, версиюпрограммы, иавтора работы.


2.2. Алгоритмреализацииработы


2.2.1. Алгоритмреализацииигровой программы


Запуск программыосуществляетсяследующимобразом: необходимооткрыть папку,содержащуюданную игру,и найти исполняемыйфайл morboy.exe.На этом файлеследует выполнитьдвойной щелчоклевой клавишейманипуляторамышь.

Проект программысостоит изфайла проекта,содержащегонеобходимыеконструкциидля исполнения,и двух модулейUnit1и Unit2(6, 7, 8).

Модуль Unit2содержит формуAboutBox, и предназначендля выводаокна, содержащегоинформациюо программеи об авторе(рис.1).


Рис.1. Информацияо программе


Модуль Unit1является основныммодулем проекта,содержащимвсе необходимыедля работыпрограммыпроцедуры.

После запускапрограммы наэкран выводитсяосновная формаForm1(рис.2), на которойрасположеныследующиеобъекты:

  1. Главное меню

  2. Игровое полекомпьютера

  3. Игровое полечеловека

  4. Кнопкиподтверждения/ отмены хода

  5. Строка состояния


Рис.2. Вид программыпосле запуска


Игра, т.е. работапрограммы,начинаетсяс выбора в главномменю пункта«Игра», в которомсодержитсяподпункт «Новая».После выбораэтого подпункта,или нажатияклавиши F2,происходитвыполнениепроцедурыN11Click.Эта процедурапредназначенадля расстановкикораблей наигровых поляхслучайнымобразом (Приложение1).

Первоначальнона форму выводитсясообщение «Вашход» (блок 2). ДалеепеременнымP иt1присваиваютсязначения True,и инициализируетсягенераторслучайных чисел(блок 3). Затеморганизуетсяцикл с заданнымколичествомповторенийпо переменнойUот 1 до 2 (блок 4). Вэтом цикле, всвою очередьорганизуютсядва вложенныхцикла с заданнымколичествомповторений,в которых происходитобнулениеэлементовмассива записи(блоки 5, 6 и 7). Послеэтого выполняетсяоперация присваиванияm[u].k:=20 (блок 8). Это –общее количествоячеек, котороезанимают всекорабли одногоигрового поля.

Далее организуютсядва вложенныхцикла, первыйс параметромIот 4 до 1 с шагом–1, второй спараметромjот 1 до 5-Iс шагом 1 (блоки9 и 10). В этих циклахвыполняетсярасстановкакораблей случайнымобразом. Внутриэтих цикловорганизуетсяеще один циклтипа «До» сусловием окончанияцикла t=True(блок 32). В телецикла происходитоперация присваиванияt:=true (блок 11), и проверяетсямноговариантноеусловие, чемуравно значениевыраженияrandom(2), сгенерированноеслучайноечисло, нулю илиединице. Еслиэто выражениерано нулю (блок12), будет происходитьустановкакорабля погоризонталии будут выполненыследующиедействия:генерируютсяслучайнымобразом координатыX1и Y1(блок 13), организуетсяцикл с заданнымчислом повторенийпо переменнойX(блок 14), в которомпроверяетсяусловие неравенстванулю ячейкис координатамиX,Y1(блок 15), и еслиэто так, топеременнойtприсваиваетсязначение False(блок 16).

И, в этом жецикле проверяетсяусловие истинностипеременнойt.Если переменнаяt=True(блок 17), то происходитпропуск некоторыхячеек (блок18), и установкаячеек корабля(значение ячейкиравно 2) циклически(блоки 19 и 20). Послеэтого опятьпроисходитпропуск некоторыхячеек (значениеих равно 1) (блок21). На этом циклзавершается(блок 14), и проверяетсяследующеезначение выраженияrandom(2). Если этовыражение равноединице (блок22), то происходитустановкакорабля повертикали. Всевыполняемыедействия этойветки алгоритмааналогичнывышеописанным,с применениемциклов по переменнойY(блоки 23 - 31).

После выполненияэтих действийпроверяетсяусловие окончанияцикла «До»(блок 32), и завершаютсядва вложенныхцикла по переменнымI иJ(блоки 9 и 10).

Далее, происходитвизуальнаярасстановкакораблей наигровом полечеловека. Дляэтого организуютсядва вложенныхцикла по переменнымI иJсо значениямиот 1 до 10 (блоки33 и 34). В циклахпроверяетсяусловие заполненияячейки поляклеткой корабляm[1].a[i,j]=2 (блок 35), и еслиэто логическоевыражениеистинно, топеременнойrприсваиваетсяназвание файла,содержащегокартинку корабля(блок 37), иначе– пустую картинку(блок 36). Далее,с помощью двухпроцедур Case1происходитпрорисовкаячеек на игровомполе (блоки 38и 39).

Последниедействия в этойпроцедуре –вывод на панельстроки состояниязначений количествавыстрелов ипопаданий (блок40), а также происходитприсваиваниепеременнымследующихзначений: tm1:=Timeи new:=True.

ПроцедураCase1,про которуюбыло сказановыше, выполняетследующиедействия (Приложение2): при обращениик определеннойячейки игровогополя человекаили компьютерапроисходитпрорисовкаячейки специальнойкартинкой, взависимостиот значенияпеременнойr.В процедурепроисходитмножественныйвыбор, по номеруячейки, и выполняетсядействие загрузкирастровогофайла в компонентTSpeedButton(блоки 2 - 401).

После того,как все кораблибыли расставленына игровомполе, программаожидает срабатываниянесколькихсобытий:

  • щелчка левойклавишейманипуляторамышь по ячейкиигрового полякомпьютера;

  • выбора изпункта «Игра»главного менюподпункта«Выход»;

  • выбора изпункта «Помощь»главного менюподпункта «Опрограмме»;

  • выбора изпункта «Помощь»главного менюподпункта«Правила игры»

При описанномпервым событиипроисходитобращение кпроцедуреSpeedButton101Click (Приложение3). В теле процедурысразу проверяетсяпеременнаяt1. Если t1не равна значениюTrue (блок 2), топроцедуразавершает своюработу, иначепроисходитприсвоениепеременнойS имениобъекта игровогополя, по которомупроизводитсящелчок, из имениобъекта удаляетсяподстрока«SpeedButton», оставшийсяномер объектапреобразуетсяв число (блок3). После этогопроверяетсяусловие, делитсяли это числона 10 с остатком(блок 4). Если этотак, то переменнойJ присваиваетсязначение I-90(блок 6), иначеJ=I-100 (блок5). Далее, проверяетсяделимость числаJ на 10 безостатка (блок7). Если это условиевыполняется,то переменнойU присваиваетсязначение 10 (блок9), иначе вычисляетсяостаток отделения переменнойJ на 10 (блок8). Полученноезначение переменнойU проверяетсяс использованиеммноговариантноговыбора, и всоответствиисо значениемпеременнойS присваиваетсяодна из букврусского алфавита,от А до К (блоки10 - 29). Потом проверяетсяусловие, былли щелчок наданной ячейке(блок 30), еслищелчка не было,то осуществляетсяпереход наположительнуюветку алгоритма,в которой, во-первых,осуществляетсявывод в ячейкукартинки,показывающейсделанный ход(блок 31), во-вторых,происходитвывод над игровымполем человекакода произведенногохода (блок 32), ив-третьих, переменнойt1 присваиваетсязначение False,и кнопки подтверждения/ отмены ходастановятсядоступными(блок 33). На этомпроцедуразавершает своюработу (блок34).

При подтверждениисделанногохода, т.е. прищелчке на кнопкеOK, происходитвызов процедурыBitBtn1Click(Приложение4), которая производиттак называемыйвыстрел, и всоответствиис этим, отмечаетнеобходимыеячейки игровыхполей.

После вызовапроцедурыпроисходитприращениепеременнойKL на единицу(блок 2), и проверяетсяячейка игровогополя (блок 3). Еслив ячейке естьклетка корабля,то выводитсясоответствующаякартинка спомощью процедурыCase1 (блок 4),уменьшаетсясчетчик количестваклеток кораблей,и соответствующаяклетка помечаетсякак использованная(значение равно3) (блок 5). Далее,происходитпроверка количества«живых» клетоккораблей. Еслиэто количестворавно нулю(блок 6), то выводитсясообщение«Победа!» (блок7), переменнымP и t1присваиваетсязначение False,кнопки подтверждения/ отмены ходастановятсянеактивными(блок 8), и процедуразавершает своюработу (блок19).

Если количество«живых» клетоккораблей неравно нулю(блок 6), то выводитсясообщение«Попал!» (блок9), и переменнойP присваиваетсялогическоезначение False(блок 10). При этомпроисходитобъединениеэтой веткиалгоритма светкой «Нет»блока условия3 (пустая клетка),в которой выводитсясообщение«Промах» (блок11), соответствующаяячейка заполняетсянеобходимымизображениемс помощью процедурыCase1 (блок 12),ячейка помечается,как использованная(значение равно3), и переменнойP присваиваетсялогическоезначение True(блок 13).

Далее, переменнойt1 присваиваетсялогическоезначение True,вычисляетсярезультативностьS (блок 14). Напанель 2 строкисостояниявыводятсязначения количествавыстрелов,количествапопаданий ирезультативностьигрока (блок15), кнопки подтверждения/ отмены ходастановятсянеактивными(блок 16), и проверяетсязначение переменнойp (блок 17). Еслиэто значениеравно True,то происходитвызов процедурыKomp (блок 18),которая производитход компьютера.

ПроцедураKomp (Приложение5) начинаетсяс двух вложенныхциклов типа«До», в которыхвычисляютсякоординатывыстрела случайнымобразом (блок2). После этогопроверяетсяусловие завершениявнутреннегоцикла (блок 3).Далее происходитмноговариантнаяпроверка координатыпо вертикалиВ1 от 1 до 10, в результатекоторой переменнойS присваиваетсяопределенноезначение, лежащеев промежуткеот А до К (блоки4 - 23).

Выводитсякод хода компьютеранад игровымполем (блок24), и соответствующимобразом заполняетсяячейка игровогополя, переменнойPK присваиваетсянеобходимоелогическоезначение (блоки25 - 29).

Далее, происходитприращениеколичествавыстрелов,вычисляетсярезультативность(S) (блок 30), ина панель 0 строкисостояниявыводятсязначения количествавыстрелов,количествапопаданий, ирезультативность(блок 31).

Потом, проверяетсяусловие завершениявнешнего цикла«До» (блок 32), иесли условиевыполняется,то процедуразаканчиваетсвою работу(блок 33).

При отменесделанногопользователемхода, т.е. прищелчке на кнопкуNO, происходитвызов процедурыBitBtn2Click(Приложение6). В этой процедуреочищаетсяячейка игровогополя с помощьюпроцедуры Case1(блок 2), переменнойt1 присваиваетсялогическоезначение True,и кнопки подтверждения/ отмены ходастановятсянеактивными(блок 3).

В этом жеприложенииприведенапроцедураTimer1Timer(Приложение6), которая основанана невизуальномкомпонентеTimer, и рассчитываетвремя игры.Здесь, есливыполняетсяусловие new=True(блок 2), то напанель 1 строкисостояниявыводитсязначение времениигры (блок 3).

Все процедурынаходится вмодуле Unit1,текст которогоприведен вприложении7.


2.2.2. Реализациясправочнойинформации

Справочнаяинформация(правила игры)реализованас помощью программыHelpDevelopmentStudio.Эта программапозволяетсоздать файлсправочнойинформациидля Windows,используя текстформата RichEditText.В процессеработы этойпрограммысоздается файлпроекта справки*.hmp,который впоследствииможет бытьоткомпилированв файл справки(*.hlp).

В даннойкурсовой работебыл создан файлпроекта справкиmorboy.hmp,который былоткомпилированс помощью программыHelpDevelopmentStudio,MicrosoftHelpWorkShop,входящей всостав BorlandDelphi6.0, и компилятораHcRtf.exeв файл morboy.hlp(рис.6).


2.3. Описаниепользовательскогоинтерфейса


После запускапрограммы наэкран выводитсяосновное окнопрограммы(рис.2). Необходимовызвать главноеменю и выбратьиз пункта «Игра»подпункт «Новая»(рис.3).


Рис.3. Программас открытымглавным меню


После выборапроисходитрасстановкакораблей, иигра начинается(рис.4).


Рис.4. Игра


Игрокупредоставляетсяправо первогохода. Ход осуществляетсяпутем щелчкалевой кнопкоймыши на игровомполе. Послещелчка по клеткеполя на нейпоявляетсяизображениемины (рис.4), иигроку предоставляетсяправо подтвердитьили отменитьход с помощьюкнопок OKи No.После подтвержденияв ячейке появляетсяизображениерезультатахода, а в нижнейлевой частиокна появляетсясообщение орезультате:«Попал» (рис.4)или «Промах!».Если был произведенрезультативныйвыстрел, тоигроку даетсяправо внеочередногохода. В противномслучае правохода передаетсякомпьютеру.Победа присуждаетсяза все потопленныекорабли, и наэтом игразаканчивается(рис.5).

Горячиеклавиши, применяемыепри работепрограммы:

  1. Alt+И– Вызов пункта«Игра» главногоменю

  2. F2 –Новая игра

  3. F10 –Выход в систему

  4. Alt+N– Отмена хода


Рис.5. Победа вигре


Если в процессеигры пользователюнеобходимообратитьсяк правилам, тос помощью пункта«Помощь» главногоменю можновызвать подпункт«Правила игры».В результатепоявится окносправки, показанноена рис.6.


Рис.6. Окносправки


ЗАКЛЮЧЕНИЕ


В результатевыполненияданной курсовойработы былполучен игровойпрограммныйпродукт, названный«Морской бой».Было проведеноисследованиекомпонентовпрограммнойсреды BorlandDelphi6.0, которые использовалисьпри созданииигры.

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

  1. Низкийисскуственныйинтеллект,т.е. ход компьютераосуществляетсяслучайнымобразом, чтоделает маловероятнымпобеду компьютера;

  2. При полномпотоплениикорабля этоникак не отражается;

  3. Невозможностьвозврата нанесколькоходов назад;

  4. Работоспособностьприложениятолько в средеWindows;

  5. Невозможностьручной расстановкикораблей игрока.

Однако, помимонедостатков,есть и достоинствау этого программногопродукта:

  1. Есть возможностьотменить неверносделанный ходс помощью кнопокподтверждения/ отмены;

  2. Созданаинтерактивнаясправка с правиламиигры;

  3. Программныйпродукт малотребователенк системнымресурсам компьютера.Минимальнаяконфигурация:процессор –не ниже Pentium,оперативнаяпамять – нениже 16 Mb,операционнаясистема – Windows95 / 98/ Me/ NT/ 2000 / XP.

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


СПИСОКИСПОЛЬЗОВАННЫХИСТОЧНИКОВ


  1. Журнал КомпьютерПресс, N1,1996

  2. Дворак Дж.350 игр для IBMPC.–С-Пб.:Пергамент,1994, -318с.

  3. Фаронов В.В.Delphi4. Учебный курс.–М.: Нолидж, 1999.-447с.

  4. ДарахвелидзеП.Г., Марков Е.П.Delphi– среда визуальногопрограммирования.–СПб.:BHV-Санкт-Петербург,1996. -352с.

  5. ЕпанешниковА., ЕпанешниковВ. Программированиев среде Delphi2.0. Учебное пособие.В 4-х частях. Ч.1.Описание среды.–М.:ДИАЛОГ-МИФИ,1997. -235с.

  6. ЕпанешниковА., ЕпанешниковВ. Программированиев среде Delphi2.0. Учебное пособие.В 4-х частях. Ч.2.Язык ObjectPascal9.0. –М.:ДИАЛОГ-МИФИ,1997. -319с.

  7. Фаронов В.В.Турбо Паскаль7.0. Начальныйкурс. Учебноепособие. –М.:Нолидж,1997. -616с.

  8. Фаронов В.В.Турбо Паскаль7.0. Практикапрограммирования.Учебное пособие.–М.:Нолидж, 1997.-432с.


38



МИНИСТЕРСТВООБРАЗОВАНИЯРОССИЙСКОЙФЕДЕРАЦИИ

МОСКОВСКИЙГОСУДАРСТВЕННЫЙИНСТИТУТ СТАЛИИ СПЛАВОВ

(ТЕХНОЛОГИЧЕСКИЙУНИВЕРСИТЕТ)

НОВОТРОИЦКИЙФИЛИАЛ

кафедраэкономики иинформатики


КУРСОВАЯРАБОТА

РАЗРАБОТКАПРИЛОЖЕНИЯ“ИГРА – МОРСКОЙБОЙ”


Исполнитель:

МайстренкоЕ.В.

Студентгруппы

ПИ-2000-27

Руководитель:

ПлясуновД.Ю.



Датадопуска к защите:

«__»_______200__г.




Новотроицк

2001


СОДЕРЖАНИЕ


стр.

ВВЕДЕНИЕ………………………………………………………………….

4
1. ПРОГРАММИРОВАНИЕИГР С ИСПОЛЬЗОВАНИЕМВИЗУАЛЬНЫХКОМПОНЕНТОВ……………………………………

6


1.1.

Аналитическийобзор…………………………………………….

6

1.2. Описаниекомпонентов,используемыхпри реализациипрактическойчасти курсовойработы ……..……………………

13



1.2.1.

КомпонентTMainMenu ………………………………….

13


1.2.2.

КомпонентTLabel ……………………………………….

16


1.2.3.

КомпонентTPanel ………………………………………..

18


1.2.4.

КомпонентTBitBtn ………………………………………

19


1.2.5.

КомпонентTSpeedButton ………………………………..

22


1.2.6.

КомпонентTImage ……………………………………….

23


1.2.7.

КомпонентTTimer ……………………………………….

24


1.2.8.

КомпонентTStatusBar …………………………………...

25
2.

РАЗРАБОТКАПРОГРАММЫ………………………………………...

26

2.1.

Постановказадачи………………………………………………..

26

2.2.

Алгоритмреализацииработы……………………………………

26


2.2.1.

Алгоритмреализацииигровой программы…………….

26



2.2.2.

Реализациясправочнойинформации…………………..

33


2.3.

Описаниепользовательскогоинтерфейса………………………

33

ЗАКЛЮЧЕНИЕ……………………………………………………………..

37

СПИСОКИСПОЛЬЗОВАННЫХИСТОЧНИКОВ……………………….

38

ПРИЛОЖЕНИЕ1 …………………………………………………………...

39

ПРИЛОЖЕНИЕ2 …………………………………………………………...

43

ПРИЛОЖЕНИЕ3 …………………………………………………………...

44

ПРИЛОЖЕНИЕ4 …………………………………………………………...

46

ПРИЛОЖЕНИЕ5 …………………………………………………………...

47

ПРИЛОЖЕНИЕ6 …………………...………………………………………

49

ПРИЛОЖЕНИЕ7 …………………………………………………………...

50