Программа, моделирующая игру "Пятнашки"
Выполнение программы в среде программирования Турбо Паскаль. Описание основного алгоритма. Вывод информации на экран. Инициализация графического режима. Проверка на наличие совпадений в массиве. Считывание результатов из файла. Руководство пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 12.01.2014 |
Размер файла | 822,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
28
Размещено на http://www.allbest.ru/
Курсовая работа
Программирование на языке высокого уровня
Тема Разработать программу, моделирующую игру «Пятнашки»
Фамилия студента Толкачев
Содержание
Введение
1. Обзор игры «пятнашки»
1.1 Назначение и область применения
1.2 Используемые методы
1.3 Системные требования
2. Описание программы
2.1Описание алгоритма программы
2.2 Руководство пользователя
Заключение
Глоссарий
Список использованных источников
Приложение
Введение
Высокоуровневый язык программирования -- язык программирования, разработанный для быстроты и удобства использования программистом. Основная черта высокоуровневых языков -- это абстракция, то есть введение смысловых конструкций, кратко описывающих такие структуры данных и операции над ними, описания которых на машинном коде (или другом низкоуровневом языке программирования) очень длинны и сложны для понимания.
Так, высокоуровневые языки стремятся не только облегчить решение сложных программных задач, но и упростить портирование программного обеспечения. Использование разнообразных трансляторов и интерпретаторов обеспечивает связь программ, написанных при помощи языков высокого уровня, с различными операционными системами и оборудованием, в то время как их исходный код остаётся, в идеале, неизменным.
Такого рода оторванность высокоуровневых языков от аппаратной реализации компьютера помимо множества плюсов имеет и минусы. В частности, она не позволяет создавать простые и точные инструкции к используемому оборудованию. Программы, написанные на языках высокого уровня, проще для понимания программистом, но менее эффективны, чем их аналоги, создаваемые при помощи низкоуровневых языков. Одним из следствий этого стало добавление поддержки того или иного языка низкого уровня (язык ассемблера) в ряд современных профессиональных высокоуровневых языков программирования.
Примеры: C, C++,C#, Java, Python, PHP, Ruby, Perl, PureBasic, Delphi, Lisp. Языкам высокого уровня свойственно умение работать с комплексными структурами данных. В большинстве из них интегрирована поддержка строковых типов, объектов, операций файлового ввода-вывода и т. п.
Первым языком программирования высокого уровня считается компьютерный язык Plankalkul, разработанный немецким инженером Конрадом Цузе ещё в период 1942--1946 гг. Однако транслятора для него не существовало до 2000 г. Первым в мире транслятором языка высокого уровня является ПП (Программирующая Программа), он же ПП-1, успешно испытанный в 1954 г. Транслятор ПП-2 (1955 г., 4-й в мире транслятор) уже был оптимизирующим и содержал собственный загрузчик и отладчик, библиотеку стандартных процедур, а транслятор ПП для ЭВМ Стрела-4 уже содержал и компоновщик (linker) из модулей. Однако, широкое применение высокоуровневых языков началось с возникновением Фортрана и созданием компилятора для этого языка (1957)
Новой тенденцией является появление языков программирования еще более высокого уровня (ультра-высокоуровневых). Такого рода языки характеризуются наличием дополнительных структур и объектов, ориентированных на прикладное использование. Прикладные объекты, в свою очередь, требуют минимальной настройки в виде параметров и моментально готовы к использованию. Использование ультра-высокоуровневых языков программирования снижает временные затраты на разработку программного обеспечения и повышает качество конечного продукта за счет, опять таки, уменьшения объема исходных кодов.
1. Обзор игры «пятнашки»
1.1 Назначение и область применения
Данная программа является, компьютерной версии знаменитой игры «пятнашки». Это логически не сложная и достаточно простая в управлении и использовании программа. Применения данной программы возможны везде, ведь в любой работе нужен отдых, а данная простенькая игра поможет расслабиться и отвлечься от повседневных дел.
Суть самой игры заключается в следующем:
- Игрок на экране видит табло, которое разбито на 16 клеток. В пятнадцати из них расположены неповторяющиеся цифры, в случайном порядке от 1 до 15 и одна пустая.
В общем виде данное табло можно представить в виде таблицы 1:
Таблица 1 - Образец табло.
5 |
7 |
3 |
8 |
|
15 |
1 |
13 |
2 |
|
14 |
10 |
6 |
4 |
|
9 |
11 |
12 |
- Игрок должен перемещать по одной клетки с цифрой на пустое место.
- Так происходит до тех пор, пока пользователь не выстроит последовательную комбинацию цифр (Таблица 2), и лишь после этого игрок считается победителем.
Таблица 2 - Правильное заполнение табло.
1 |
2 |
3 |
4 |
|
5 |
6 |
7 |
8 |
|
9 |
10 |
11 |
12 |
|
13 |
14 |
15 |
1.2 Используемые методы
Программа выполнена в среде программирования Турбо Паскаль. Сама программа - приложение Windows. Для вывода графических объектов используются модуль Graph. Программой обрабатываются события от нажатия клавиш на клавиатуре, выбора соответствующих пунктов меню, а также считывание количества ходов для ведение статистики лучших игроков.
Для того чтобы не усложнять листинг программы, вся программа разбита на процедуры, каждая из которых отвечает за определенное действие. Всю программу можно разделить на два основных раздела:
- Основные процедуры, т.е. те процедуры, которые отвечают за саму игру и взаимодействие с пользователем во время игры;
- Вспомогательные процедуры. Это те процедуры, которые дополняют данное приложение дополнительными и очень полезными функциями;
- Основная программа.
К основным процедурам относятся:
- Tablo;
- Vivod;
- Napravlenie;
- Poisk;
- Zamena;
- Proverka;
- Mesto;
- Game15
К вспомогательным процедурам относится:
- ReadFile;
- WriteFile;
- Bonus.
Алгоритм всей программы описан в пункте 5, а в данном разделе опишем основные приемы используемых процедур.
Основные процедуры.
procedure Tablo; Данная процедура формирует табло, заполненное случайными, неповторяющимися цифрами от 1 до 15 и одной пустой клеткой. Процедура реализована с использованием двух массивов: одномерный и двумерный.
Одномерный массив с 16 целыми числами заполняется случайным образом, при чем учитывается, чтобы цифры в данном массиве не повторялись.
Каждой цифре из одномерного массива присваивается, аналогичный ей строковый элемент и вводится в двумерный массив. К примеру цифре 5, присваивается строковый элемент `5 `. Исключение составляет цифра 16, ей присваивается пробел.
procedure Vivod; Процедура вывода на экран табло с цифрами сформированное на момент отображения. Если программа только запущенна, тогда на экран выводится таблица заполненное случайным образом. Если игра уже идет то данная процедура выводит на экран ту комбинацию цифр, которая определена пользователем во время игры.
procedure Napravlenie; В данной процедуре пользователю, при помощи курсора, предлагается ввести направление перехода. В данной процедуре считывается код нажатой клавиши, чтоб в дальнейшем можно было осуществлять передвижение.
Procedure Poisk; В этой процедуре осуществляется поиск пустого элемента. Это необходимо для того, чтоб в дальнейшем пользователь смог относительно пустого элемента сделать свой ход. Процедура считывает каждый элемент двумерного массива и сравнивает его с пустым. После того как пустой найден процедура запоминает координаты пустого элемента, а именно строку и столбец.
procedure Zamena; Программа в зависимости от выбора направления осуществляет перестановку элементов в двумерном массиве.
Также в данной процедуре считывается каждый ход пользователя, чтобы в дальнейшем, если пользователь разложит требуемый расклад быстрее, чем игроки, игравшие ранее, можно было ввести информацию об игроке в файл.
procedure proverka; После совершения перестановки цифр, а иными словами после очередного хода, программа сравнивает расстановку цифр в двумерной матрицы. Если текущая комбинация является правильной, тогда игрок считается победителем.
procedure Mesto; В случае если игрок считается победителем, то в данная процедура сравнивает текущей результат (количество ходов за которое игрок разложил расклад), с игроками игравшими ранее. Если данный игрок разложил быстрее, то ему предлагается ввести имя и его имя и результат сохранятся в файл.
procedure Game15; Эта процедура является основной. В ней подключается графический модуль и происходит основной процесс игры.
Игра будет продолжатся до тех пор пока не будет разложен правильный расклад или до тех пор пока пользователь не прервет игру при помощи клавиши ESC.
Вспомогательные процедуры.
procedure readFile; После ввода имени пользователя (пункт 4.1.7), информация добавляется в файл res.txt
procedure writeFile; Данная процедура считывает информацию с файла res.txt и выводит на экран полученные данные, а именно игроков, которые за наименьшее количество ходов разложили требуемую комбинацию.
procedure bonus; Маленькая хитрость данной программы. Она предназначена для разработчика программы и для преподавателя проверяющего правильность написания игры. Чтобы, при проверки, преподавателю не требовалась проходить всю игру, достаточно нажать клавишу End на клавиатуре и расклад почти разолжется. Также эта процедура была бы очень полезна разработчику, для отладки и тестирования программы.
Основная программа.
В основной программе на экране выводится Главное меню и в зависимости от выбранных пользователем действий происходит взаимодействие с процедурами.
В действительности некоторые процедуры можно было объединить, т.к. основная цель использования процедур это исключение повторяющихся действий, а в данной программе некоторые процедуры используются один раз и их можно было записать в другие процедуры или основную программу, но, на мой взгляд, так гораздо удобнее, как при программировании, так и при проверки.
1.3 Системные требования
Для запуска игры достаточно любого компьютера, на котором установлена хоть какая-нибудь операционная система, семейство Windows кроме 64 битных версий.
2. Описание программы
2.1 Описание алгоритма программы
Несмотря на простоту данной программы, написание алгоритма оказалось достаточно не простой задачей. В связи с этим пришлось разделить его, в целях его читаемости и доступности.
Основной алгоритм программы разбит на четыре раздела (схема 1):
- Описание;
- Управление;
- Игра;
- Результаты.
Размещено на http://www.allbest.ru/
28
Размещено на http://www.allbest.ru/
Схема 1 - Основной алгоритм программы
Раздел Описание.
Данный раздел предназначен для ознакомления пользователем, с возможностями, программы.
Раздел реализован при помощи процедуры Avtor. Данная процедура считывает информацию из файла fhelp1.txt и выводит считанную информацию на экран, для ознакомления пользователю.
Общий алгоритм данного раздела заключается в следующем (Схема 2):
– Чтение информации из файла fhelp1.txt;
– Вывод информации из файла на экран;
– Закрытие файла.
Размещено на http://www.allbest.ru/
28
Размещено на http://www.allbest.ru/
Схема 2 Алгоритм - Описание
Чтение файла
При помощи процедуры assign(f,'fhelp1.txt'), связываем файловую переменную f с файлом fhelp1.txt, к которому происходит обращение. В данном варианте не описывается полный путь к файлу, подразумевая, что данный файл находится в корне каталога с программой. Это необходимо в тех случаях, когда пользователь захочет перенести файлы программы в любое удобное для него место, если бы был прописан полный путь, тогда пользователь не мог бы перемещать файлы программы, а в случае перемещения, информация из раздела Описание, не выводилась бы на экран. В этом случае, необходимо было бы точно устанавливать файлы программы, в то место, где было бы прописано. Далее при помощи процедуры reset(f) открываем файл для чтения.
Вывод информации на экран осуществляется при помощи инструкций readln(f,g1); writeln(g1). В данной инструкции, переменной g1, сначала при помощи readln присваивается строка из файла fhelp1.txt, а затем при помощи writeln выводится на экран содержимое переменной g1.
Закрытие файла, осуществляется при помощи процедуры close (f);
Раздел Управление.
В данном разделе, пользователю предлагается ознакомиться с клавишами управления.
Раздел реализован при помощи процедуры help. Данная процедура считывает информацию из файла fhelp.txt и выводит считанную информацию на экран для ознакомления пользователю.
Реализована данная процедура, точно таким же способом, как и в разделе 5.1 Описание, за исключением того, что обращение происходит к файлу fhelp.txt, по этому подробно останавливаться на данном разделе не имеет смысла.
Раздел Игра.
Данный раздел является основным. Именно в этом разделе происходят основные события. Реализован данный алгоритм при помощи процедуры Game15.
Алгоритм данного раздела заключается в следующем:
- Инициализация графического режима;
- Заполнение в памяти компьютера табло случайными цифрами;
- Вывод табло на экран;
- Ввод направления перехода;
- Поиск пустого элемента;
- Перемещение элементов табло;
- Проверка;
- Итог;
- Ввод личных данных.
Схематично, данный алгоритм, показан на схеме 3.
Схема 3 - Раздел Игра.
Инициализация графического режима осуществляется в этой же процедуре Game15, при переходе из Главного меню программы в раздел ИГРА. Переход к графическому режиму осуществляется, при помощи процедуры InitGraph (grDriver, grMode, grPath), где grDriver - это используемы программой драйвер видеоадаптера (VGA), grMode - режим работы видеосистемы (VGAHi), grPath - это место нахождения файла EGAVGA.BGI на диске (как и в случае с файлами, пишем только имя и расширение файла, а не полный путь, для того чтоб в будущем можно было перемещать файлы программы).
Заполнение табло случайными цифрами.
В памяти компьютера создается табло, в котором, в дальнейшем будут производиться перестановки. Табло состоит из шестнадцати клеток (четыре строки и четыре столбца), которое заполняется пятнадцатью, неповторяющимися цифрами от 1 до 15 и одной пустой клеткой.
Данный раздел реализован при помощи процедуры Tablo. Фактически табло, которое описывается ранее это двумерный массив с цифрами от 1 до 15 и ноль. Но отображение цифр на экране и ноля, вместо пустого элемента, делает табло не красивым. Отсюда следует, что двумерный массив, должен содержать строковые или символьные элементы.
Следующем моментом реализации данной процедуры, является заполнение табло случайными цифрами. Для заполнения табло случайными цифрами используется функция random, которая является генератором случайных цифр, но работает соответственно только с цифрами, а у нас строковый двумерный массив.
Проанализировав выше сказанное, приходим к тому, что необходимо создать два массива. Один одномерный из шестнадцати элементов типа integer, второй двумерный, четыре на четыре, типа string. Сначала одномерный массив, в случайном порядке, заполняется целыми неповторяющимися цифрами от 1 до 16, а затем в зависимости от расположения цифр, заполняется двумерный строковый массив. К примеру, если первый элемент одномерного массива равен цифре 11 тогда первому элементу двумерного массива будет присвоено строка «11».
Общий алгоритм данного раздела заключается в следующем (Схема 4):
– Выбор случайного числа;
– Проверка на наличие совпадений в массиве;
– Занесение информации в массив;
– Проверка заполнен ли массив;
– Заполнение двумерного массива.
Схема 4 - Раздел Табло
Выбор случайного числа.
Некоторой переменной b присваивается случайное число, при помощи функции random. При чем функция random ограничена интервалом от 1 до 16.
Проверка на наличие совпадений в массиве
Переменная b сравнивается с каждым элементом массива bs[i], при помощи инструкций For и if. Если такой элемент уже присутствует в одномерном массиве, тогда переменной b, вновь присваивается случайное число. Так происходит до тех пор, пока переменной b не будет присвоена цифра, которой еще нет в массиве.
Занесение информации в массив.
Значение переменной b, которое было найдено ранее, вносится в массив bs[i], за последним элементом внесенный в массив
Проверка заполнен ли массив.
Программа проверяет заполнен ли массив полностью, если нет, то алгоритм начинается с пункта 2.1.10
В итоге мы имеем одномерный массив заполненный, в случайном порядке неповторяющемся цифрами от 1 до 16.
Заполнение двумерного массива.
Заполнение двумерного массива, при помощи инструкции For и переменных i и j, которые обозначают столбец и строку.
Алгоритм заполнения двумерного массива заключается в следующем:
– Первоначально переменной z присваивается единица. Данная переменная нам необходима как счетчик.
– Каждому элементу j строки и i столбца присваивается строковый элемент, в зависимости от цифры стоящей под номером z в одномерном массиве, если текущей элемент одномерного массива содержит цифру 8, то текущему элементу двумерного массива присваивается строковый элемент «8 ». Исключением составляет цифра 16. В этом случае в двумерный массив вводится пробел. Выбор строкового элемента осуществляется при помощи инструкции case.
– Так происходит до тех пор, пока двумерный массив не будет полностью заполнен.
Вывод табло.
В данном разделе на экране появляется табло с текущей комбинацией цифр. Первоначально, табло заполняется случайным образом п. 5.3.2, а в дальнейшем на экране будет отражено текущее состояния цифр на табло, в зависимости от сделанных пользователем ходов.
Данный раздел реализован в процедуре Vivod.
Общий алгоритм данного раздела заключается в следующем (Схема 5):
– Прорисовка клеток;
– Прорисовка рамки;
– Вывод элементов массива по верх клеток табло.
Размещено на http://www.allbest.ru/
28
Размещено на http://www.allbest.ru/
Схема 5 - Раздел Вывод
Прорисовка клеток.
Рисование клеток осуществляется в следующем порядке:
- Определения размера будущих клеток, при помощи двух переменных (h1, w1, координаты верхней левой и правой нижней точек);
- При помощи процедуры SetFillStyle, задаем нужный цвет и стиль заполнения. Цвет выберем синий, а стиль заполнения возьмем SolidFill - сплошная заливка текущем цветом, т.е. синим.
- При помощи процедуры Bar вычерчиваем на экране квадрат.
- Чтобы данные действия не повторять 16 раз, используем инструкцию For.
Прорисовка рамки.
Для того, чтобы табло имело законченный вид, поместим ранее созданные клетки в рамку, при помощи процедуры Line.
Вывод элементов массива по верх клеток табло.
В итоге на экране появляется табло с шестнадцатью клетками, остается лишь в центр этих клеток поместить цифры из двумерного массива.
Так как мы находимся в графическом режиме, то для вывода элементов двумерного массива используем процедуру OutTextXY.
В итоге на экране появится достаточно аккуратное и не плохо оформленное табло с клетками, в центре каждой из которых, находится цифра.
В будущем, когда пользователь будет перемещать клетки, он фактически будет совершать операции с массивом и на экран будет выводиться информация из массива, в котором осуществлена перестановка, а клетки останутся неизменными.
Поиск пустого элемента.
В данном разделе осуществляется поиск пустого элемента, чтобы в дальнейшем относительно него можно было бы осуществлять передвижение
Данный раздел реализован в процедуре Poisk. Программа при помощи инструкции For и переменных i и j сравнивает каждый элемент двумерного массива AS, с пустым элементом, при помощи инструкции IF и когда находит, присваивает значения переменных i и j переменным strok и stolb. Таким образом, переменные strok и stolb как бы являются координатами пустого элемента.
Общий алгоритм данного раздела заключается в следующем (Схема 6):
– Выбор элемента массива;
– Проверка, является ли данный элемент пробелом;
– Присвоение координат строки и столбца переменным.
Нет Нет
Да
Схема 6 - Раздел Поиск
Выбор элемента массива.
При помощи инструкции For поочередно будем выбирать каждый элемент массива.
Проверка, является ли данный элемент пробелом.
При помощи инструкции If, сравниваем каждый элемент массива с пробелом.
Запоминание координат пробела.
Переменным strok и Stolb присваиваем координаты пустого элемента.
Ввод направления перехода.
В данном разделе пользователю предлагается выбрать направление перехода клеток с цифрами, относительно пустой клетки. Выбор осуществляется при помощи курсора, на клавиатуре.
Данный раздел алгоритма реализован в процедуре Napravlenie.
Фактически некоторой переменной ch (типа char) присваивается код нажатой клавиши.
Алгоритм процедуры заключается в следующем:
– Пользователю предлагается, при помощи курсора, ввести направления перехода.
– После того как пользователь, нажал кнопку на клавиатуре, код клавиши присваивается переменной ch, при помощи функции readkey.
К примеру, если пользователь ввел направление курсора вверх, это означает, что пользователь нажал служебную клавишу под кодом 72.
Перемещение элементов табло.
В данном разделе, в зависимости от направления перехода, выбранное ранее при помощи курсора, и местоположение пустой клетки, происходит перемещение:
- Стрелка влево - перемещает влево цифру, стоящую справа от пустой клетки;
- Стрелка вправо - перемещает вправо цифру стоящую слева от пустой клетки;
- Стрелка вниз - перемещает вниз цифру стоящую сверху от пустой клетки;
- Стрелка вверх - перемещает вверх цифру стоящую снизу от пустой клетки.
Данный алгоритм реализован в процедуре Zamena.
Общий алгоритм данного раздела заключается в следующем (Схема 7):
- Выбор направления перестановки;
- Перемещение клеток;
- Запись об очередном сделанном ходе.
Схема 7 - Раздел Замена.
Выбор направления перестановки.
Ранее пользователь сделал ход, а это значит, что мы имеем нажатую служебную клавишу, под каким либо номером. При помощи инструкции IF и функции ord, выбирается направления перестановки элементов.
Перемещение клеток.
В зависимости от значений переменных Strok, Stolb, которым было присвоено координаты пустого элемента в массиве (5.3.4) и выбранного направления, осуществляется перемещение.
Например, пользователь ввел направление курсора вверх, это означает, что пользователь нажал служебную клавишу под кодом 72, тогда, при помощи инструкции if и функции ord (if ord(ch)=72 then), осуществляется перемещение.
Перемещение осуществляется по следующему принципу: пустой клетки, а именно элементу массива с координатами as[strok,stolb], присваивается содержимое элемента стоящего под пустой клеткой (as[strok,stolb]:= as[strok+1,stolb];), а соответственно элементу, стоящему под пустой клеткой присваивается пробел (as[strok+1,stolb]:=' ';).
Запись об очередном сделанном ходе.
При запуске раздела Игра, некоторой переменной hod присваивается 0. Это означает, что пользователь приступил к игре. После каждого сделанного хода, значение переменной hod увеличивается на единицу. В дальнейшем эта информация будет использована, при определении лучших результатов.
Проверка.
В данном разделе программа сравнивает текущую комбинацию цифр, с правильной комбинацией. Если расклады совпадают, то алгоритм выполнен и осуществляется переход к следующему пункту, в противном случае, алгоритм вновь повторяется, начиная с пункта 5.3.3.
Данный раздел реализован в процедуре proverka.
По умолчанию логическая переменная prov равна false (ложь). Программа проверяет если элемент первой строки и первого столбца равен 1, второй равен двум и т.д. и элемент последней строки и последнего столбца равен пустому элементу, то расклад считается, выполнен и переменной prov присваивается значение true (истина).
Итог.
В данном разделе, программа считывает, за какое количество ходов игрок, выполнил требуемый расклад и сравнивает с результатами прошлых игр. Если игрок разложил табло за большее количество ходов, чем это сделали игроки ранее, тогда программа завершает свою работу и переходит в Главное меню, в противном случае пользователю предлагается ввести свое имя. В дальнейшем его имя будет, отображается в списке лучших игроков.
Данный раздел реализован в процедуре Mesto.
Общий алгоритм данного раздела заключается в следующем (Схема 8):
- Количество ходов;
- Считывание результатов из файла;
- Проверка, входит ли данный результат в список лучших;
- Ввод имени;
- Перестановки в файле результатов;
- Сохранения результатов в файл.
Нет
Да
Схема - 8 Раздел Итог.
Количество ходов
В течение всей игры, программа записывает каждый сделанный ход. Таким образом, по завершению игры, т.е. когда пользователь разложил верный расклад, а не когда просто покинул игру, мы знаем точное количество ходов, за которое игрок разложил расклад (Количество ходов присваивается переменной hod).
Считывание результатов из файла.
В данном разделе программа считывает данные из файла res.txt и для удобства обработки этой информации, вносит ее в два массива it и res. Массив it содержит информацию о количестве ходов, за которое игроки, игравшие ранее разложили расклад, массив res содержит имена этих игроков.
Проверка, входит ли данный результат в список лучших
В данном разделе результат текущего игрока сравнивается с результатами игроков из массива it.
В случае если игроки, игравшие ранее разложили расклад за наименьшее количество ходов, то программа завершает свою работу и переходит в Главное меню, в противном случае программа продолжает свою работу (сл. пункт.)
Ввод имени.
Пользователю предлагается ввести свое имя, чтобы его имя и результат были сохранены в списке лучших игроков.
Перестановки в файле результатов.
В данном разделе необходимо совершить перестановки в массиве, но нужно не просто удалить какой то элемент, а на его место поставить текущий результат, нужно осуществить сдвиг всех элементов на один, а если текущей результат будет десятым, то заменить его.
Эту задачу можно решить несколькими способами. Один из способов, это совершать перестановки непосредственно в массивах it и res и осуществлять сдвиг элементов, но на мой взгляд, наиболее простой способ, это создать еще два массива, для удобства назовем их itv и resv, и в результате совершить простейшие операции перемещения элементов из одного массива в другой. Эти операции совершим по следующей схеме:
При помощи инструкции For сравниваем каждый элемент массива результатов (it), с результатом текущего игрока (переменная hod). Если результат игрока из массива it меньше результата текущего игрока, то результат и имя игрока из массива it и res присваиваем массивам itv и resv. Если результат текущего игрока меньше чем очередной элемент массива it и больше предыдущего элемента массива it, то результат текущего игрока вносится в очередной элемент массивов itv и его имя присваивается очередному элементу массива resv, а результат текущего элемента массивов it и res добавляется в массивы itv и resv за результатами текущего игрока. Соответственно когда инструкция For начнет сравнивать следующий элемент массива it, то результат текущего игрока, будет меньше, как текущего так и предыдущего элементов массива it, а это не удовлетворяет условию. Это означает, что очередной элемент массивов it и res просто добавится за последним элементом массивов itv и resv. Так будет происходить пока массивы itv и resv не будут полностью заполнены, а последний элемент массивов it и res, соответственно не войдут, во вновь созданный список лучших игроков, которые описаны в массивах itv и resv. В итоге мы осуществим сдвиг результатов на одну позицию.
Для более полного описания данной процедуры рассмотрим пример:
В таблице 3 расположены две строки. В верхней содержатся элементы массива it, а в нижней массива res.
Таблица 3 - Массивы it и res.
It |
10 |
20 |
30 |
40 |
50 |
60 |
70 |
80 |
90 |
95 |
|
res |
A |
B |
C |
D |
E |
F |
G |
H |
K |
L |
Предположим, что текущий игрок, под именем Z, победил за 44 хода.
Программа начинает искать в каком интервале расположен текущей результат (44). Для этого каждый элемент массива it сравнивается с переменной hod. Если первый элемент меньше 44, то его имя и результат переносится в массивы itv и resv, если следующий элемент меньше 44, то и его переносят в массивы itv и resv (таблица 4)
Таблица 4 - Массивы it и res.
Itv |
10 |
20 |
|||||||||
resv |
A |
B |
Так происходит до тех пор пока, программа не найдет элемент в массиве it, который больше 44, но при этом программа проверяет, что 44 больше и предыдущего элемента массива it. Если данное условие выполняется, то программа добавляет результат и имя текущего игрока под именем Z, в массивы itv и resv соответственно, а текущий результат из массивов it и res, также добавляется в массив, но уже за результатами игрока Z (Таблица 5).
Таблица 5 - Массивы it и res.
Itv |
10 |
20 |
30 |
40 |
44 |
50 |
|||||
resv |
A |
B |
C |
D |
Z |
E |
У нас получилось, что 44 меньше 50, но больше 40, по этому за результатом 40 добавили 44, а за ним текущий элемент с результатом 50.
Далее, при проверки результата 44 со следующем элементом с результатом 60, 44 будет меньше результата 60, но 44 и меньше результата 50, а следовательно, условие не выполняется и игрок с результатом 60 переносится в массивы itv и resv. Так происходит пока оба массива itv и resv, не будут заполнены. А последний результат соответственно исчезнет (Таблица 6)
Таблица 6 - Массивы it и res.
Itv |
10 |
20 |
30 |
40 |
44 |
50 |
60 |
70 |
80 |
90 |
|
resv |
A |
B |
C |
D |
Z |
E |
F |
G |
H |
K |
На первый взгляд, все достаточно усложнено, но при создании алгоритма перестановки непосредственно внутри массивов it и res, получается еще хуже.
Сохранения результатов в файл.
В данном разделе информация из массивов itv и resv вносится в файл res.txt. Данный файл открывается в режиме перезаписи и информация в файле обновляется и когда пользователь выдя в Главное меню зайдет в раздел Результаты, он уже уведет обновленную информацию из файла res.txt и соответственно и свой результат.
Результаты.
В данном разделе для пользователя отображается информация о лучших игроках, которые за наименьшее количество ходов собрали требуемую комбинацию.
Данный раздел реализован при помощи процедуры result. Данная процедура считывает информацию из файла res.txt и выводит считанную информацию на экран для ознакомления пользователю.
Реализована данная процедура, точно таким же способом как и в разделе 5.1 Описание, за исключением, того, что обращение происходит к файлу res.txt, по этому подробно останавливаться на данном разделе не имеет смысла.
Описание входных и выводных данных
В таблице 7 описываются входные и выходные данные, которые выстроены примерно в том порядке, в котором они должны взаимодействовать с пользователем
Таблица 7 Описание входных и выходных данных
Входные |
Выходные |
|
2. Выбор раздела в Главном меню программы4. Ввод при помощи курсора направления перехода:- Влево;- Вправо;- Вверх- Вниз;- ESC - покинуть игру в любой момент5. Ввод имени в случае победы за наименьшее количество ходов. |
1. Отображение на экране Главного меню3. Вывод на экран ранее выбранного раздела:- Описание - вывод на экран описание программы- Управление - вывод на экран информацию о клавишах управления- Результаты - вывод на экран списка лучших игроков- Игра - Вывод на экран табло с комбинацией цифр |
2.2 Руководство пользователя
программирование алгоритм массив паскаль
Для запуска программы необходимо запустить файл Super15.exe. Откроется Главное меню (Рисунок 1)
Рисунок 1 - Главное меню
Основное меню содержит пять пунктов:
1. Описание (About program).
2. Управление (Key).
3. Игра (Play).
4. Результаты (Results).
5. Выход (Exit).
Перемещаясь при помощи курсора вверх или вниз, можно выбирать интересующие Вас меню.
При первом запуске программы пользователю рекомендуется прочитать раздел Описание (Рисунок 2), в котором указанно:
- Назначение программы;
- Разработчик;
- Описание программы;
Рисунок 2 - Окно Описание
Раздел Управление. Здесь пользователю выводится на экран клавиши управления (Рисунок 3).
Рисунок 3 - Управление
Раздел Игра. При переходе в этот раздел перед пользователем открывается основное табло игры (Рисунок 4), на котором расположены 15 цифр, заполненные в случайном порядке и одно пустое поле.
Рисунок 4 - Основное игровое поле.
Управление происходит при помощи клавиш курсора:
- Стрелка влево - перемещает влево цифру, стоящую справа от пустой клетки;
- Стрелка вправо - перемещает вправо цифру стоящую слева от пустой клетки;
- Стрелка вниз - перемещает вниз цифру стоящую сверху от пустой клетки;
Стрелка вверх - перемещает вверх цифру стоящую снизу от пустой клетки.
Пользователю необходимо при помощи курсора перемещать клетки табло, до тех пор, пока на экране не отобразится, последовательная комбинация цифр, как показано на рисунке 5
Рисунок 5 - Игровое поле с правильно заполненной, комбинацией.
В течении всей игры, пользователь в любой момент может покинуть игру, для этого достаточно нажать клавишу ESC и игра завершает свою работу, а на экране появится Главное меню программы.
В течение всей игры, программа считает каждый ход игрока и если игрок раскладывает требуемую комбинацию, за меньшее количество ходов, чем это сделали игроки ранее, то после победы, пользователю предлагается ввести свое имя и информация об игроке, который разложил расклад быстрее, заносится в список лучших игроков (Рисунок 6).
Рисунок 6 - Ввод имени
пункт Результаты. В данном разделе меню можно посмотреть результаты лучших игроков (Рисунок 7), а именно тех игроков, которые собрали требуемую комбинацию за наименьшее количество ходов.
На экране небольшая табличка в левом столбце Move записано количество ходов, а в правом Name имя игрока.
Рисунок 7 - Список лучших игроков
Последний пункт меню Выход. При нажатии на данный пункт меню, программа завершает свою работу.
Основной цифровой канал |
64 |
± 5·10-5 |
120 (сим.) |
|
Первичный цифровой сетевой тракт |
2 048 |
± 5·10-5 |
120 (сим.) |
|
Вторичный цифровой сетевой тракт |
8 448 |
± 3·10-5 |
75 (несим.) |
|
Третичный цифровой сетевой тракт |
34 368 |
± 2·10-5 |
75 (несим.) |
|
Четверичный цифровой сетевой тракт |
139 264 |
± 1,5·10-5 |
75 (несим.) |
Заключение
Не смотря на внешне кажущееся простоту данной программы, он таит в себе ряд сложностей, которые реализуются с использованием всех основных приемов Турбо Паскаль. Вообще Турбо Паскаль как среда программирование уже давно устарела, но основы, которые лежат в среде программировании в Турбо Паскаль, лежат в болшенстве известных и популярных приложений. На мой взгляд, изучая программирование в Турбо Паскаль, можно освоить основные приемы программирования.
Целью данной курсовой работы, являлось углубление знаний и расширение навыков по разработке алгоритмов и их реализации на персональном компьютере, на мой взгляд, разработанная мной программа, вполне отвечает поставленным целям. Особенностями данной программы является:
- Четко построенный алгоритм;
- Интуитивно понятный интерфейс;
- Удобное управление;
- Простота в использовании;
- Вполне понятное руководство пользователя;
- Отсутствие лишних дополнений.
Глоссарий
№ п/п |
Понятие |
Определение |
|
1 |
Бит |
один двоичный разряд в двоичной системе счисления |
|
2 |
Компилятор |
Программа, переводящая текст программы на языке высокого уровня в эквивалентную программу на машинном языке |
|
3 |
Оператор |
Допустимое в языке программирования высокого уровня предложение, задающее целостное законченное действие ЭВМ, или представляющее набор описаний. Типичными О. в традиционных языках программирования являются О. ввода-вывода, присваивания, перехода, цикла, процедуры и др. |
|
4 |
Алгоритм |
Содержание и последовательность операций, точно определяющие решение задачи путем вычислительного процесса, преобразующего исходные данные в конечный результат |
|
5 |
Интерфейс |
совокупность средств, методов и правил взаимодействия |
|
6 |
Задача |
Задание вычислительной системе, представленное в виде программы или части программы и данных, которое операционная система рассматривает как единое целое при распределении ресурсов. В ряде операционных систем термин "3". совпадает с понятием "процесс", в других - с понятием "задание". Ср. задание, процесс. 2. Процесс выполнения этого задания |
|
7 |
Ресурс |
Время, аппаратные, программные и другие средства, которые могут быть предоставлены вычислительной системой либо ее отдельными компонентами вычислительному процессу или пользователю |
|
8 |
Память |
Общее название для любых реальных или абстрактных средств и механизмов фиксации и сохранения информации |
|
9 |
Машинный код |
Язык программирования, предназначенный для представления профамм и данных в форме, пригодной для непосредственного восприятия их устройствами данной вычислительной машины. Представляет собой систему команд, данных и инструкций, имеющих форму цифровых кодов (в большинстве ЭВМ - двоичных), которые не требуют трансляции и непосредственно интерпретируются процессором ЭВМ |
|
10 |
Центральный процессор |
электронный блок, исполнитель машинных инструкций |
Список использованных источников
1. Учебное пособие. «Основы алгоритмизации и программирования», Е. Н. Сафьяновой
2. Самоучитель. «Программирование в Turbo Pascal», Н. Культин.
3. Открытие Интернет источники.
Приложения
Рисунок А.1 - Схема сверхцикла
Размещено на Allbest.ru
...Подобные документы
"Пятнашки" на первый взгляд простая игра, но для ее реализации необходимо обратится ко всем разделам программирования в среде Турбо Паскаль. Назначение и область применения. Описание алгоритма программы. Программное и аппаратное обеспечение программы.
курсовая работа [308,0 K], добавлен 04.07.2008Особенности использования графического режима в среде Турбо Паскаль. Типы драйверов. Инициализация графики. Построение изображения на экране. Графические примитивы и работа с текстом. Разработка и реализация программ в среде Турбо Паскаль "Графика".
курсовая работа [1,2 M], добавлен 26.09.2014Разработка программы, создающей и управляющей базой данных, ее реализация на языке Turbo Pascal. Организация алгоритма программы. Вывод информации и возможность добавления информации в базу данных. Поиск информации в базе данных по заданному значению.
курсовая работа [26,7 K], добавлен 19.06.2010Язык программирования Турбо Паскаль. Запись алгоритма на языке программирования и отладка программы. Правила записи арифметических выражений. Стандартное расширение имени файла, созданного системным редактором. Составной оператор и вложенные условия.
курсовая работа [75,0 K], добавлен 21.03.2013Развертывание системы на жестком диске, диалоговая система программирования Турбо Паскаль, запуск программы и выполнение задания. Функциональные клавиши и их назначение. Текстовый редактор, средства создания и редактирования текстов программ, курсор.
реферат [18,6 K], добавлен 01.04.2010Словесное описание алгоритма программы. Открытие файла процедурой Rewrite, его проверка на наличие ошибок при открытии. Особенности построения диаграммы. Листинг программы, ее тестирование и отладка. Выполнение процедуры CloseFile при закрытии файла.
контрольная работа [17,3 K], добавлен 11.06.2010Процедура ввода исходных данных в программу, вывод результатов работы программы на экран. Принцип организации хранения логически связанных наборов информации в виде файлов. Параметры характеристики файла, способы обращения к нему, соглашения по типу.
реферат [14,5 K], добавлен 06.12.2011Основные сведения о системе программирования Турбо Паскаль. Структура программы на Паскале и ее компоненты. Особенности и элементы языка Турбо Паскаль. Порядок выполнения операций в арифметическом выражении, стандартные функции и оператор присваивания.
лекция [55,7 K], добавлен 21.05.2009Особенности программирования на языке Паскаль в среде Турбо Паскаль. Линейные алгоритмы, процедуры и функции. Структура данных: массивы, строки, записи. Модульное программирование, прямая и косвенная рекурсия. Бинарный поиск, организация списков.
отчет по практике [913,8 K], добавлен 21.07.2012Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.
курсовая работа [572,7 K], добавлен 14.07.2012Приобретение теоретических и практических навыков программирования на языке Паскаль. Математическая формулировка задачи и выбор метода обработки информации. Разработка алгоритма и его описание. Описание программы. Форма представления исходных данных.
курсовая работа [224,3 K], добавлен 11.02.2016Инициализация графического драйвера и режима. Функции доступа к видеопамяти. Подключение графической библиотеки. Инициализация графического режима. Включение драйвера, шрифтов в исполняемый файл. Рисование геометрических фигур. Вывод числовой информации.
лабораторная работа [77,2 K], добавлен 06.07.2009Создание транслятора, обрабатывающего код программы на языке Паскаль и за счет эквивалентных операторов генерирующего программу на Си. Особенности внешней спецификации и работы лексического анализатора. Структура программы, вывод результатов на экран.
курсовая работа [254,0 K], добавлен 02.07.2011Структура записей входного массива. Описание основных типов данных. Алгоритм программы: присвоение начальных значений переменных, чтение списка из файла, вывод данных на экран, выполнение обработки данных, сохранение списка в файл. Листинг программы.
курсовая работа [325,2 K], добавлен 28.12.2012Создание программного продукта на языке Pascal в визуальной среде программирования Borland Developer Studio в консольном приложении. Разработка типизированного файла для записи данных и их вывод на экран, добавление данных в конец файла, поиск информации.
курсовая работа [1,0 M], добавлен 04.12.2011Изучение особенностей растровых и векторных графических редакторов. Создание графического редактора: выбор языка программирования, разработка структуры программы и алгоритма работы. Описание интерфейса программы. Руководство программиста и пользователя.
курсовая работа [1,3 M], добавлен 28.07.2013Освоение технологии структурного программирования и применения стандартных методов работы с одномерными массивами при разработке и создании программы на языке Турбо Паскаль. Разработка программы методом пошаговой детализации с помощью псевдокода.
реферат [276,9 K], добавлен 27.02.2008Программа, моделирующая систему массового обслуживания (СМО). Моделирование программы имитации работы турникетов на стадионе (многоканальная СМО) в визуальной среде Delphi 7. Описание программного модуля, листинг программы и руководство пользователя.
курсовая работа [3,8 M], добавлен 20.08.2009Основы проверки и расчета входных данных и вывода выходных данных программы, их блок-схемы. Реализация функции считывания числовых данных из файла, управление (создание, уничтожение и редактирование) визуальными компонентами во время выполнения программы.
контрольная работа [1,3 M], добавлен 12.06.2009Сравнительный анализ языков программирования высокого уровня Си и Паскаль. Реализация алгоритма обработки данных. Тестирование и отладка программы или пакета программ. Структура программы на языке Турбо Паскаль. Указатели и векторные типы данных.
курсовая работа [233,5 K], добавлен 14.12.2012