90 likes | 239 Views
Игровые программы на Прологе. Лекция № 15. «Быки и коровы». play :- rnd(X1,X2,X3,X4), int2char(X1,C1), int2char(X2,C2), int2char(X3,C3), int2char(X4,C4), WRITE("Ваши ходы: "),nl, move([C1,C2,C3,C4],1).
E N D
Игровые программы на Прологе Лекция № 15
«Быки и коровы» play :- rnd(X1,X2,X3,X4), int2char(X1,C1), int2char(X2,C2), int2char(X3,C3), int2char(X4,C4), WRITE("Ваши ходы: "),nl, move([C1,C2,C3,C4],1).
Загадывание компьютером числа rnd(X1,X2,X3,X4) :- rand(X1), rand(X2), NOT(find([X1],X2)), rand(X3), NOT(find([X1,X2],X3)), rand(X4), NOT(find([X1,X2,X3],X4)). rnd(X1,X2,X3,X4) :- rnd(X1,X2,X3,X4). rand(X) :- RANDOM(9,X). find([H|_],H). find([_|T],X):- find(T,X). int2char(I,C) :- str_int(S,I), str_char(S,C).
Подсчет попыток move(L,Moves) :- specmove(L,A,Moves), equal(L,A),nl, write(“Поздравляю!!! Вы угадали!"). move([C1,C2,C3,C4],10) :- NL, write("Количество попыток закончилось."),nl, write("Было загадано число "), write(C1), write(C2), write(C3), write(C4). move(L,Moves) :- NewMoves=Moves+1, move(L,NewMoves).
Проверка попытки specmove(L,[A1,A2,A3,A4],Moves) :- write(Moves), write(". "), readchar(A1), write(A1), readchar (A2), write(A2), readchar (A3), write(A3), readchar (A4), write(A4), check_bulls(L,[A1,A2,A3,A4],0), check_cows(L,[A1,A2,A3,A4],0), nl,!.
Проверка быков check_bulls([],_,Bulls):- write(Bulls), write(" : "). check_bulls([H1|T1],T2,Bulls) :- find(T2,H1), NewBulls=Bulls+1, check_bulls(T1,T2,NewBulls). check_bulls([_|T1],T2,Bulls) :- check_bulls(T1,T2,Bulls).
Проверка коров check_cows([],[],Cows) :- write(Cows). check_cows([H1|T1],[H1|T2],Cows):- NewCows=Cows+1, check_cows(T1,T2,NewCows). check_cows([_|T1],[_|T2],Cows):- check_cows(T1,T2,Cows).
Остальные разделы DOMAINS LIST=CHAR* PREDICATES nondetermcheck_cows(LIST,LIST,INTEGER) nondetermcheck_bulls(LIST,LIST,INTEGER) nondeterm rand(INTEGER) nondetermrnd(INTEGER,INTEGER,INTEGER,INTEGER) nondeterm find(LIST,INTEGER) nondeterm int2char(INTEGER,CHAR) nondetermspecmove(LIST,LIST,INTEGER) nondeterm move(LIST,INTEGER) nondeterm play nondeterm equal(LIST,LIST) GOAL play.
Самостоятельное задание Модифицировать программу так, чтобы она работала еще во втором режиме «Машина - человек», т.е. чтобы человек загадывал число, а компьютер отгадывал его.