Министерство
науки и высшего образования Российской Федерации
Федеральное
государственное автономное образовательное учреждение высшего образования
«Уральский
федеральный университет имени первого Президента России Б.Н. Ельцина»
Пояснительная
записка
«Разработка
проекта в среде PascalABC.Net»
Дисциплина
Информатика
Дата сдачи __________________
Студент: Николаева Е. М.
Группа: СТ-170015
Вариант __
Преподаватель: Карманова М. М.
|
Спецификация
(10)
|
|
|
Логическая
(математическая) модель (10)
|
|
|
Блок-схемы
(20)
|
|
|
Программа
(35 /25)
|
|
|
Срок
сдачи (10)
|
|
|
Защита
(15)
|
|
|
Итого (100)
_________________
Итого (30)
_________________
|
|
Екатеринбург
2019
Оглавление
ТЕХНИЧЕСКОЕ ЗАДАНИЕ. 3
1. ПОСТАНОВКА ЗАДАЧИ.. 5
2.СПЕЦИФИКАЦИЯ.. 6
2.1. Словесный алгоритм
программы.. 6
2.2. Краткое описание
подпрограмм.. 7
2.3. Структура данных. 9
2.4. Логическая модель. 10
3 ЛИСТИНГ ПРОГРАММЫ.. 12
4. БЛОК-СХЕМЫ.. 18
Задание.
Вариант 11.
1.
Программа должна работать под управлением
меню, состоящего, например, из 5 пунктов:
- О
программе ‑ О программе
- Ввод
исходных данных ‑ 1 уровень сложности
- Проведение
расчета или ‑ 2 уровень сложности
- Построение
графика ‑ 3 уровень сложности
- Выход ‑
Выход
2.
Программа должна быть защищена от любых
некорректных действий пользователя.
3.
В случае расчета значений функции
программа должна работать с любыми значениями аргумента из области определения
данной функции.
4.
При любых значениях исходных данных
рисунок (график) должен составлять 70 % площади экрана.
5.
На свободном поле экрана должна
располагаться сопроводительная информация для пользователя (способы управления
и прерывания программы, счёт – для графических игр)
6.
При расчете значений функции обязательно
наличие заголовка функции, расположенного над графиком (текста задания,
расположенного над рисунком), координатной сетки, минимального и максимального
значений аргумента и значений функции в этом интервале.
7.
К программе должна прилагаться пояснительная
записка, содержащая:
- Титульный
лист
- Техническое
задание
-
Спецификацию, содержащую математическую
или логическую модель решаемой задачи, графическое решение задачи, словесное
описание режимов управления программой, описание входных и выходных параметров
программы, возможные ошибки пользователя при работе с программой
-
Блок-схемы алгоритма решения поставленной
задачи с использованием технологии последовательной детализации. Блок–схема
каждого модуля должна начинаться с названия модуля и описания его входных и
выходных параметров
-
Листинг (текст программ) всех модулей
Небрежно оформленные
работы к рассмотрению не принимаются: не допускаются сокращения слов,
графическая часть пояснительной записки должна быть распечатана на принтере или
оформлена с помощью карандаша и линейки, текст всей пояснительной
записки пишется на одной стороне листа формата А4.
Задание. Вариант 11.
В нижней части игрового поля движутся платформы поезда. В верхней
части игрового поля располагаются два «подъемных крана, держащих элементы дома».
Нажатие клавиши ENTER начинает движение элемента дома вниз. Переключение между
«кранами» осуществляется нажатием клавиши TAB.
Цель игры – необходимо, как можно больше собрать домов. В игре три
уровня сложности, отличающиеся скоростью движения платформ поезда.
Необходимо
создать меню для выбора уровня вида:
1
уровень
2
уровень
3
уровень
О
программе
Выход
Для
выполнения проекта необходимо реализовать следующие задачи:
-
Реализовать «движение домов» по нажатию
клавиши ENTER.
-
Реализовать переключение между «кранами» c
помощью клавиши TAB.
-
Организовать подсчет пойманных домов.
-
Организовать переход между пунктами меню.
-
Организовать выход из программы.
Краткая
характеристика программы:
1.
Программа состоит из одного файла, имя
файла: GAME11.pas,
объем файла 23 Кб.
2.
Автор: Николаева Е. М., студент группы:
Ст-170015
3.
Дата создания: 21 апреля 2018
4.
Программа разработана в среде Turbo Pascal
7.0
5.
Минимальные требования к системе:
- Операционная
система Windows
95/98/ME/XP/Win7.
- Среда
программирования Turbo Pascal.
- Клавиатура.
После
запуска программы на экране появляется меню, состоящее их следующих пунктов:
1 уровень
2 уровень
3 уровень
О программе
Выход
Перемещение
по пунктам осуществляется с помощью клавиш ВВЕРХ и ВНИЗ, при выборе нужного
пункта нажать клавишу ENTER. Активный пункт отображается зеленым цветом,
неактивный – белым.
Вывод
меню на экран и управление пунктами меню реализуется в главном модуле программы
с помощью переменных:
-
a
– символьная переменная, считывающая нажатую клавишу;
-
k
– целое положительное число, хранящее номер активного пункта меню.
Описание
пунктов меню
Название пункта
|
Описание
|
1 уровень
|
Запускается процедура
игры с исходными данными для 1-го уровня (скорость движения поезда)
|
2 уровень
|
Запускается процедура
игры с исходными данными для 2-го уровня (скорость движения поезда)
|
3 уровень
|
Запускается процедура
игры с исходными данными для 3-го уровня (скорость движения поезда)
|
О программе
|
На экране отображается
сообщение, которое дублирует титульный лист. После нажатия на клавишу ESCAPE,
программа возвращается в меню
|
Выход
|
Программа завершает
работу
|
В
программе используются пользовательские подпрограммы:
-
procedure menu(k:word); –
процедура, очищает экран и выводит меню;
-
procedure platform(x:integer; color:byte); –
процедура, рисует платформу длиной 200,белым цветом;
-
procedure train(x:integer; color:byte); –
процедура, рисует пять платформ образующих поезд;
-
procedure kran(x:integer; color:byte); –
процедура, рисует два крана цветов в верхней части игрового поля, переключение
осуществляется клавишей Tab;
-
procedure dom
(x,
y)
– процедура, рисует два домика на обоих кранах;
-
function complete(d,t)
– функция запускает проверку условия попадания дома на платформу. Если дом упал
и его левая координата, а больше левой координаты платформы, а правая
координата b соответственно меньше
правой координаты платформы – условие выполнено и пользователю удалось
«поймать» дом на поезд;
-
procedure play
– процедура, организует движение домов вниз по нажатию клавиши ENTER,
(дом, выбранный пользователем окрашен бордовым), скорость движения поезда
согласно выбранному уровню, считает количество пойманных домов.
Для вывода на экран меню используется процедуры с повторяющимся
выводами массива меню.
Клавиши используются как при работе в меню, так и при выполнении
процедуры игры. После прохождения или проигрыша уровня игры происходит переход
в меню по нажатию клавиши ESCAPE для продолжения работы с программой.
Для перемещения по меню используется оператор readkey, для анализа
нажатой клавиши оператор case. После анализа нажатия кнопки выполняются определенные действия с
переменной, используемой для выбора пункта меню (k).
Для работы необходимо включить графический модуль (uses graph), и настроить параметры
режима для этого используется встроенная процедура initgraph.
Для организации движения поезда и домов используются процедуры
рисование домов, поезда, и стирание домов после попадания на поезд.
Для задержки движения используется оператор delay.
Для считывания кода клавиши используется команда readkey. С помощью
оператора case производится анализ и выполнение соответствующих перерасчетов
координат для рисования поезда и домов.
В программе используются только клавиши ВВЕРХ, ВНИЗ, ENTER, TAB, ESCAPE. На другие клавиши
программа не реагирует.
В программе используются переменные следующих типов:
-
для организации счетчика и
циклов используются целочисленные положительные переменные типа word; (i,k,p,c:word), а также переменные логического
типа (d1,d2,q: boolean) . Переменная q используется для
возвращения в меню, переменные d1, d2 используются в режиме игры.
-
для рисования графических объектов
необходимо указать координаты, которые должны быть целочисленными и
неотрицательными, но диапазон типа byte маленький поэтому используем тип integer (x,y,t,a,b : integer);
-
для инициализации графического
режима используют процедуру initgraph (gd,gm, ‘
‘); где gd – тип
графического драйвера, gm – тип графического режима, это переменные целочисленного типа integer (gm,gd:integer);
-
для считывания кода символа
используется команду readkey, считываемую клавишу сохраняем как переменную типа – char (а:char);
-
массив заполнен текстом
(пункты меню) – строковыми элементами, поэтому массив типа – string (m:array [1..5] of string)
В различных подпрограммах также используются некоторые локальные
дополнительные переменные.
В программе используется константа для массива меню:
Const m:array [1..5] of string[11]=('Уровень 1','Уровень 2','Уровень 3','О программе','Выход');
На схеме
представлена общая логическая модель работы программы
На схеме представлена упрощенная логическая
модель работы пункта Уровень 1
Program
Game11;
Uses graph,crt;
const
m:array
[1..5] of string[11]=('Уровень
1','Уровень 2','Уровень 3','О
программе','Выход');
var gd,gm,kr:integer;
c:byte;
d1,d2,q:boolean;
i,k:word;
a:char;
procedure
menu(k:word);
begin
clrscr;
for i:=1 to 5 do
begin
if i=k then textcolor(2)
else textcolor(7);
gotoxy(36,11+i);
write(m[i]);
end;
end;
procedure
platform(x:integer; color:byte);
begin
setcolor(color);
rectangle(x,420,x+200,440);
circle(x+40,450,10);
circle(x+160,450,10);
end;
procedure
train(x:integer; color:byte);
var i:byte;
begin
setcolor(color);
for
i:=1 to 5 do
platform(x-i*(200+20),color);
end;
procedure
kran(x:integer; color:byte);
begin
setcolor(color);
if
x=1
then
begin
Line(2,20,160,40);
Line(2,60,160,40);
Line(2,20,2,60);
end
else
begin
Line(638,20,480,40);
Line(638,60,480,40);
Line(638,20,638,60);
end;
end;
procedure
dom(x,y:integer; color:byte);
begin
setcolor(color);
if
x=1
then
begin
Line(100,y+120,160,y+40);
Line(220,y+120,160,y+40);
Rectangle(100,y+120,220,y+240);
end
else
begin
Line(540,y+120,480,y+40);
Line(420,y+120,480,y+40);
Rectangle(540,y+120,420,y+240);
end;
end;
function
complete(d,t:integer):boolean;
var i,a,b:integer;
f:boolean;
begin
case d of
1: begin
a:=100;
b:=220;
end;
2: begin
a:=420;
b:=540;
end;
end;
f:=false;
for
i:=1 to 5 do
if ((t-i*(200+20))<a)
and ((t-i*(200+20)+200)>b)
then
f:=true;
complete:=f;
end;
procedure
play(level:byte);
var cl1,cl2:byte;
k:char;
t,y1,y2,p:integer;
s:string;
begin
InitGraph(gd,gm,'');
t:=0;
y1:=0;
y2:=0;
p:=0;
d1:=false;
d2:=false;
rectangle(1,1,639,479);
Repeat
if keypressed
then
begin
k:=readkey;
case ord(k) of
9: if kr=1 then kr:=2 else kr:=1;
13: begin
case kr of
1: if not d1 then d1:=true;
2: if not d2 then d2:=true;
end;
end;
end;
end;
cl1:=white;
cl2:=white;
case
kr of
1:cl1:=magenta;
2:cl2:=magenta;
end;
dom(1,y1,black);
dom(2,y2,black);
train(t,black);
t:=t+5*level;
if
d1
then
y1:=y1+10;
if
d2
then
y2:=y2+10;
if
t>900
then t:=t-220;
if
y1>180
then begin
y1:=0;
d1:=false;
if complete(1,t)
then begin
cl1:=green;
p:=p+1;
end
else cl1:=red;
end;
if
y2>180
then begin
y2:=0;
d2:=false;
if complete(2,t)
then begin
cl2:=green;
p:=p+1;
end
else cl2:=red;
end;
kran(1,cl1);
kran(2,cl2);
dom(1,y1,cl1);
dom(2,y2,cl2);
train(t,white);
setcolor(black);
OuttextXY(310,20,s);
setcolor(white);
str(p,s);
OuttextXY(310,20,s);
delay(5000);
Until
ord(k)=27;
readkey;
CloseGraph;
end;
Begin
clrscr;
kr:=1;
menu(1);
k:=1;
q:=true;
while
q=true do
begin
a:=readkey;
case ord(a) of
27:q:=false;
13:case k of
1:play(1);
2:play(2);
3:play(3);
4:begin
clrscr;
gotoxy(13,2);
write('…………………………….»
');
gotoxy(35,10);
write('Разработка проекта на языке Pascal');
gotoxy(37,11);
write('Вариант 11');
gotoxy(45,20);
write('Студент ____________.');
gotoxy(45,21);
write('Группа Ст-__________');
gotoxy(41,24);
write('2018');
readln;
end;
5:q:=false;
end;
end;
menu(k);
if ord(a)=0 then begin
a:=readkey;
case ord(a) of
72:begin
k:=k-1;
if k=0 then k:=5;
menu(k);
end;
80:begin
k:=k+1;
if k>5 then k:=1;
menu(k);
end;
end;
end;
end;
end.
Здесь должны
располагаться блок-схемы для ВСЕХ модулей программы (подпрограммы и основная программа).
Блок-схема должна быть
подписана сверху схемы (название модуля, перечень используемых переменных и
краткое описание, что выполняет модуль)
Как оформлять
блок-схемы читайте в лекции!
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.