МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Программ-игра «Морской бой», с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры

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

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

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

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

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

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

    группа: С-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. |


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.