Автор работы: Пользователь скрыл имя, 28 Января 2013 в 18:43, курсовая работа
Цель работы - Изучить язык программирования Турбо Паскаль. Написать игру "Змейка". Правила игры: на поле размером 25*80 движется змейка, состоящая из нескольких сегментов и разбросана еда. Цель игры - двигаться по полю буквами w (вверх), s(вниз), a(влево), d(вправо) и собирать еду. Каждая собранная еда увеличивает длину змейки на один сегмент. Если змейка ударяется о стену, игра заканчивается.
Введение
3
1 Язык программирования Turbo Pascal
5
1.1 Процедуры и функции
8
1.2 Операторы. Выражения
10
2 Лексические основы языка Pascal
12
2.1 Структура программы на языке Pascal
14
2.2 Типы данных, используемые в Pascal
18
2.3 Стандартные функции языка Pascal
23
2.4 Построение арифметических выражений
25
2.5 Встроенные константы. Элементы структурного программирования
26
3 Описание алгоритма программы
28
3.1 Структурное описание разработки
28
3.2 Функциональное описание
29
Заключение
31
Список литературы
32
Приложение
Type
Number=(one, two, three, four);
Согласно этим описаниям one является константой типа Number. При применении функции Ord к значению перечислимого типа Ord возвращает целое число, которое показывает, какое место по порядку занимает значение в отношении других значений этого перечислимого типа. Согласно предшествующим описаниям, Ord(one) возвращает 0, Ord(two) возвращает 1 и так далее.
Тип диапазон представляет собой совокупность значений из порядкового типа, называемого главным типом. Тип диапазон задаётся минимальной и максимальной константой порядкового типа. Обе константы должны иметь один и тот же порядковый тип. Например: a..b. При этом считают, что a меньше или равно b (0..99; -128..127). Переменная типа диапазон имеет все свойства переменных главного типа, однако ее значение на этапе выполнения должно принадлежать указанному интервалу. Разрешение использования выражений-констант там, где стандартный Pascal допускает только простые константы, приводит к некоторой синтаксической неоднозначности. В следующем описании неверно задан тип диапазон:
const
X = 50; Y = 10;
type
Scale = (A - B) * 2..(A + B) * 2;
Согласно синтаксису стандартного Pascal, если определение типа начинается с круглой скобки, то это перечислимый тип. Однако Scale предназначен для определения типа диапазона. Поэтому необходимо переупорядочить первое выражение поддиапазона или задать другую константу, равную значению данного выражения, и использовать эту константу в определении типа:
type
Scale = 2* (A - B)..(A + B) * 2;
2.3 Стандартные функции языка Pascal
При описании стандартных функций будет использоваться следующий синтаксис:
Имя_функции>(<аргумент:тип_
Abs (X :Real): Real - возвращает абсолютное значение аргумента (|X|);
Abs (X :Integer): Integer - возвращает абсолютное значение аргумента (|X|);
ArcTan (X:Real): Real - возвращает арктангенс аргумента (arctg X).
Chr (A :Byte): Char - возвращает символ, код которого равен A.
Cos (X :Real): Real - возвращает косинус аргумента (cos X);
Exp (X :Real): Real - возвращает экспоненту аргумента (ex);
Frac (X :Real): Real - возвращает дробную часть аргумента;
Int(X:Real):Real - возвращает целую часть аргумента;
Ln (X :Real): Real - возвращает натуральный логарифм аргумента (ln X);
Odd (A:Integer):Boolean - возвращает True, если А нечетно.
Ord (A :Char): Byte - возвращает порядковый номер символа A;
Round (X:Real): Integer - возвращает результат округления аргумента до ближайшего целого;
Random (A:Integer): Integer - возвращает случайное число из интервала [0,A];
Sqr (X:Real): Real - возвращает квадрат аргумента (X2);
Sqr (X:Integer): Integer - возвращает квадрат аргумента (X2);
Sqrt (X:Real): Real - возвращает квадратный корень аргумента(sqrt(x);
Sin (X:Real): Real - возвращает синус аргумента;
Trunc (X:Real): Integer - отбрасывает дробную часть действительного аргумента;
UpCase (A :Char):Char - превращает строчные буквы латинского алфавита в соответствующие им прописные.
Для вычисления значений других функций следует пользоваться тождествами:
2.4 Построение арифметических выражений
При построении арифметических выражений используются унарные и бинарные арифметические операции.
Для унарной операции требуется один операнд.
Например:
x:= - a; {изменение знака значения переменной a}
x:= + a; {сохранения знака значения переменной a}
При построении арифметических выражений необходимо учитывать порядок (приоритеты) выполнения арифметических операций. Первыми выполняются операции умножения и деления, затем сложения и вычитания. Для изменения порядка выполнения арифметических операций, выражения, которые необходимо выполнить в первую очередь записываются в круглых скобках.
Например:
Запись на языке Pascal будет выглядеть так:
x:=(Sqr(a)+Sqrt(a+Sqr(cos(b)))
/(b+Pi)))/((Cos(a)+Abs(Sin(b))
Оператор " := " называется оператором присваивания. Он предписывает выполнить выражение, заданное в его правой части, и присвоить результат переменной, имя которой указано в левой его части. Переменная и выражение должны быть совместимы по типу. Его синтаксис:
Y:=2;
X:='Строка';
P:=V1;
Summa:=V2;
где
- X, Y, P, Summa - имена переменных, описанных в разделе описания переменных;
- 2, 'Строка' - значения заданные явно (своими изображениями);
- V1,V2 - выражения, значения которых нужно вычислить.
2.5 Встроенные константы. Элементы структурного программирования
В Pascal констант значения, которых предопределены. Они называются встроенными.
Например:
MaxInt : Integer - возвращает число 32767, наибольшее значение типа Integer;
PI : Real - возвращает число П = 3.14159265358.
Структурированная программа - это программа, составленная из фиксированного множества базовых конструкций. На основе операций, развилок и слияний строятся базовые конструкции: следование, ветвление, цикл. Применяя только эти три конструкции, можно реализовать алгоритм решения любой задачи.
Конструкция, представляющая собой последовательное выполнение двух или более операций, называется следованием.
Конструкция, состоящая из развилки, двух операций и слияния, называется ветвлением. Одна из операций может отсутствовать.
Конструкция, имеющая линии управления, ведущие к предыдущим операциям или развилкам, называется циклом.
Конструкции следование, ветвление и цикл можно представить как операции, так как они имеют единственный вход и единственный выход.
Произвольную последовательность операций можно представить как одну операцию.
Операция может быть реализована любым оператором языка Pascal (простым или составным), либо группой операторов, за исключением оператора перехода Goto.
В языке Pascal количество базовых конструкций увеличено до шести, это:
следование;
ветвление;
цикл с предусловием;
цикл с постусловием;
цикл с параметром;
выбор.
3 Описание алгоритма программы
При работе в текстовом режиме экран монитора разбивается на строки, строки -- на позиции, в каждую из которых можно поместить один символ. Положение символа на экране задается двумя координатами -- вертикальной X и горизонтальной Y. X -- это номер позиции в строке, а Y -- номер строки. Модуль CRT содержит описания констант, процедур и функций, обеспечивающих управление текстовым режимом работы монитора.
ClrScr Очищает экран или окно и помещает курсор в верхний левый угол.
Delay(D: Word) Приостанавливает работу программы на указанное число D миллисекунд. Практически время задержки зависит от тактовой частоты процессора.
GotoXY(X, Y: Byte) Перемещает курсор в позицию X строки Y экрана.
TextBackGround(Color:Byte) Устанавливает цвет фона.
TextColor(Color: Byte) Устанавливает цвет символов.
В программе используются несколько процедур для реализации поставленной задачи.
3.1 Структурное описание разработки
Программа написана среде программирования Turbo Pascal. В ней создано контекстное меню, появляющееся вначале игры, содержащее в себе подсказку по управлению змейкой, поле, на которое помеается компонент, содержащий в себе тело змейки и «еда».
При запуске программы выполняются следующие действия:
-открывается контекстное меню со справкой об управлении передвижением тела змейки
-предлагается перейти к игре
-далее появляется появляется зеленое поле, с произвольными координатами прорисовывается еда и отображается змейка по начальным параметрам, которая начинает двигаться вправо.
Управление осуществляется клавишами:
w - осуществляет движение змейки вверх
s - вниз
a - влево
d - вправо
Координаты каждой части змейки хранятся в матрице, при нажатии определенной клавиши они меняются и змейка движется.
При совпадении координат еды и начала змейки (поедание еды змейкой) координаты еды произвольно меняются, длина змейки увеличивается на один сегмент.
Программа постоянно проверяет, нет ли пересечения змейкой границ поля. Если это случается, то выводится сообщение о проигрыше и меню с предложение вытйти из игры.
В случае, когда игрок собирает всю еду и змейка достигает максимальной длины появляется сообщение о выигрыше.
3.2 Функциональное описание
В данной программе используются:
Тип данных созданный пользователем:
spoint=record; {тип данных для точки}
Консанты:
maxwidth=10; {максимальная длина змейки}
Переменные:
width:integer;{длина змейки}
e:spoint;{координаты еды}
snakebody: array [1..maxwidth] of spoint; {координаты частей тела змейки}
i{счетчик цикла}, nx, ny:integer;{координаты головы змейки}
v:byte;{вектор направления головы змейки}
gameover:boolean;{флаг окончания игры}
key:char;{буфер клавиши}
Процедуры и функции:
function checknext (x:integer; y:integer):boolean; {проверяет свободна ли клетка и не выходит ли она за границы поля}
procedure neweat; {создает еду на поле}
procedure movesnake(x,y:integer); {перемещает змейку}
Заключение
Завершаем рассмотрение основ программирования на Турбо Паскале. Среди них вычисления и обработка информации, использование объектно- ориентированного программирования - словом, те задачи, с которыми приходится сталкиваться профессиональному программисту. Турбо Паскаль был выбран как наилучший язык программирования для обучения основам профессионального программирования.
Пакет Turbo Pascal 7.0 использует новейшие достижения в программировании. Он может быть использован практически на любой машине и относительно дешев. Язык этой версии обладает широкими возможностями, имеет большую библиотеку модулей. Среда программирования позволяет создавать тексты программ, компилировать их, находить и исправлять ошибки, компоновать программы из отдельных частей, использовать модули, отлаживать и выполнять отлаженную программу.
Турбо Паскаль - достаточно «старый» программный продукт. Следует заметить, однако, что Паскаль - это живой язык. Известны, используются или находятся в стадии разработки компиляторы и среды разработки программ на Паскале для различных операционных систем, в том числе и бурно развивающейся операционной системы Linux. Эти системы иногда частично, а иногда и в значительной мере совместимы с Турбо Паскалем, а следовательно, накопленный опыт может быть использован и для серьезной, профессиональной работы по разработке программ.
В ходе проделанной работы был изучен текстовый режим языка программирования Turbo Pascal, рассмотрены и применены процедуры и функции.
Список Литературы
Епанешников А.М. Епанешников В.А. - "Программирование в среде Turbo Pascal 7.0". Москва "Диалог - МИФИ". 2000г. 368с.
Марченко А.И. Марченко Л.А. - "Программирование в среде Turbo 3 3 Pascal 7.0". Киев "Век+". 1999г. 460с
Малыхина М.П. Программирование на языке высокого уровня Turbo Pascal. - издательство «СПб:БХВ-Петербург», 2006.
Попов В.Б. - "Turbo Pascal для школьников." Москва. "Финансы и статистика". 1998г. 464с.
Павловская Т.А. Паскаль. Программирование на языке высокого уровня -- издательство Питер 2008.
Пильщиков В.Н- "Сборник упражнений по языку Паскаль". Москва. "Наука". 1989г. 160с.
Справочник по Turbo Pascal для студентов: А. Н. Моргун -- Москва, Вильямс, 2006 г.- 608 с.
Ускова О.Ф. "Программирование на языке Паскаль. Задачник". Санкт-Петербург. "Питер". 2002г. 334с
Turbo Pascal для студентов и школьников: Г. Г. Рапаков, С. Ю. Ружецкая -- Москва, БХВ-Петербург, 2007 г.- 352 с.
Turbo Pascal. Решение сложных задач: В. В. Потопахин -- Москва, БХВ-Петербург, 2006 г.- 208 с
Приложение
Листинг программы
program zmeika;
uses crt;
type
spoint=record
x:integer;
y:integer;
end; {тип для точки}
const
maxwidth=10; {максимальная длина змейки}
var
width: integer; {длина змейки}
e:spoint;{координаты еды}
snakebody:array [1..maxwidth] of spoint; {массив с координатами частей тела змейки}
i,{счетчик цикла} nx,ny:integer{координаты головы змейки};
v:byte; {вектор направления головы змейки}
gameover: boolean; {флаг окончания игры}
key:char;{буфер клавиши}
{проверяет свободна ли клетка и не выходит ли она за границы поля}