domains
list = integer*
predicates
start
choice(integer)
create_kod (list, integer)
dif (list, list, integer, integer)
game_1 (list)
analiz_1 (string, list, list, integer, integer, integer)
compare (integer, list, integer, integer, integer, integer, integer, integer)
start2
game2(integer, integer)
game_2_1(list, list, list, list, integer, integer, integer)
new_list(list, list, integer, list, integer)
analiz_2_1(list, list, list, list, list, integer, integer, integer, integer, integer)
game_2_2(list, integer, integer, integer, list)
analiz_2_2(list , list, integer, integer, integer, integer, list)
change (list, integer, integer, list)
change1(integer, integer, integer, integer)
change2 (list, list, list, integer, integer, integer, integer, integer, list)
random_no_List_N (list, list, integer, integer)
dif2 (list, list, list, list, integer, integer, integer)
add_list (list, integer, list)
del_list (list, list)
write_list(list)
end(integer)
clauses
/* начало программы */
start :- MAKEWINDOW(2,6,56," ‚Выдающийся ум",0,0,25,80),
write(" Правила иры: "), nl,nl,
write("Один игрок загадал число из 5 цифр, другой должен его отгадать."),nl,
write("После ввода очередного числа сообщается: сколько цифр угадано,),nl,
write("¬но стоят не на своих местах ( коровы ), и сколько цифр угадано,"),nl,
write("которые находятся на своих местах ( быки )"),nl,nl,nl,
write("Выбор игрока:"), nl,nl,
write("'k' - Компьютер"),nl,
write(" P.S.:Для просмотра введите f3"), nl,nl,
write("'v' - Вы"),nl,
readchar(N),
choice (N).
choice('k') :- create_kod([],5).
choice('v') :- start2.
choice(_) :- write ("Попробуйте ещё раз!"),
start.
/* создание числового кода */
create_kod(List, N) :- N=0, game_1(List).
create_kod (List, N) :- random(X),
Ch = 9*X,
dif (List, List, Ch, N).
dif([], List, Ch, N) :- N1 = N-1,
create_kod ([Ch|List], N1).
dif([Ch|_], List, Ch, N) :- create_kod (List, N).
dif ([_|R],List, Ch, N) :- dif (R, List, Ch, N).
/* начало игры, где игрок - человек*/
game_1 (List) :- readln(Str), analiz_1(Str, _, List, 5, 0, 0 ).
analiz_1("f3", [], List, _, _, _) :- write_list (List), nl,
write ("Сыграем ещё ? "),nl,
write ("y - Да"), nl,
write ("n – Нет, выйти"), nl,
readchar (X),
end (X).
analiz_1 (_,[], _, N, K, B) :- N=0, B = 5,
write ("Количество коров = ", K),nl,
write ("Количество быков = ", B),nl,
write(" Вы угадали число !!! "), nl,
write(" Сыграем ещё ? "),nl,
write("y - Да"), nl,
write("n – Нет, выйти"),nl,
readchar (X),
end(X).
analiz_1 (_,[], List, N, K, B) :- N=0,
write ("Количество коров = ", K),nl,
write ("Количество быков = ", B),nl,
game_1 (List) .
analiz_1 (Str, [X|R], List, N, K, B) :- frontstr (1, Str, S, Rest),
str_int (S,X),
compare (X, List, N, 5, 0, 0, K1, B1),
N1 = N-1,
K2 = K + K1,
B2 = B + B1,
analiz_1(Rest, R, List, N1, K2, B2).
compare (_, [], _, _, K, B, K1, B1) if K1 = K, B1 = B.
compare (X, [X|R], N, N1, K, B, K1, B1) if N = N1, B2 = B + 1, N2 = N1-1, compare (X, R, N, N2, K, B2, K1, B1).
compare (X, [X|R], N, N1, K, B, K1, B1) if K2 = K + 1, N2 = N1-1, compare (X, R, N, N2, K2, B, K1, B1).
compare (X, [_|R], N, N1, K, B, K1, B1) if N2 = N1-1, compare (X, R, N, N2, K, B, K1, B1).
end('y') :- start.
end('n') :- exit.
end(_) :- write("Вы угадали число"),
write("Сыграем ещё ? "),nl,
write("y - Да"), nl,
write("n - Нет, выйти"),nl,
readchar (N),
end(N).