Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

РГР - Ибрагимова Шакиров

.docx
Скачиваний:
15
Добавлен:
31.03.2021
Размер:
131.3 Кб
Скачать

УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ФАКУЛЬТЕТ ИНФОРМАТИКИ И РОБОТОТЕХНИКИ

КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ И КИБЕРНЕТИКИ

УТВЕРЖДАЮ

Проректор университета по научной работе

ФИО

"___" ______________ _______г.

ОТЧЕТ О ПРОВЕДЕНИИ РАСЧЁТНО-ГРАФИЧЕСКОЙ РАБОТЫ

по предмету: ФУНКЦИОНАЛЬНО И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

Преподаватель

Котельников В. А.

Исполнители

Ибрагимова К. Б.

Шакиров А. Р.

Уфа 2020

ВВЕДЕНИЕ

Цель работы – научится работать с простыми механизмами и списками на логическом языке программирования Prolog. Получить новые навыки работы в среде Visual Prolog 5.2. Научиться работать с динамической базой данных.

ЗАДАЧА

Разработать игру «Камень-ножницы-бумага», поддерживающая работу нескольких пользователей.

ХОД РАБОТЫ

Определим факты, которые будут храниться в базе данных.

Рис. 1 – Описание фактов, хранящихся в базе данных

Далее определим первоначальные правила.

Рис. 2 – Описание первоначальных правил

Затем опишем вспомогательные предикаты и правил игры (рисунки 3-4).

Рис. 3 – Описание правил игры (начало)

Рис. 4 – Описание правил игры (продолжение)

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

Пример работы игры продемонстрированы на рисунках 5-7.

Рис. 5 – Экран выбора игрока

Рис. 6 – Выполненный ход каждого игрока

Рис. 7 – Отображение результатов игр

ЗАКЛЮЧЕНИЕ

В ходе выполнения расчетно-графической работы были получены новые знания по работе на логическом языке программирования Prolog. Усвоены приемы работы с Visual Prolog 5.2.

ПРИЛОЖЕНИЕ А. Листинг кода в файле «game.pro»

domains

step = symbol % rock | scissors | paper

player = char % 1 | 2

database

item(char, step)

player_step(player, step)

next(player)

get_next(player, player)

result(player, step, step)

predicates

nondeterm login

nondeterm prompt_menu

nondeterm menu(player)

nondeterm end(player)

nondeterm final

nondeterm print_steps

nondeterm action(player,char)

nondeterm win(step,step,player)

nondeterm print_winner(player,step,step)

constants

file = "game.anime"

clauses

item('1', "rock").

item('2', "scissors").

item('3', "paper").

get_next('1','2').

get_next('2','1').

next('1').

login :-

write("Choose player:"), nl,

write("1 - Player1"), nl,

write("2 - Player2"), nl,

write("0 - Exit game"), nl,

readchar(Char),

menu(Char).

prompt_menu :-

write("1 - Make step"), nl,

write("2 - Show results"), nl,

write("0 - Exit game"), nl.

menu('0') :- save(file), !.

menu(Player) :-

nl,nl,nl,

prompt_menu,

readchar(Char),

retractall(_),

consult(file),

nl,nl,nl,

action(Player,Char).

end(Player) :-

save(file),

write("Press any key to continue"), nl,

readchar(_),

menu(Player).

final :-

next('1'),

player_step('1', X1),

player_step('2', X2),

win(X1, X2, Winner),

assertz(result(Winner,X1,X2)).

final.

win(X,Y,'1') :-

item('1', R), X = R, item('2', S), Y = S, !;

item('2', S), X = S, item('3', P), Y = P, !;

item('3', P), X = P, item('1', R), Y = R, !.

win(X,X,'0') :- !.

win(_,_,'2').

print_steps :-

write("1 - rock"), nl,

write("2 - scissors"), nl,

write("3 - paper"), nl.

action(_,'0') :- save(file), !.

action(Player,'1') :-

next(Player),

print_steps,

readchar(N),

item(N, Step),

retractall(player_step(Player, _)),

assert(player_step(Player, Step)),

get_next(Player, Next),

retractall(next(_)),

assert(next(Next)),

final,

end(Player).

action(Player,'1') :-

write("Wait for the opponent's step!"), nl,

end(Player).

action(_,'2') :- write("Results:"), nl, nl, fail.

action(_,'2') :-

result(Result, Step1, Step2),

print_winner(Result, Step1, Step2),

fail.

action(Player,'2') :- nl, end(Player).

print_winner('0',Step1,Step2) :- write("Draw! ", Step1, " - ", Step2), nl, !.

print_winner(Winner,Step1,Step2) :- write("Winner is Player", Winner, "! ", Step1, " - ", Step2), nl.

goal

login.