Игра - Prolog

Узнай цену своей работы

Решение задачи: «Игра»

textual
Листинг программы
  1. % pn_step(State, Step, Player, Move, X, Y).
  2. :- dynamic(pn_step/6).
  3.  
  4. pn_init(15, 17).
  5.  
  6. pn_act(x, -2).
  7. pn_act(x, 5).
  8. pn_act(y, -3).
  9. pn_act(y, 2).
  10.  
  11. pn_limit(x, 9, 20).
  12. pn_limit(y, 9, 20).
  13.  
  14. pn_win(Z, Z).
  15.  
  16. pn_loss(14, 13).
  17.  
  18. pn_go(Method) :-
  19.     retractall( pn_step(_, _, _, _, _, _) ),
  20.     Step = 0,
  21.     Player = n,
  22.     pn_init(X, Y),
  23.     Move = 0,
  24.     State = start,
  25.     asserta( pn_step(State, Step, Player, Move, X, Y) ),
  26.     format('~w ~w ~w ~w ~w ~w~n', [State, Step, Player, Move, X, Y]),
  27.     between(0, 100, N), N < 100,
  28.     pn_play(Method),
  29.     ( pn_step(win, _, _, _, _, _)
  30.     ; pn_step(loss, _, _, _, _, _)
  31.     ),
  32.     !.
  33.  
  34. pn_play(Method) :-
  35.     once( pn_step(_, Step, Player, _, X, Y) ),
  36.     ( Player = x
  37.      ->
  38.       Player1 = y
  39.     ; Player1 = x
  40.     ),
  41.     pn_play(Method, Player1, X, Y, X1, Y1, Move),
  42.     Step1 is Step + 1,
  43.     ( pn_win(X1, Y1),
  44.       State1 = win
  45.     ; pn_loss(X1, Y1),
  46.       State1 = loss
  47.     ; State1 = step
  48.     ),
  49.     asserta( pn_step(State1, Step1, Player1, Move, X1, Y1) ),
  50.     format('~w ~w ~w ~w ~w ~w~n', [State1, Step1, Player1, Move, X1, Y1]),
  51.     !.
  52.  
  53. pn_play(1, x, X, Y, X1, Y, Move) :-
  54.     pn_move(1, x, X, X1, Move).
  55. pn_play(1, y, X, Y, X, Y1, Move) :-
  56.     pn_move(1, y, Y, Y1, Move).
  57.  
  58. pn_play(2, x, X, Y, X1, Y, Move) :-
  59.     setof( Delta-X0-Move0,
  60.            ( pn_move(1, x, X, X0, Move0),
  61.              Delta is abs(abs(X0) - abs(Y))
  62.            ),
  63.            Moves ),
  64.     select(_-X1-Move, Moves, _),
  65.     \+ pn_loss(X1, Y),
  66.     \+ ( pn_move(1, y, Y, Y1, _), pn_win(X1, Y1) ).
  67. pn_play(2, y, X, Y, X, Y1, Move) :-
  68.     setof( Delta-Y0-Move0,
  69.            ( pn_move(1, y, Y, Y0, Move0),
  70.              Delta is abs(abs(X) - abs(Y0))
  71.            ),
  72.            Moves ),
  73.     select(_-Y1-Move, Moves, _),
  74.     \+ pn_loss(X, Y1),
  75.     \+ ( pn_move(1, x, X, X1, _), pn_win(X1, Y1) ).
  76. pn_play(2, Player, X, Y, X1, Y1, Move) :-
  77.     pn_play(1, Player, X, Y, X1, Y1, Move).
  78.  
  79. pn_move(1, Player, Z, Z1, Move) :-
  80.     pn_act(Player, Move),
  81.     Z1 is Z + Move,
  82.     pn_limit(Player, Low, High),
  83.     Low < Z1, Z1 < High.
  84.  
  85. /** <examples>
  86. ?- pn_go(1).
  87. ?- pn_go(2).
  88. */

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут