find_Step и find_Jump – предикаты, генерирующие всевозможные ходы и прыжки;
fin_States – предикат осуществляет проверку конечных стадий;
find_Jump_Find(ilist) – предикат осуществляет поиск всевозможных прыжков, вызывается из find_Jump;
calculate_Fishka_Number(ilist,integer) – предикат осуществляет рассчет оценки хода;
find_Position(pnt,integer,integer) – предикат осуществляет поиск клетки, на которой была нажата кнопка мыши;
best_Move(ilist,integer,ilist) – предикат выбирает ход с лучшей оценкой;
draw_Field(window) и draw_Fishka(window) – предикаты осуществляют прорисовку поля и фишек.
Структура программы:
Программное обеспечение разработано в среде Visual Prolog version 5.0 for Windows 16 Build 971001.8.537, реализовано в виде проекта Fields.vpr, в который включено:
- два программных модуля Fields.pro и Vpitools.pro, заголовочные файлы Fields.con, Fields.def, Fields.grd, Fields.inc, Fields.pre, а также файл Field.bmp с картинкой игрового поля, *_fishka.ico – файлы с картинками фишек;
- главное окно программы, представленное на рисунке 1 (см. приложение);
- строка меню ‘TaskMenu’ с пунктами ‘Файл | Начать игру’, ‘Файл | Выход’, ‘Справка;
- окно справки, разработанное с помощью программы HelpScrible.
Текст программы
/****************************************************************************
Министерство Образования Российской Федерации
ГОУВПО "КнАГТУ"
Расчетно-графическое задание по дисциплине "Функциональное программирование"
Логическая игра "Уголки"
Выполнили студенты группы 4ВC-1: Шелестов И.А., Рогозин В.А.
****************************************************************************/
include "fields.inc"
include "fields.con"
/***************************************************************************
Fields - Main Program
***************************************************************************/
DATABASE - db
data_Fishka(integer,integer,integer,color)%имя, позиция, цвет фишки
my_Move(ilist) % Координаты выбранной фишки игрока
possible_Move(ilist,integer) % Возможные ходы
game_Started(integer) % Флаг начала игры
fishka_Selected(integer) % Флаг выбора фишки
PREDICATES
lets_Go(window) % Инициализация
left_Button_Click(window,pnt) % Нажатие на левую кнопку мыши
right_Button_Click(window,pnt) % Нажатие на правую кнопку мыши
draw_Field(window) % Прорисовка поля
set_Fishka_Start
draw_Fishka(window)
draw_Fishka_Icon(window,integer,integer,color)
draw_Selected_Fishka_Icon(window,integer,integer)
find_Step_Player(integer,integer) %%
find_Jump_Player(integer,integer) %% Проверка хода игрока
find_Jump_Player_Find(ilist) %%
move_Computer % Ход Компьютера
move_Player % Ход Игрока
find_Best_Move(ilist) %%
find_Step %%
find_Jump %% Предикаты поиска наилучшего
find_Jump_Find(ilist) %% хода компьютера
best_Move(ilist,integer,ilist) %%
calculate_Number_For_Fishka(ilist,integer) % Рассчет оценки
nondeterm move(integer,integer,integer,integer,integer,integer)
nondeterm goal_Comp(integer,integer)
comp_Goal(integer,integer)
find_Position(pnt,integer,integer) % Поиск позиции мыши
concat_List(ilist,ilist,ilist)
members(ilist,ilist)
reverse_List(ilist,ilist)
fin_States
CLAUSES
% Взять фишку
right_Button_Click(Win,PNT) :find_Position(PNT,Px,Py),data_Fishka(_,Px,Py,color_White),
fishka_Selected(0),retract(fishka_Selected(0),db),assert(fishka_Selected(1),db),
draw_Selected_Fishka_Icon(Win,Px,Py),
assert(my_Move([Px,Py]),db),!.
% Отмена хода взятой фишкой
right_Button_Click(Win,_) :fishka_Selected(1),
retractall(my_Move(_),db),
retract(fishka_Selected(_),db),assert(fishka_Selected(0),db),
win_Invalidate(Win),!.
% Запись хода
left_Button_Click(Win,PNT):-!,
find_Position(PNT,Pxn,Pyn), fishka_Selected(1),my_Move([Px1,Py1]),
not(find_Step_Player(Px1,Py1)),
not(find_Jump_Player(Px1,Py1)),
possible_Move(XY,_),
reverse_List(XY,[Pxn,Pyn|_]),
retract(data_Fishka(N,Px1,Py1,Clr),db),
assert(data_Fishka(N,Pxn,Pyn,Clr),db),
retractall(possible_Move(_,_),db),
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.