Рефераты. Игра "Пятнашки"

-        Стрелка вниз – перемещает вниз цифру стоящую сверху от пустой клетки;

-        Стрелка вверх – перемещает вверх цифру стоящую снизу от пустой клетки.

Данный алгоритм реализован в процедуре Zamena.

Общий алгоритм данного раздела заключается в следующем (Схема 7):

-     Выбор направления перестановки;

-     Перемещение клеток;

-     Запись об очередном сделанном ходе.

 













Схема 7 - Раздел Замена.


5.3.6.1                     Выбор направления перестановки.

Ранее пользователь сделал ход, а это значит, что мы имеем нажатую служебную клавишу, под каким либо номером. При помощи инструкции IF и функции ord, выбирается направления перестановки элементов.


5.3.6.2                     Перемещение клеток.

В зависимости от значений переменных 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]:='  ';).


5.3.6.3                     Запись об очередном сделанном ходе.

При запуске раздела Игра, некоторой переменной hod присваивается 0. Это означает, что пользователь приступил к игре. После каждого сделанного хода, значение переменной hod увеличивается на единицу. В дальнейшем эта информация будет использована, при определении лучших результатов.


5.3.7       Проверка.

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

Данный раздел реализован в процедуре proverka.

По умолчанию логическая переменная prov равна false (ложь). Программа проверяет если элемент первой строки и первого столбца равен 1, второй равен двум и т.д. и элемент последней строки и последнего столбца равен пустому элементу, то расклад считается, выполнен и переменной prov присваивается значение true (истина).


5.3.8          Итог.

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

Данный раздел реализован в процедуре Mesto.

Общий алгоритм данного раздела заключается в следующем (Схема 8):

-            Количество ходов;

-            Считывание результатов из файла;

-            Проверка, входит ли данный результат в список лучших;

-            Ввод имени;

-            Перестановки в файле результатов;

-            Сохранения результатов в файл.


Перестановки результатов

 
 









                          Нет

 



                

                                       Да

 












Схема - 8 Раздел Итог.


5.3.8.1                     Количество ходов

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


5.3.8.2                     Считывание результатов из файла.

В данном разделе программа считывает данные из файла res.txt и для удобства обработки этой информации, вносит ее в два массива it и res. Массив it содержит информацию о количестве ходов, за которое игроки, игравшие ранее разложили расклад, массив res содержит имена этих игроков.


5.3.8.3                     Проверка, входит ли данный результат в список лучших

В данном разделе результат текущего игрока сравнивается с результатами игроков из массива it.

В случае если игроки, игравшие ранее разложили расклад за наименьшее количество ходов, то программа завершает свою работу и переходит в Главное меню, в противном случае программа продолжает свою работу (сл. пункт.)

5.3.8.4                     Ввод имени.

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


5.3.8.5                     Перестановки в файле результатов.

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

Эту задачу можно решить несколькими способами. Один из способов, это совершать перестановки непосредственно в массивах 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

Страницы: 1, 2, 3, 4, 5, 6



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.