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

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



НазваниеПрограмм-игра "Морской бой", с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры
Дата конвертации28.07.2012
Размер68,11 Kb.
ТипРеферат
Программ-игра "Морской бой", с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры


Домашняя работа по программированию за второй семестр Игра «Морской Бой» Выполнил: Макаров В. А. группа: С-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<=длина(st[k]) делать ||если st[k][l]='1' то ||insert('0',st[k],l+1) Вставить после нуля единицу ||one:=истина Значит, в тексте есть единицы ||всё ||inc(l) l:=l+1 ||кцикл ||кцикл ||всё |Вспомогательная функция: Определяет, является ли символ цифрой|Входные данные: с:сим ||Выходные данные: лог ||Внутренние переменные: e:цел fl:лог || ||начало ||fl:=ложь ||d:='0123456789' все цифровые символы ||цикл для e:=1 до 10 делать перебор всех символов цифр ||если c=d[e] то fl:=истина ||кцикл ||Ели символ является цифрой, то функция возвратит истину, ||иначе возвратит ложь ||digs:=fl функция возвращает значение ||всё | Исходный код всей программы:|Домашнее задание на тему "графика" ||Выполнил студент: Макаров Владимир, группа С-26 ||Игра "Морской Бой" ||program SeaWar; ||uses Graph,crt; ||var ||GraphDriver:integer; ||GraphMode:integer; ||ErrorCode:integer; Переменные для инициализации графики ||s_score:string; || ||Все переменные, используемые в программе ||x :integer; ||y :integer; Переменные для хранения координат ||xx :integer; и переменные цикла ||typ :integer; Тип текущего корабля ||xxx :integer; Координаты ||tarx :integer; Координаты прицела и пушки ||fx :integer; Координаты ||fy :integer; ||score :integer; Кол-во очков ||old_score :integer; Прошлое значение кол-ва очков ||mimo :integer; Кол-во промахов ||oldx :integer; Координаты ||oldy :integer; ||crx :integer; ||cr_type :integer; Тип корабля ||flang :integer; С какой стороны плывёт корабль ||croldx :integer; ||cr_ind2 :integer; ||cr_ind:longint; Рабочая переменная ||c:char; Хранение нажатых клавиш ||Флаги ||b :boolean; Флаг нажатия клавиш "стрелок" ||fire :boolean; Стрельба ||swim :boolean; Перемещение ||promah :boolean; Промах ||vzriv :boolean; Взрыв ||const ||Два константных массива точек для хранения координат скал ||trin1:array[1..4] of PointType= ||((x:-70;y:380),(x:60;y:20),(x:150;y:350),(x:-70;y:380)); ||trin2:array[1..4] of PointType= ||((x:670;y:380),(x:560;y:5),(x:500;y:350),(x:670;y:400)); || ||Процедура вывода прицела и пушки на экран ||procedure target(ix:integer;bb:boolean); ||const iy=200; ||begin ||if bb then begin Отображение ||SetColor(green); ||SetFillStyle(SolidFill,green); ||FillEllipse(ix,430,26,100); ||SetColor(lightgreen); ||Line(ix-10,iy,ix+10,iy); ||Line(ix,iy-10,ix,iy+10); ||end else begin Стирание ||SetFillStyle(SolidFill,blue); ||SetColor(blue); ||FillEllipse(ix,430,26,100); ||SetColor(blue); ||Line(ix-10,iy,ix+10,iy); ||Line(ix,iy-10,ix,iy+10); ||end; ||end; || ||Процедура вывода на экран различных кораблей ||procedure sheep(ix:integer;tip:integer;bb:boolean); ||const ||iy=200; ||var ||col,col2:integer; ||sp1,sp2,sp3:array[1..5] of PointType; ||begin ||col:=brown; ||col2:=yellow; ||if not bb then begin Если bb=true, то отображение корабля ||col:=blue; Иначе стирание корабля ||col2:=blue; ||end; ||Координаты кораблей, относительно центральной точки ix ||sp1[1].x:=ix-40; ||sp1[1].y:=190; ||sp1[2].x:=ix+40; ||sp1[2].y:=190; ||sp1[3].x:=ix+20; ||sp1[3].y:=215; ||sp1[4].x:=ix-20; ||sp1[4].y:=215; ||sp1[5].x:=sp1[1].x; ||sp1[5].y:=sp1[1].y; ||sp2[1].x:=ix-30; ||sp2[1].y:=190; ||sp2[2].x:=ix+30; ||sp2[2].y:=190; ||sp2[3].x:=ix+15; ||sp2[3].y:=210; ||sp2[4].x:=ix-15; ||sp2[4].y:=210; ||sp2[5].x:=sp2[1].x; ||sp2[5].y:=sp2[1].y; ||sp3[1].x:=ix-20; ||sp3[1].y:=195; ||sp3[2].x:=ix+20; ||sp3[2].y:=195; ||sp3[3].x:=ix+10; ||sp3[3].y:=205; ||sp3[4].x:=ix-10; ||sp3[4].y:=205; ||sp3[5].x:=sp3[1].x; ||sp3[5].y:=sp3[1].y; ||Отображение одного из трёх типов кораблей ||case tip of ||3: begin ||SetColor(col); ||SetFillStyle(SolidFill,col); ||FillPoly(5,sp1); ||Rectangle(ix-18,iy-30,ix+18,iy-2); ||SetColor(col2); ||SetFillStyle(SolidFill,col2); ||Rectangle(ix-10,iy-25,ix+10,iy-15); ||FillEllipse(ix-18,iy,5,5); ||FillEllipse(ix+18,iy,5,5); ||FillEllipse(ix,iy,5,5); ||end; ||2: begin ||SetColor(col); ||SetFillStyle(SolidFill,col); ||FillPoly(5,sp2); ||line(ix,200,ix,170); ||line(ix-5,175,ix+5,175); ||line(ix-10,180,ix+10,180); ||end; ||1: begin ||SetColor(col); ||SetFillStyle(SolidFill,col); ||FillPoly(5,sp3); ||line(ix,200,ix,185); ||line(ix-5,185,ix+5,185); ||line(ix-10,190,ix+10,190); ||end; ||end; ||end; || ||Начало главной процедуры программы ||begin ||x:=100; ||xx:=0; ||xxx:=0; ||oldx:=0; ||b:=false; ||tarx:=320; ||fire:=false; инициализация переменных ||crx:=0; ||croldx:=800; ||score:=0; ||old_score:=0; ||mimo:=0; ||promah:=false; ||vzriv:=false; || ||Переключение в графический режим ||GraphDriver:=Detect; ||InitGraph(GraphDriver,GraphMode,''); ||if ErrorCode=grok then begin ||SetColor(green); ||SetBKColor(black); ||end else begin ||Writeln('ERROR!'); ||exit; ||end; || ||SetColor(white); ||OutText('Vipolnil: Makarov Vladimir'); ||OutTextXY(0,10,'Group: C-26'); ||SetTextJustify(CenterText,CenterText); ||OutTextXY(640 div 2,480 div 2,'Press 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 xx<150 then begin ||Рисование взрыва ||Sound(Random(100)); ||swim:=false; ||SetColor(red); ||SetColor(red); ||SetFillStyle(SolidFill,red); ||FillEllipse(xxx,200,21*typ,17*typ); ||inc(xx); ||end else begin ||NoSound; ||swim:=false; ||SetColor(blue); ||SetFillStyle(SolidFill,blue); ||FillEllipse(xxx,200,21*typ,17*typ); ||xx:=0; ||vzriv:=false; ||end; ||end; || ||Обработка сообщения "Перемещение" ||if swim then begin ||if cr_ind<400 then begin ||Sheep(crx,cr_type,false); ||if promah then promah:=false; ||end else begin ||if cr_ind mod cr_type*5=0 then begin ||if promah then begin ||if flang=0 then flang:=1 ||else flang:=0; ||promah:=false; ||end; ||if flang=0 then begin ||if crx=485 then begin ||inc(cr_ind2); ||if cr_ind2<3 then Sheep(crx,cr_type,true) ||else begin ||Sheep(crx,cr_type,false); ||swim:=false; ||end; ||end else begin ||crx:=crx+1; ||Sheep(croldx,cr_type,false); ||Sheep(crx,cr_type,true); ||croldx:=crx; ||end; ||end else begin ||if crx=150 then begin ||inc(cr_ind2); ||if cr_ind2<3 then Sheep(crx,cr_type,true) ||else begin ||Sheep(crx,cr_type,false); ||swim:=false; ||end; ||end else begin ||crx:=crx-1; ||Sheep(croldx,cr_type,false); ||Sheep(crx,cr_type,true); ||croldx:=crx; ||end; ||end; ||end; ||end; ||inc(cr_ind); ||end else begin ||Если корабля нет на экране, то случайным методом ||выбирается новый корабль ||Randomize; ||croldx:=800; ||cr_ind2:=0; ||if random(2)=0 then begin ||crx:=150; ||flang:=0; ||end else begin ||crx:=485; ||flang:=1; ||end; ||swim:=true; ||cr_ind:=0; ||Randomize; ||cr_type:=random(3)+1; ||end; || ||Обработка сообщения "Выстрел" ||и рисование полёта снаряда ||if fire then begin ||x:=x-10; ||Sound(x); ||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); ||fy:=fy-2; ||SetColor(lightred); ||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); ||if fy<200 then begin ||if (getpixel(fx-1,fy-3)=brown)or(getpixel(fx+1,fy-3)=brown) then begin ||old_score:=score; ||inc(score); ||vzriv:=true; ||end else begin ||Обработка сообщения "Промах" ||promah:=true; ||inc(mimo); ||if mimo>5 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. |




Нажми чтобы узнать.

Похожие:

Программ-игра \"Морской бой\", с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры iconКроссворды «морской бой»
Такой квадрат известен вам по игре «морской бой». Ответы записывайте сверху вниз. Ключевое слово записывается по горизонтали. Начало...
Программ-игра \"Морской бой\", с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры iconДокументи
1. /файл-сценарий/Морской бой реализован (фотографии).docx
2. /файл-сценарий/интеллектуальная...

Программ-игра \"Морской бой\", с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры iconИнтеллектуальная игра «морской бой»
Игровое поле – квадрат, состоящий из 10 строк, обозначенных числами от 1 до 10, и 10 столбцов, обозначенных буквами от а до К. Координаты...
Программ-игра \"Морской бой\", с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры iconДизайн документ
Игра представляет собой 2D action с возможностью развития персонажа. В игре участвуют от 1 до 4 человек. Игра идет на различных локациях...
Программ-игра \"Морской бой\", с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры iconДизайн документ
Игра представляет собой 2D action с возможностью развития персонажа. В игре участвуют от 1 до 4 человек. Игра идет на различных локациях...
Программ-игра \"Морской бой\", с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры iconДизайн документ
Игра представляет собой 2D action с возможностью развития персонажа. В игре участвуют от 1 до 4 человек. Игра идет на различных локациях...
Программ-игра \"Морской бой\", с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры iconТехническое задание Задача Описание
Парашют игра в которой вам предстоит защищать базу, управляя движением башни турели. Задача игрока с помощью турели отстреливать...
Программ-игра \"Морской бой\", с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры icon«Морской бой» Интеллектуальная игра среди учащихся 9-х классов Оборудование
Оборудование: лист ватмана с полем для игры. Поле представляет собой квадрат 8х8, клетки зарыты листочками бумаги. На 16 клетках...
Программ-игра \"Морской бой\", с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры iconКурсовая работа по курсу "Операционные системы" Игра «Smashers»
Проект представляет собой игру в жанре 2D action с возможностью развития персонажа. В игре участвуют от 1 до 4 человек. Игра идет...
Программ-игра \"Морской бой\", с использованием анимированных графических объектов и возможностью управлять их движением с помощью клавиатуры iconРазработка игровой программы Морской бой

Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©rushkolnik.ru 2000-2015
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы