PDA

Просмотр полной версии : Алгоритмы простых игр с исходниками



demon416
10.07.2009, 13:32
Игры написаны на delphi, компилируются 6 и 7 версиями (остальные не проверял, но тоже должны работать).
1)Пятнашки

http://pic.ipicture.ru/uploads/090710/4S12rfjR90.png (http://ipicture.ru/)

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

http://pic.ipicture.ru/uploads/090710/312UScV8v8.png (http://ipicture.ru/)

http://pic.ipicture.ru/uploads/090710/V0NbkXqPt2.png (http://ipicture.ru/)

При щелчке по 16 клетке надо проверять завершена ли игра, в зависимости от реализации поля это можно делать разными способами,в приложенной программе проверка выполняется путем составления строки из заголовков кнопок и сравнения результата со строкой '123456789101112131415'. Перемешивание в начале игры производиться большим количеством случайных щелчков по полю.
Программа с исходниками (http://depositfiles.com/files/x9lj91tsa)

Ханойские башни

http://pic.ipicture.ru/uploads/090710/me1HqxtHc7.png (http://ipicture.ru/)

Алгоритм работы:

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

Для работы с этими массивами используется несколько функций:
1)Функция проверки пустоты пирамиды:
В цикле проверяет все ячейки массива,если встречает значение больше 0 возвращает значение false (ложь) иначе возвращает значение true (правда) .
2)Функция удаления верхнего кольца с пирамиды:
В цикле проверяет все ячейки массива пока не встретит ячейку с числом больше 0,заменяет содержимое этой ячейки на 0.
3)Функция добавления верхнего кольца в пирамиду в качестве парамера принимает размер добавляемого кольца:
Если верхнее кольцо пирамиды свободно, в цикле проверяет все ячейки массива пока не встретит ячейку с числом больше 0,заменяет содержимое предыдущей ячейки на принятый в качестве парамера размер;если верхнее кольцо занято возвращает значение false, иначе true.
4)Функция определения размер верхнего кольца пирамиды:
В цикле проверяет все ячейки массива пока не встретит ячейку с числом больше 0, возвращает значение этой ячейки.
5)Функция хода принимает в качестве параметров 2 массива (откуда и куда хочет переложить кольцо игрок) в случае правильного(не противоречащего правилам игры) хода возвращает true иначе false

После выполнения нескольких проверок
а)функции переданы разные башни;
б)башня с которой берется кольцо не пустая;
в)верхнее кольцо башни с которой берут кольцо меньше верхнего кольца башни на которую его кладут;
г)башня на которую кладут кольцо не заполнена доверху;
делается ход
а)в башню на которую кладут,добавляется кольцо такого размера как верхнее в башне с которой снимают;
б)в башне с которой снимают удаляется верхнее кольцо;

После каждого делается проверка на конец игры; если первая и вторая пирамида пусты значит игра завершена.
Программа и исходники (http://depositfiles.com/files/61qs6lrj9)

demon416
12.07.2009, 04:33
Змейка

http://pic.ipicture.ru/uploads/090712/UU9wIW6U9t.png (http://ipicture.ru/)

Алгоритм работы:

Игровое поле представляет собой массив записей. Каждая запись содержит состояние ячейки (пустая/кролик/голова змеи/тело змеи) и координаты ячейки со следующим сегментом тела змеи. Дополнительно, в отдельных переменных, сохраняются координаты головы змеи и направление следуещего хода.
При нажатии на кнопки направления соответствующее направление запоминается в переменной "направление следующего хода".
Ходы совершаются по таймеру.
При ходе совершаются следующие действия:
1)Вычисляются новые координаты головы змей.
2)Если новые координаты находятся за границами поля или по ним находится сегмент тела змеи игра завершается
3)В зависимости от содержимого ячеки по новым координатам выполняются следующие действия:
а)если ячейка пуста или в ней находится хвост змеи (сегмент тела с нулевыми координатами следующего сегмента) - хвост перемещаетя,в ячейку по новым координатам записывается значение головы змеи и координаты старой головы, в ячейке старой головы записывается значение сегмента тела змеи;
б)если в ячейке кролик то в ячейку по новым координатам записывается значение головы змеи и координаты старой головы, в ячейке старой головы записывается значение сегмента тела змеи, на поле добавляется новый кролик;

Перемещение хвоста производиться путем записи в ячейку хвоста значения пустой ячейки и записи в предпоследний сегмент тела змеи нулевых координат. Нахождение хвоста состоит в проходе в цикле от головы по цепочке сегментов пока не встретится сегмент с нулевыми координатами следующего сегмента.
Программа и исходники (http://depositfiles.com/files/059l0qoz3)