Разработка алгоритмов и программ
Краткое сожержание материала:
Размещено на
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ТАГАНРОГСКИЙ ГОСУДАРСТВЕННЫЙ РАДИОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра вычислительной техники
ОТЧЕТ
о выполнении практических занятий
по курсу
Технология программирования
1. Практическое задание 1. Разработка алгоритма и программы на
основе процедурного подхода
Цель работы: Ознакомиться с принципами разработки алгоритмов и программ на основе процедурного (функционального) подхода с использованием рекомендаций структурного программирования. Разработать программу на основе предлагаемого базового алгоритма в соответствии с заданным вариантом.
Содержание задания:
Разработать алгоритм и программу игры на основе процедурного (функционального) подхода с использованием рекомендаций структурного программирования. Алгоритм представить в виде блок-схем, построенных методом последовательной детализации. Реализация программы - Borland Pascal 7.0 для MS DOS, графический режим.
Все варианты имеют единое базовое содержание.
Правила игры. В игре предлагается поразить заданное количество мишеней из пушки (ружья, лука, вертолета и т.п). Мишени появляются последовательно по одной в разных точках заданной области на некоторый (одинаковый) интервал времени.
Стрельба ведется снарядами (пулями, стрелами, ракетами и т.д.), полет которых должен изображаться, но в полете может находиться только один (одна) из них.
Для управления пушкой (ружьем, …) используются клавиши наведения (“к1”и ”к2”) и выстрела “к3”, на каждую мишень можно истратить несколько снарядов (пуль, стрел, ракет и т.п.).
Если мишень сбита одним из первых выстрелов, то это приносит игроку больше очков, сэкономленные снаряды игнорируются или сохраняются (см. варианты).
Условие задания (Вариант 18-9=9):
№ |
Интерфейс |
Пояснения |
к1, к2, к3 |
9 |
Размещено на
Стрельба ведется из лука, который находится внизу, в центре экрана, и может поворачиваться влево-вправо. Мишени появляются в верхней части экрана у левой или правой его стороны, всего в игре мишеней - 20. Стрел на мишень - 1, время на наведение -5 сек. Сэкономленные стрелы -дополнительные очки. *) При нажатой Ctrl - направление стрельбы меняется вдвое быстрее. |
“” “” “” |
Интерфейс программы (рисунок):
Размещено на
Интерфейс программы:
Алгоритм задачи, разработанный на основе базового алгоритма (его блок-схемы) находится в файле Ris_1.vsd.
Текст программы (STRELA.PAS):
program Strela; {Вариант 18-9=9}
uses Crt,Graph,Dostimer;
const LukX=320; LukY=475; {Координаты центра дуги лука}
fi1=350; fi2=190; {Угол дуги лука: начало дуги - fi1, конец - fi2}
RadL=25; {Радиус дуги лука}
RadM=14; {Радиус мишени}
MishenNum=20; {Число мишеней}
Ctrl=$0004; {Для определения нажатия клавиши Ctrl (ускорение стрелы)}
label Play_again; {Метка возврата к началу по окончании игры}
var Score:integer; {Счётчик очков}
MishenX,MishenY:integer; {Координаты мишени}
Device,Mode:integer; {Для граф. режима}
i:integer; {Кол-во появившихся мишеней}
Left_Right:byte; {Определяет положение мишени - слева, или справа}
stX,stY,stX1,stY1:integer; {Координаты стрелы}
So:integer; {Счётчик отклонения стрелы}
Ugol:real; {Угол наклона стрелы}
Key:char; {Клавиша управления стрелой}
Time:integer; {Используется таймером - время наведения - 5 секунд}
Num:String; {Промежуточная переменная для вывода цифр в граф. режиме}
begin
Play_again:{Метка возврата к началу по окончанию игры}
Randomize; {Для генерир. случайных чисел}
Device:=Detect;
Mode:=Detect;
InitGraph (Device,Mode,'D:\tp\BGI'); {Инициализ. граф. режима}
Score:=0; {Очки}
Time:=5; {Время стрельбы на одну мишень}
i:=0; {Счётчик оставшихся мишеней}
while i<MishenNum do begin {Общий цикл стрельбы по очередной мишени}
i:=i+1; {Увеличить счётчик оставшихся мишеней}
ClearDevice; {Очистить экран}
MishenY:=14+(Random(106)); {Верт. коорд. случайная}
Left_Right:=random(2); {Положение мишени: слева, или справа}
case Left_Right of
0: MishenX:=15;
1: MishenX:=625;
end;
{Рисование мишени}
SetColor (Yellow);
Circle (MishenX,MishenY,RadM);
Circle (MishenX,MishenY,RadM-4);
SetFillStyle (1,Green);
FloodFill (MishenX+9,MishenY+9,Yellow);
{Рисование лука}
SetColor (Green);
Arc (LukX,LukY,fi1,fi2,RadL);
Arc (LukX,LukY,fi1,fi2,RadL-7);
Line (296,479,301,479);
Line (338,479,345,479);
So:=0; {Счётчик отклонения стрелы}
Ugol:=1.55; {Угол наклона стрелы}
stX:=320; stY:=450; stX1:=320; stY1:=410; {Начальные координаты стрелы}
SetColor (White);
Line (stX,stY,stX1,stY1); {Рисование стрелы}
StartTimer (Time); {5 секунд}
while keypressed do key:=readkey; {Очистка буфера клавиатуры}
while isTimer0=false do begin {Цикл стрельбы по мишени}
{Оставшееся время}
SetColor (White);
OutTextXY (5,450,'Time:');
Str (tim_tic/meml[0:$46c],Num); {Расчёт оставшегося времени}
SetFillStyle (1,Black);
Bar (45,448,56,457); {Закрасить предыдущее значение времени}
SetColor (LightRed);
OutTextXY (48,450,Num[8]); {Отобразить оставшееся время}
{Оставшиеся мишени}
SetColor (White);
OutTextXY (5,460,'Remained:');
Str (MishenNum-i,Num);
SetColor (LightGreen);
OutTextXY (79,460,Num);
{Очки}
SetColor (White);
OutTextXY (5,470,'Score:');
Str (Score,Num);
SetColor (LightCyan);
OutTextXY (56,470,Num);
{Выход из цикла, если координаты стрелы вышли за пределы экрана}
if (stX>640) or (stX<0) or (stY<0) then Break;
if keypressed then begin
if readkey=#0 then key:=readkey; {Нажатие клавиши только}
case key of {с расширенным кодом}
#75: begin {Поворот влево}
if So>-48 then begin
SetColor (Black); {Стереть}
Line (stX,stY,stX1,stY1); {стрелу с предыдущими координатами}
Dec (So);
Ugol:=1.55-So*0.033;
stX1:=stX+Trunc(40*cos(Ugol));
stY1:=stY-Trunc(40*sin(Ugol));
SetColor (White); {Рисование}
Line (stX,stY,stX1,stY1); {стрелы с новыми координатами}
{Рисование заново лука}
SetColor (Green);
Arc (LukX,LukY,fi1,fi2,RadL);
Arc (LukX,LukY,fi1,fi2,RadL-7);
Line (296,479,301,479);
Line (338,479,345,479);
end;
end;
#77: begin {Поворот вправо}
if So<47 then begin
SetColor(Black); {Стереть}
Line (stX,stY,stX1,stY1); {стрелу с предыдущими координатами}
Inc (So);
Ugol:=1.55-So*0.033;
stX1:=stX+Trunc(40*cos(Ugol));
stY1:=stY-Trunc(40*sin(Ugol));
SetColor(White); {Рисование}
Line (stX,stY,stX1,stY1); {линии с новыми координатами}
{Рисование заново лука}
SetColor (Green);
Разработка алгоритмов и программ решения алгебраических задач численными методами
Создание схем алгоритмов и составление программы на языке Pascal для вычисления значений заданных функций. Сущность и порядок нахождения значения опре...
Структурное программирование. Алгоритмы программ
Рассмотрены современные понятия теории и практики структурного программирования в плане создания алгоритмов программ. Подробно описаны конструкции стр...
Разработка и отладка линейных алгоритмов и программ. Разработка программ по вычислению значения функций согласно вариантам
Приемы работы с инструментальной средой программирования С++. Кодирование арифметических и логических выражений с использованием стандартных библиотеч...
Разработка справочно-информационной системы "Справочник по оборудованию"
Использование бинарных деревьев для поиска данных. Схемы алгоритмов работы с бинарным деревом. Проектирование алгоритмов и программ. Структура програм...
Основы программирования и алгоритмизации
Разработка простейших линейных алгоритмов (составление логических выражений), программ с ветвлениями, циклических программ и составление их блок-схем....