Курсовая работа: Игровая программа 15

По своей идеологии Паскаль более близок к современной методике и технологии программирования. В частности, этот язык весьма полно отражает идеи структурного программирования, что отчетливо проявляется в основных управляющих структурах, предусмотренных в языке. Паскаль широко приспособлен для применения общепризнанной в настоящее время технологии нисходящего проектирования (пошаговой детализации). Это проявляется в том, что Паскаль может успешно использоваться для записи программы на разных уровнях ее детализации, не прибегая к помощи блок-схем или специального языка проектирования программ.

Паскаль предоставляет весьма гибкие возможности в отношении используемых структур данных. Как известно, простота алгоритмов, а значит трудоемкость их разработки и их надежность, существенно зависят от того, насколько удачно будут выбраны структуры данных, используемые при решении поставленной задачи.


Анализ и математическая постановка задачиЦелью курсовой работы является написание игровой программы “Пятнашки “. Программа располагает на экране игровое поле размером 4*4.На поле расположено 15 фишек с цифрами и одна пустая клеточка, которая будет использоваться для перемещения. Нумерация фишек происходит произвольным образом.

Фишка, которую пользователь собирается переместить на новое место, должна распологаться рядом с пустой клеточкой. Если данное условие выполняется, то игрок может переместить фишку на новое место, иначе игрок выбирает новую фишку. Игра продолжается до тех пор, пока игрок не расставит фишки по порядку (номера фишек должны располагаться по возрастанию слева-направо, сверху-вниз), либо не пожелает выйти из игры досрочно.

В процессе игры программа должна фиксировать число перемещений фишек сделанных игроком. После того, как фишки будут расположены по порядку, программа сравнивает результат с другими результатами и, если он превосходит один из рекордов, то сразу заносится в таблицу результатов. Рассмотрим, каким образом программа может быть построена с математической (логической) точки зрения. Для этого определимся с теми действиями, которые должна будет выполнять программа:1. Формирование одномерного массива содержащего 16 элементов 2 . Заполнение массива числами 1, 2, 3, 4, ... 15 (один элемент массива остается пустым, он будет в дальнейшем представлять пустую клеточку) Элементы массива задаются случайным образом, с помощью генератора случайных чисел 3. Иизменение пользователем порядка расположения чисел в массиве4. Подсчет количества перемещений элементов в массиве5. Проверка расположения элементов в массиве.

6. Если элементы расположены по порядку, то программа фиксирует победу, в противном случае осуществляется переход к пункту №3

Повышенное внимание следует уделить пункту №3 {Иизменение пользователем порядка расположения чисел в массиве}. Программа должна предоставлять пользователю наглядную и удобную возможность перестановки элементов массива. Ввиду того, что игровое поле содержит всего одну пустую клетку, можно сформулировать простой принцип для каждой значащего элемента массива (здесь и далее условимся, что расположение фишек игрового поля будет полностью соответствовать расположению элементов в массиве на каждом этапе игры). Этот принцип заключается в том, что в случае, если возможность сдвига какой-либо фишки игрового поля существует, то она единственна. Сдвиг при этом происходит в сторону пустой клеточки.

Ввыделим основные этапы, которые должны будут реализовываться при выполнении пункта №3:

1. Пользователь выбирает одну из фишек игрового поля

2. Пользователь желает сдвинуть выбранную фишку

3 . Происходит анализ возможности сдвига. Сдвиг возможен только в том случае, если активизированный элемент массива находится рядом с пустым элементом массива. Если условие не выполняется, то происходитпереход к пункту №1

4. Осуществляется сдвиг. В этом случае происходитследующая операция: активизированный элемент массиваоказывается на месте пустого элемента,а тот, в свою очередь, оказываетсянаместе активизированного

5. Число шагов сделанных пользователем увеличивается на единицу

6. После выполнения первых пяти пунктов происходит возвращение к пункту №1

На данном этапе детализации самых сложных, и в тоже время наиболее интересных, пунктов задачи можно прерваться и перейти к разработке алгоритма. Оставшиеся пункты не представляют из себя особой сложности и поэтому не нуждаются в столь подробной детализации.

Разработка схемы алгоритма и её описаниеОписание алгоритма работы основной программы

Логическая работа программы построена на цикле с постусловием. В теле цикла находится процедура, обеспечивающая работу пользователя с меню, и оператор варианта, который содержит три основных процедуры программы (в зависимости от того, какое значение имеет выражение селектор выполняется одна из процедур).

Структурограмма основной программы

Инициализация графического режима


Цикл с постусловием выполняется до тех пор, пока пользователь не выберет в меню команду {E x i t}. В этом случае происходит завершение работы в графическом режиме и осуществляется переход в текстовой режим, а затем происходит выход из основной программы.

Ррезультат выполнения оператора варианта зависит от того, какое значение будет иметь параметр – переменная (далее просто параметр) процедуры, которая обеспечивает работу с меню(далее в тексте просто процедура menu).Выражение селектор оператора варианта принимает те же значения, что и выходной параметр процедуры menu.Отметим то, что ветвь оператора else отсутствует. Таким образом, если значение выражения-селектор не совпадает ни с одной из меток варианта оператора case, то данный оператор считается пустым и пропускается.

Параметр процедуры menu может принимать одно из четырех значений: 0, 1, 2, 3.Оператор case, в свою очередь содержит три метки : 0, 1, 2. Когда параметр принимает значение равное 3 (что соответствует пункту меню {Exit}), то оператор case пропускается и происходит выход из цикла и завершение работы программы, о чем было сказано выше.

Таким образом структура основной программы достаточно проста и не вызывает особых сложностей в ее понимании. Далее будут рассмотрены более детально основные блоки алгоритма программы, что позволит разобраться в работе всей программы в целом.

Детализация отдельных участков программы

Итак, перейдем к более детальному рассмотрению отдельных участков алгоритма программы. Прежде всего, cкажу несколько слов о том, что представляет из себя процедура menu.

В первую очередь она обеспечивает интерфейс меню программы <15> и работу с ним пользователя. На экране игрок наблюдает меню, состоящее из 4-x пунктов. Выбор того или иного пункта осуществляется с помощью стандартных клавиш (up,down), что не сомненно очень удобно для любого пользователя, работающего с данной программой. Перемещение по пунктам меню осуществляется посредством цикла с постусловием. В теле цикла располагается несколько операторов условного перехода. В зависимости от того, какая клавиша нажата(up или down), переменной присваивается некоторое значение. После этого координаты указателя изменяются, и он становится на соответствующий пункт (в качестве указателя выступает закрашенный прямоугольник, цвет которого отличается от цвета пунктов меню). Далее проверяется условие выхода из цикла. Если нажата клавиша Enter, то осуществляется выход из цикла, иначе пользователь выбирает другой пункт меню. Таким образом, перемещение по пунктам меню происходит до тех пор, пока не нажата клавиша ввода.

Ym:=0


Когда пользователь нажимает ввод, то происходит выход из цикла и, то значение, которое имеет параметр-переменная процедуры menu передается в оператор варианта.Итак, если значение параметра 0,то начинается игра.


В этом случае осуществляется очистка экрана. Числу шагов, сделанных пользователем присваивается значение ноль. Далее следует создание интерфейсной части игры. В частности печать на

экране различных сообщений (как выйти из игры, число ходов, сделанных игроком), заливка фона экрана, рисование коробочки с последующей ее раскраской. До тех пор пока игрок не сделал ни одного перемещения число шагов равно нулю и на экране просто печатается значение 0.

Как только игрок поизведет первую перестановку, колличество шагов увеличивается на единицу и это сразу отображатся на экране. Для этого каждый раз приходится обновлять ту область экрана, где осуществляется печать результата. Это достигается путем рисования в это области каждый раз нового графического объекта, в данном случае прямоугольной области. Цвет последней на порядок светлее, чем цвет, которым выводится число перестановок. Так как колличество перемещений постоянно изменяется, то данная операция(обновление области) должна осуществляться циклически, Поэтому она находится в основном цикле с постусловием, который будет описан чуть позже. Отмечу еще одну не мало важную деталь, для того, что бы вывести результат на экран необходимо предварительно преобразовать число в последовательность символов.

После того как разработана интерфейсная часть игры(хотя по ходу будут некоторые дополнения) производится заполнение массива случайными числами. Для этого сначала осуществляется инициализация генератора случайных чисел. Непосредственно после этого происходит заполнение массива. Последний элемент массива задается равным 0.

Mas[16]:=0

Первый элемент массива задается до выполнения цикла следующим образом:

Mas[1]:=random[14]+1

Так как процедура random в данном случае выбирает целое число в интервале от 0 до 14, то необходимо добавление к этому числу 1, что бы избежать значение 0. Заполнение остальных элементов массива осуществляется посредством цикла с постусловием. В цикле происходит задание очередного элемента массива с помощью процедуры random и проверка не равен ли данный элемент предыдущим элементам. Если оказывается, что

последующий элемент равен одному из предыдущих, то он задается еще раз. Данная операция осуществляется в цикле с предусловием, который выполняется пока некоторая логическая переменная имеет значение истина. Значение фальш переменная принимает в том случае, если значения предыдущих элементов массива не совпадают со следующим.

mas[16]:=0

mas[1]:=random[14]+1

n:=2
ря работает до тех пор, пока не будет заполнен весь массив.

u:=true

пока u истина выполнять

j:=random[15]+1

присвоить u значение false

i от 1 до n-1 делать

mas[i]=j

да нет

присвоить u

значение

истина

mas[n]:=j

n:=n+1

выполнять до тех пор, пока n не будет равно 16


К-во Просмотров: 899
Бесплатно скачать Курсовая работа: Игровая программа 15