БОЛЬШАЯ НАУЧНАЯ БИБЛИОТЕКА  
рефераты
Добро пожаловать на сайт Большой Научной Библиотеки! рефераты
рефераты
Меню
Главная
Налоги
Начертательная геометрия
Оккультизм и уфология
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование и комп-ры
Радиоэлектроника
Региональная экономика
Режущий инструмент
Реклама и PR
Ресторанно-гостиничный бизнес бытовое обслуживан
Римское право
Русский язык культура речи
РЦБ ценные бумаги
САПР
Сексология
Семейное право
Социология
Страховое право
Строительство архитектура
Таможенное право
Теория государства и права
Технология
Таможенная система
Транспорт
Физика и энергетика
Философия
Финансы деньги и налоги
Физкультура и спорт
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика и эстетика
Сочинения по литературе и русскому языку
Рефераты по теории государства и права
Рефераты по теории организации
Рефераты по теплотехнике
Рефераты по товароведению
Рефераты по трудовому праву
Рефераты по туризму
Рефераты по уголовному праву и процессу
Рефераты по управлению
Рефераты по менеджменту
Рефераты по металлургии
Рефераты по муниципальному праву
Биографии
Рефераты по психологии
Рефераты по риторике
Рефераты по статистике
Рефераты по страхованию
Рефераты по схемотехнике
Рефераты по науке и технике
Рефераты по кулинарии
Рефераты по культурологии
Рефераты по зарубежной литературе
Рефераты по логике
Рефераты по логистике
Рефераты по маркетингу
Рефераты по международному публичному праву
Рефераты по международному частному праву
Рефераты по международным отношениям
Рефераты по культуре и искусству
Рефераты по кредитованию
Рефераты по естествознанию
Рефераты по истории техники
Рефераты по журналистике
Рефераты по зоологии
Рефераты по инвестициям
Рефераты по информатике
Исторические личности
Рефераты по кибернетике
Рефераты по коммуникации и связи
Рефераты по косметологии
Рефераты по криминалистике
Рефераты по криминологии
Новые или неперечисленные
Без категории

Программ-игра «Морской бой», с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры

Программ-игра «Морской бой», с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры

Домашняя работа

по программированию

за второй семестр

Игра «Морской Бой»

Выполнил: Макаров В. А.

группа: С-26

Игра «Морской Бой»

Требуется:

Разработать программу-игру «Морской бой», с использованием анимированных

графических объектов и возможностью управлять их движением с помощью

клавиатуры.

Эскиз:

[pic]

Аномалии:

|Аномалия |Действие программы |

|1) Произошла ошибка инициализации|Вывод сообщения: |

|графики |«InitGraph ERROR!» |

|2) При игре было допущено более |Вывод сообщения |

|пяти промахов. Проигрыш. |«GAME OVER» |

Внешняя спецификация:

Вход:

|Vipolnil: Makarov Vladimir |

|Group: C-26 |

| |

| |

| |

|Press to start play game! |

| |

| |

| |

Выход при проигрыше:

| |

| |

| |

| |

|GAME OVER |

| |

| |

| |

Метод:

Описание:

Во время игры на экране изображена водная поверхность и две скалы по

бокам. Время от времени из-за скал выплывают различные корабли, которые

движутся вдоль горизонта к противоположенной скале. Существует три типа

кораблей: маленький, средний и большой. Тип корабля всегда выбирается

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

корабля: маленький самый быстрый, остальные соответственно обладают более

низкой скоростью. Цель игрока состоит в том, чтобы с помощью пушки и

прицела подбить как можно большое количество кораблей и не промахиваться.

Количество подбитых кораблей (scope) показывается в нижнем левом углу

экрана. Игрок должен нацеливать пушку влево или вправо и стрелять по

возможности на опережение, так как снаряд вылетающий из пушки обладает

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

разворачивается и уплывает в обратную сторону. Если игрок совершил более

пяти промахов, то он проигрывает и выходит из игры.

Прицеливание осуществляется с помощью стрелок (вправо и влево) на

клавиатуре, пробел – стрельба и escape – выход.

Основной метод:

В основе работы программы лежит главный зацикленный цикл, выход из

которого осуществляется только при выходе или при проигрыше. В цикле

выполняются действия, зависящие от состояния флагов, так как каждому

событию в программе соответствует свой флаг. Так же в этом цикле

отслеживаются нажатия определённых клавиш. Цикл прокручивается с, заранее

определённой и постоянной, временной задержкой.

Когда какой-нибудь флаг принимает истинное значение, в цикле

проделывается соответствующее ему действие, после чего флаг сразу

сбрасывается в положение ложь.

Рисование всех двигающихся объектов производится для удобства в отдельных

процедурах. В качестве параметров туда передаётся координата по оси или x

или y, так же туда передаётся флаг, указывающий на то – рисовать объект или

стирать. Под стиранием объекта понимается его рисование цветом фона.

Движение всех графических объектов в программе осуществляется стандартным

методом: сначала рисуется объект, а после временной задержки он рисуется на

том же месте цветом фона (стирается) и рисуется в новом месте.

Скорости всех двигающихся в программе объектов различны:

Vснаряда > Vкорабля №1 > Vкорабля №2 > Vкорабля №3

Временная задержка во всей программе постоянная и используется один раз

за цикл. Если один проход цикла назвать тактом, то разность скоростей

объектов реализована за счёт того, что каждый объект перемещается на

единицу расстояния не за каждый такт, а за каждый n-ный такт, а n

определено для каждого объекта по-разному. Чем меньше n, тем быстрее

скорость. В данной программе все скорости постоянны.

Алгоритм:

Procedure target (ix: integer; bb: boolean)

|Входные данные: ix:цел bb:лог |

|Внутренние постоянные переменные: iy=200 |

| |

|начало |

|если bb то {Отображение} |

|Установить цвет(green) |

|Установить тип заливки(SolidFill,green) |

|Нарисовать закрашенный эллипс(ix,430,26,100) |

|Выбрать цвет(lightgreen) |

|Нарисовать линию(ix-10,iy,ix+10,iy) |

|Нарисовать линию(ix,iy-10,ix,iy+10) |

|иначе {Стирание} |

|Установить тип заливки(SolidFill,blue) |

|Установить цвет(blue) |

|Нарисовать закрашенный эллипс( (ix,430,26,100) |

|Установить цвет(blue) |

|Нарисовать линию(ix-10,iy,ix+10,iy) |

|Нарисовать линию(ix,iy-10,ix,iy+10) |

|всё |

|конец |

Часть 2: Поиск в тексте единиц и вставка после них нулей

|Входные данные: var st:мас:стр r:цел var one:лог |

|Выходные данные: rez:масс:стр iz:цел |

|Внутренние переменные: k,l:цел |

| |

|начало |

|one:=ложь |

|цикл для k:=1 до r делать |

|l:=1 |

|цикл пока l to start play game!'); |

|c:=ReadKey; |

| |

|{Подготовка экрана к игре} |

|ClearDevice; |

|SetBkColor(blue); |

|SetColor(lightgray); |

|SetFillStyle(SolidFill,lightgray); |

|FillPoly(4,trin1); |

|FillPoly(4,trin2); |

|SetColor(black); |

|Target(320,true); |

| |

|{Главный цикл обработки различных сообщений и событий} |

|repeat |

|repeat |

| |

|{Обработка сообщения "Взрыв корабля"} |

|if vzriv then begin |

|if xx=0 then begin |

|typ:=cr_type; |

|xxx:=crx; |

|end; |

|if xx5 then begin |

|{Выход из игры в случае проигрыша} |

|ClearDevice; |

|SetColor(white); |

|SetBkColor(black); |

|SetTextJustify(CenterText,CenterText); |

|OutTextXY(640 div 2,480 div 2,'GAME OVER!'); |

|Sound(200); |

|Delay(10000); |

|NoSound; |

|c:=ReadKey; |

|exit; |

|end; |

|end; |

|fire:=false; |

|NoSound; |

|SetColor(blue); |

|line(fx+1,fy-2,fx+1,fy+2); |

|line(fx-1,fy-2,fx-1,fy+2); |

|line(fx,fy-2,fx,fy+2); |

|end; |

|end; |

|if b then begin |

|{Перерисовка прицела и пушки в случае нажатия клавиш "стрелок"} |

|target(oldx,false); |

|target(tarx,true); |

|b:=false; |

|end else target(tarx,true); |

|{В случае попадания, производится начисление очков и вывод их на экран} |

|if old_score<>score then begin |

|SetColor(blue); |

|SetTextJustify(LeftText,BottomText); |

|Str(old_score,s_score); |

|OutTextXY(70,460,s_score); |

|old_score:=score; |

|end; |

|SetColor(white); |

|SetTextJustify(LeftText,BottomText); |

|OutTextXY(20,460,'Score'); |

|Str(score,s_score); |

|OutTextXY(70,460,s_score); |

|delay(150); {Временная задержка главного цикла} |

|until keypressed; |

|{Обработка нажатия клавиш} |

|c:=readkey; |

|case c of |

|#75: begin {влево} |

|if tarx>220 then begin |

|oldx:=tarx; |

|tarx:=tarx-5; |

|b:=true; |

|end; |

|end; |

|#77: begin {вправо} |

|if tarx<420 then begin |

|oldx:=tarx; |

|tarx:=tarx+5; |

|b:=true; |

|end; |

|end; |

|#32: begin {пробел "Выстрел"} |

|if not fire then begin |

|x:=800; |

|fire:=true; |

|fx:=tarx; |

|fy:=380; |

|end; |

|end; |

|#27: begin {esc "Выход"} |

|NoSound; |

|exit; |

|end; |

|end; |

|until false; {Зацикливание главного цикла обработки сообщений} |

|end. |





17.06.2012
Большое обновление Большой Научной Библиотеки  рефераты
12.06.2012
Конкурс в самом разгаре не пропустите Новости  рефераты
08.06.2012
Мы проводим опрос, а также небольшой конкурс  рефераты
05.06.2012
Сена дизайна и структуры сайта научной библиотеки  рефераты
04.06.2012
Переезд на новый хостинг  рефераты
30.05.2012
Работа над улучшением структуры сайта научной библиотеки  рефераты
27.05.2012
Работа над новым дизайном сайта библиотеки  рефераты

рефераты
©2011